diff --git a/packages/test-cypress/cypress/e2e/dynamicalsystem/cobwebpolyline.cy.js b/packages/test-cypress/cypress/e2e/dynamicalsystem/cobwebpolyline.cy.js
index 4603b5de4..9fc3a9d67 100644
--- a/packages/test-cypress/cypress/e2e/dynamicalsystem/cobwebpolyline.cy.js
+++ b/packages/test-cypress/cypress/e2e/dynamicalsystem/cobwebpolyline.cy.js
@@ -1861,7 +1861,7 @@ describe("CobwebPolyline Tag Tests", function () {
2x-x^2/3
-
+
`,
},
diff --git a/packages/test-cypress/cypress/e2e/tagSpecific/copy.cy.js b/packages/test-cypress/cypress/e2e/tagSpecific/copy.cy.js
index 02afe4abc..94b5fd26a 100644
--- a/packages/test-cypress/cypress/e2e/tagSpecific/copy.cy.js
+++ b/packages/test-cypress/cypress/e2e/tagSpecific/copy.cy.js
@@ -11946,7 +11946,7 @@ describe("Copy Tag Tests", function () {
{
doenetML: `
a
-
+
Don't get this: Bye
@@ -11992,7 +11992,7 @@ describe("Copy Tag Tests", function () {
{
doenetML: `
a
-
+
Don't get this: Bye
@@ -12056,7 +12056,7 @@ describe("Copy Tag Tests", function () {
{
doenetML: `
a
-
+
Don't get this: Bye
@@ -12120,7 +12120,7 @@ describe("Copy Tag Tests", function () {
{
doenetML: `
a
-
+
Don't get this: Bye
@@ -12213,7 +12213,7 @@ describe("Copy Tag Tests", function () {
{
doenetML: `
a
-
+
Don't get this: Bye
@@ -12306,7 +12306,7 @@ describe("Copy Tag Tests", function () {
{
doenetML: `
a
-
+
Don't get this 2: Leave
@@ -12360,7 +12360,7 @@ describe("Copy Tag Tests", function () {
{
doenetML: `
a
-
+
Don't get this 2: Leave
@@ -12420,7 +12420,7 @@ describe("Copy Tag Tests", function () {
{
doenetML: `
a
-
+
Don't get this 2: Leave
diff --git a/packages/test-cypress/media/bafkreia3r7nyo7bvh3xnx47jvrb7y755a2xg3yhayg5jllknuedks4oalm.doenet b/packages/test-cypress/media/bafkreia3r7nyo7bvh3xnx47jvrb7y755a2xg3yhayg5jllknuedks4oalm.doenet
new file mode 100644
index 000000000..b799c71a1
--- /dev/null
+++ b/packages/test-cypress/media/bafkreia3r7nyo7bvh3xnx47jvrb7y755a2xg3yhayg5jllknuedks4oalm.doenet
@@ -0,0 +1,10 @@
+The DoenetML of a graph:
+
+
+
+
+
+
+
+The DoenetML of the p:
+$p.doenetML
diff --git a/packages/test-cypress/media/bafkreia7xqmfuhas6yrpr7hilr5khjxqsuqddgurnutqczyebj7lzw7zyy.doenet b/packages/test-cypress/media/bafkreia7xqmfuhas6yrpr7hilr5khjxqsuqddgurnutqczyebj7lzw7zyy.doenet
new file mode 100644
index 000000000..cb36b5301
--- /dev/null
+++ b/packages/test-cypress/media/bafkreia7xqmfuhas6yrpr7hilr5khjxqsuqddgurnutqczyebj7lzw7zyy.doenet
@@ -0,0 +1,5 @@
+
+
+ first
+ last
+
\ No newline at end of file
diff --git a/packages/test-cypress/media/bafkreiatlgd6rb5reyd33tba62rpgpkyy33edxc4z2wkvcgluuqo2gbenu.doenet b/packages/test-cypress/media/bafkreiatlgd6rb5reyd33tba62rpgpkyy33edxc4z2wkvcgluuqo2gbenu.doenet
new file mode 100644
index 000000000..e55628569
--- /dev/null
+++ b/packages/test-cypress/media/bafkreiatlgd6rb5reyd33tba62rpgpkyy33edxc4z2wkvcgluuqo2gbenu.doenet
@@ -0,0 +1,5 @@
+
+
+
+Don't get this: Bye
+
\ No newline at end of file
diff --git a/packages/test-cypress/media/bafkreiatr7qxnkb5lnjd7bccsiravqyy7xnpynyskilyg2etb3hva7oe74.doenet b/packages/test-cypress/media/bafkreiatr7qxnkb5lnjd7bccsiravqyy7xnpynyskilyg2etb3hva7oe74.doenet
new file mode 100644
index 000000000..c606bb4af
--- /dev/null
+++ b/packages/test-cypress/media/bafkreiatr7qxnkb5lnjd7bccsiravqyy7xnpynyskilyg2etb3hva7oe74.doenet
@@ -0,0 +1,14 @@
+
+
+Grab the DoenetML from external p:
+
+$(external/p.doenetML)
+
+DoenetML of single line:
+
+ hi
+
diff --git a/packages/test-cypress/media/bafkreiatwotzdmrphuof5j4gsr42jvt266ourxqlpukspkedwe7kfwflze.doenet b/packages/test-cypress/media/bafkreiatwotzdmrphuof5j4gsr42jvt266ourxqlpukspkedwe7kfwflze.doenet
new file mode 100644
index 000000000..b11cc4325
--- /dev/null
+++ b/packages/test-cypress/media/bafkreiatwotzdmrphuof5j4gsr42jvt266ourxqlpukspkedwe7kfwflze.doenet
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Initial condition:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Correct cobwebbing:
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+ To start cobwebbing, click the "Add line" button and move the point at the end of the line.
+
+
+ At least one point on cobweb plot is incorrect.
+
+ For full credit, calculate at least $numIterationsRequired iterates
+ (i.e., to x_{$numIterationsRequired} ).
+
+
\ No newline at end of file
diff --git a/packages/test-cypress/media/bafkreiblfl6xriye7uuiik6xlnuj3suf3xo236enwidz5wyeew7pcec3ba.doenet b/packages/test-cypress/media/bafkreiblfl6xriye7uuiik6xlnuj3suf3xo236enwidz5wyeew7pcec3ba.doenet
new file mode 100644
index 000000000..ac1a785ce
--- /dev/null
+++ b/packages/test-cypress/media/bafkreiblfl6xriye7uuiik6xlnuj3suf3xo236enwidz5wyeew7pcec3ba.doenet
@@ -0,0 +1,3 @@
+
+
+Don't get this: Bye
\ No newline at end of file
diff --git a/packages/test-cypress/media/bafkreici7lwt3yywhf75ypbcu62bumszzrxqgukaetwywajjbbnh45zfqa.doenet b/packages/test-cypress/media/bafkreici7lwt3yywhf75ypbcu62bumszzrxqgukaetwywajjbbnh45zfqa.doenet
new file mode 100644
index 000000000..e70d4ed2e
--- /dev/null
+++ b/packages/test-cypress/media/bafkreici7lwt3yywhf75ypbcu62bumszzrxqgukaetwywajjbbnh45zfqa.doenet
@@ -0,0 +1,55 @@
+Outer
+ Intended target: Hello
+
+ Five copies:
+
+
+
+
+
+
+
+ New namespace
+ Local target: Hola
+ Five copies of local:
+
+
+
+
+
+
+ Five copies of base:
+
+
+
+
+
+
+
+ Another new namespace
+ Local target: Marhaban
+ Five copies of local:
+
+
+
+
+
+
+ Five copies of middle:
+
+
+
+
+
+
+ Five copies of base:
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/test-cypress/media/bafkreid5s6fwzzfaax7pr3d2i2iu2743vvzrvttjy55vcmvunka7nu3ope.doenet b/packages/test-cypress/media/bafkreid5s6fwzzfaax7pr3d2i2iu2743vvzrvttjy55vcmvunka7nu3ope.doenet
new file mode 100644
index 000000000..04f059028
--- /dev/null
+++ b/packages/test-cypress/media/bafkreid5s6fwzzfaax7pr3d2i2iu2743vvzrvttjy55vcmvunka7nu3ope.doenet
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/test-cypress/media/bafkreide4mismb45mxved2ibfh5jnj75kty7vjz7w6zo7goyxpwr2e7wti.doenet b/packages/test-cypress/media/bafkreide4mismb45mxved2ibfh5jnj75kty7vjz7w6zo7goyxpwr2e7wti.doenet
new file mode 100644
index 000000000..c187b3c79
--- /dev/null
+++ b/packages/test-cypress/media/bafkreide4mismb45mxved2ibfh5jnj75kty7vjz7w6zo7goyxpwr2e7wti.doenet
@@ -0,0 +1,13 @@
+
+ Derivative problem
+
+ What is the derivative of x^2 ?
+
+
+ $expr
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/test-cypress/media/bafkreidqud3rixmphu3jufuke4rw7magtcrbrjgeo6ihkoyonsig7wciey.doenet b/packages/test-cypress/media/bafkreidqud3rixmphu3jufuke4rw7magtcrbrjgeo6ihkoyonsig7wciey.doenet
new file mode 100644
index 000000000..0066d0730
--- /dev/null
+++ b/packages/test-cypress/media/bafkreidqud3rixmphu3jufuke4rw7magtcrbrjgeo6ihkoyonsig7wciey.doenet
@@ -0,0 +1,31 @@
+ Animal sounds
+
+
+
+
+
+ cat meow
+
+
+ dog woof
+
+
+ mouse squeak
+
+
+ fish blub
+
+
+
+ What does the $animal say?
+
+
+ meow
+ woof
+ squeak
+ blub
+
+
+
+ That's right, the $animal goes $sound!
+ Try again.
diff --git a/packages/test-cypress/media/bafkreief4dcu4mfiqfib2xii5ftoevhbymn34dyi4inqsxdfvfskj234qi.doenet b/packages/test-cypress/media/bafkreief4dcu4mfiqfib2xii5ftoevhbymn34dyi4inqsxdfvfskj234qi.doenet
new file mode 100644
index 000000000..ee5dd2990
--- /dev/null
+++ b/packages/test-cypress/media/bafkreief4dcu4mfiqfib2xii5ftoevhbymn34dyi4inqsxdfvfskj234qi.doenet
@@ -0,0 +1,497 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+
+ $$f($x0)
+ $$f($x1)
+ false
+ false
+ ($xmin+$xmax)/2
+ ($ymin+$ymax)/2
+ 1
+ $nPoints >= 1 and $P1 = ($x0,0)
+ 1
+ $nVlines >= 1 and $pv11.x = $x0
+ 1
+ $nHlines >= 1 and $ph11.y = $x1
+ 1
+ $nPoints >= 2 and $P2 = (0,$x1)
+ 1
+ $nPoints >= 2 and $P3 = ($x1,0)
+ 1
+ $nVlines >= 2 and $pv21.x = $x1
+ 1
+ $nHlines >= 2 and $ph21.y = $x2
+ 1
+ $nPoints >= 4 and $P4 = (0,$x2)
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+ ($(variable)_0,0)
+
+
+
+
+
+
+
+
+
+
+ (0,$(variable)_1)
+
+
+
+
+
+
+ ($(variable)_1,0)
+
+
+
+
+
+
+
+
+
+
+ (0,$(variable)_2)
+
+
+
+
+
+
+
+
+
+
+ Results
+
+
+
+ $(variable)_0 \amp = $(x0{displayDecimals="2"})
+
+
+ $(variable)_1 \amp = $x1
+
+
+ $(variable)_2 \amp = $(x2{displayDecimals="2"})
+
+
+
+
+
+
+
+
+ Goal
+
+
+
+ This tutorial will give step-by-step instructions for using the graph of the function f($variable) = to iterate the dynamical system
+
+ $(variable)_{n+1} \amp =
+ $(variable)_0 \amp = $x0.
+
+
+
+
+ The first step is to create a point for the initial condition $(variable)_0 = $x0 .
+
+
+ We want to graphically apply the function to the initial condition $(variable)_0 = $x0 to determine the value of f($(variable)_0).
+
+ For this step, we'll draw a vertical line through the initial condition which will intersect the graph of the function at f($(variable)_0) .
+
+
+ The value of $(variable)_1 = f($(variable)_0) is where the vertical line intersects the graph of the function. We'll draw a horizontal line at that height and place a point where it hits the y -axis to read the value of $(variable)_1 off the y -axis.
+
+
+ Now that we know that $(variable)_1 = $x1 , we can repeat the previous steps to calculate $(variable)_2 = f($(variable)_1) .
+
+ So far, we have the value of $(variable)_1 shown by a point on the y -axis. In this step, we'll translate the value of $(variable)_1 into a point on the x -axis.
+
+
+
+ To estimate the value of $(variable)_2 = f($(variable)_1) , draw a vertical line through the point ($x1,0) to see where it intersects the graph of the function.
+
+
+ We need to determine the height of the function where the vertical line through ($x1,0) hits the graph of the function. This height will be the value of $(variable)_2 .
+
+ We'll draw a horizontal line and a point along the y -axis to determine this height.
+
+
+
+ The graph is getting a bit busy, so we won't keep going to $(variable)_3 or beyond with drawing all these lines.
+
+ Here, you can just get a gimpse of the simpler strategy we'll use to iterate the system more efficiently.
+
+
+
+
+
+
+ Instructions
+
+
+
+
+ Click Next to begin.
+
+
+
+
+
+ Click
+
+ add point
+
+ to create a point for the initial condition.
+
+
+ Now move the point to the x -axis and the location of the initial condition $(variable)_0=$x0 .
+
+
+ Great! We'll use the Results panel to keep track of the values of $(variable)_n . It now shows that $(variable)_0=$x0 .
+
+ Click Next to move on to the next step.
+
+
+
+
+
+
+ Click
+
+ add vertical line
+
+ to create the line.
+
+
+ Move the line to $variable=$x0 .
+
+
+ Line is in place. Click Next to continue.
+
+
+
+
+
+
+
+ Click
+
+ add horizontal line
+
+ to create the line.
+
+
+
+ Move the line to the height of f($(variable)_0).
+
+
+
+ The horizontal line is in place. Click
+
+ add point
+
+ to create a point.
+
+
+
+ Move that point to where the horizontal line intersects the y -axis.
+
+
+
+ Good job! The coordinates of that point are (0, $(variable)_1) = (0,$x1) . The value $(variable)_1=$x1 now appears in the results.
+
+ Click Next to move on to the next step.
+
+
+
+
+
+
+
+ Click
+
+ add point
+
+ to create a point.
+
+
+ Move the point to the location ($x1,0) , which is on the x -axis.
+
+
+ Way to go! Now we're set to estimate the value of f($(variable)_1) . Click Next to continue.
+
+
+
+
+
+
+
+
+ Click
+
+ add vertical line
+
+ to create a vertical line.
+
+
+ Move the line so it goes through the point ($x1,0) .
+
+
+ Making progress! Click Next to move on to the next step.
+
+
+
+
+
+
+
+ Click
+
+ add horizontal line
+
+ to create a horizontal line.
+
+
+ Move the line to the point where the vertical line through ($x1,0) intersects the function.
+
+
+ The line is where we want it. Now, create a point by clicking
+
+ add point
+ .
+
+
+ Move the point to where that horizontal line crosses the y -axis.
+
+
+ Awesome! The coordinates of that point are (0, $(variable)_2) = (0,$x2) . We added $(variable)_2=$x2 to the results.
+ Click Next to continue.
+
+
+
+
+
+
+
+ Click this
+
+ preview shortcut
+
+
+
+ button to reveal the shortcut on the graph.
+
+
+ Congratulations, you've finished this introductory tutorial on cobwebbing!
+
+
+
+
+
+
+
+
+ Reset tutorial
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Next
+
+
+
+
+ true
+
+
+
+
+
+
+
+
diff --git a/packages/test-cypress/media/bafkreiewuu4vpro2d3vxm3wmclbsgzcsdsswhmtfcrqq7m6datze2tiwu4.doenet b/packages/test-cypress/media/bafkreiewuu4vpro2d3vxm3wmclbsgzcsdsswhmtfcrqq7m6datze2tiwu4.doenet
new file mode 100644
index 000000000..4fd34e13a
--- /dev/null
+++ b/packages/test-cypress/media/bafkreiewuu4vpro2d3vxm3wmclbsgzcsdsswhmtfcrqq7m6datze2tiwu4.doenet
@@ -0,0 +1 @@
+8.8537293749534271943
diff --git a/packages/test-cypress/media/bafkreifbeoxzphrpufrirccso2l4rtqgbcgli2bhbdzmccaopj3u6fkmdy.doenet b/packages/test-cypress/media/bafkreifbeoxzphrpufrirccso2l4rtqgbcgli2bhbdzmccaopj3u6fkmdy.doenet
new file mode 100644
index 000000000..9178ec026
--- /dev/null
+++ b/packages/test-cypress/media/bafkreifbeoxzphrpufrirccso2l4rtqgbcgli2bhbdzmccaopj3u6fkmdy.doenet
@@ -0,0 +1,35 @@
+Intended target: Hello
+
+Five copies:
+
+
+
+
+
+
+
+New namespace
+ Local target: Hola
+ Copy of local:
+ Fives copies of base:
+
+
+
+
+
+
+
+ Another new namespace
+ Local target: Marhaban
+ Copy of local:
+ Copy of middle:
+ Fives copies of base:
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/test-cypress/media/bafkreifgmyjuw4m6odukznenshkyfupp3egx6ep3jgnlo747d6s5v7nznu.doenet b/packages/test-cypress/media/bafkreifgmyjuw4m6odukznenshkyfupp3egx6ep3jgnlo747d6s5v7nznu.doenet
new file mode 100644
index 000000000..afc5adebd
--- /dev/null
+++ b/packages/test-cypress/media/bafkreifgmyjuw4m6odukznenshkyfupp3egx6ep3jgnlo747d6s5v7nznu.doenet
@@ -0,0 +1,34 @@
+
+ Animal sounds
+
+
+
+
+
+ cat meow
+
+
+ dog woof
+
+
+ mouse squeak
+
+
+ fish blub
+
+
+
+ What does the $animal say?
+
+
+ meow
+ woof
+ squeak
+ blub
+
+
+
+ That's right, the $animal goes $sound!
+ Try again.
+
+
diff --git a/packages/test-cypress/media/bafkreighf6sivfiy44rjw6ogye222eugueeg2lxuijobo4bvyyjxxceaqy.doenet b/packages/test-cypress/media/bafkreighf6sivfiy44rjw6ogye222eugueeg2lxuijobo4bvyyjxxceaqy.doenet
new file mode 100644
index 000000000..8b88ef5e2
--- /dev/null
+++ b/packages/test-cypress/media/bafkreighf6sivfiy44rjw6ogye222eugueeg2lxuijobo4bvyyjxxceaqy.doenet
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 0
+
+
+
+
+
+
+ $initialPoint = ($x0,0)
+
+
+
+
+ Add line
+
+
+ Delete line
+
+
+
+ $(variable)_$timeVariable"
+ $(variable)_{$timeVariable+1}
+
+
+
+
+ Calculated values
+
+
+
+
+
+ $(variable)_{$i-1 } \amp = $(x{displayDigits="5"})
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/test-cypress/media/bafkreigqo7xagr2hyfacifhzyrlnzbrd3aqpgs2rvt5ednsm3qdbk7aduy.doenet b/packages/test-cypress/media/bafkreigqo7xagr2hyfacifhzyrlnzbrd3aqpgs2rvt5ednsm3qdbk7aduy.doenet
new file mode 100644
index 000000000..17d1e2596
--- /dev/null
+++ b/packages/test-cypress/media/bafkreigqo7xagr2hyfacifhzyrlnzbrd3aqpgs2rvt5ednsm3qdbk7aduy.doenet
@@ -0,0 +1,59 @@
+Outer
+ Intended target: Hello
+
+ Five copies:
+
+
+
+
+
+
+
+ Four no matches:
+
+ New namespace
+ Local target: Hola
+ Five copies of local:
+
+
+
+
+
+
+ Fives copies of base:
+
+
+
+
+
+
+ Four no matches:
+
+ Another new namespace
+ Local target: Marhaban
+ Five copies of local:
+
+
+
+
+
+
+ Five copies of middle:
+
+
+
+
+
+
+ Fives copies of base:
+
+
+
+
+
+
+ Four no matches:
+
+
+
+
\ No newline at end of file
diff --git a/packages/test-cypress/media/bafkreigvxxq2khrtoltaqfecscknot5jttw6mtfp5j4bmfwsyufxh6aav4.doenet b/packages/test-cypress/media/bafkreigvxxq2khrtoltaqfecscknot5jttw6mtfp5j4bmfwsyufxh6aav4.doenet
new file mode 100644
index 000000000..e7fdc43c7
--- /dev/null
+++ b/packages/test-cypress/media/bafkreigvxxq2khrtoltaqfecscknot5jttw6mtfp5j4bmfwsyufxh6aav4.doenet
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+ $title
+
+ Move the point to ($goalx, $goaly) .
+
+
+
+
+
+
+
+
+
+
+
+ $P = ($goalx, $goaly)
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/test-cypress/vite.config.ts b/packages/test-cypress/vite.config.ts
index 76f610e84..870ae88ca 100644
--- a/packages/test-cypress/vite.config.ts
+++ b/packages/test-cypress/vite.config.ts
@@ -28,6 +28,10 @@ export default defineConfig({
),
dest: "fonts/",
},
+ {
+ src: "./media/*",
+ dest: "media/",
+ },
],
}),
],
diff --git a/packages/test-viewer/vite.config.ts b/packages/test-viewer/vite.config.ts
index 76f610e84..870ae88ca 100644
--- a/packages/test-viewer/vite.config.ts
+++ b/packages/test-viewer/vite.config.ts
@@ -28,6 +28,10 @@ export default defineConfig({
),
dest: "fonts/",
},
+ {
+ src: "./media/*",
+ dest: "media/",
+ },
],
}),
],