From cc65756d6a3da49a0709b45ecf16abc20ce07d66 Mon Sep 17 00:00:00 2001 From: andyeisenberg Date: Thu, 22 Jan 2026 10:16:02 -0500 Subject: [PATCH] Latest build deployed. --- archives.html | 31 - authors.html | 30 - categories.html | 30 - course/.mapping.json | 2 +- ...279414751.js => ._662.e77a89c65303c376.js} | Bin ...751.js.gz => ._662.e77a89c65303c376.js.gz} | Bin ...1.js.map => ._662.e77a89c65303c376.js.map} | Bin ...ap.gz => ._662.e77a89c65303c376.js.map.gz} | Bin ...> ._prefix-runestone.6ec5960970d8b364.css} | Bin ..._prefix-runestone.6ec5960970d8b364.css.gz} | Bin ...prefix-runestone.6ec5960970d8b364.css.map} | Bin ...fix-runestone.6ec5960970d8b364.css.map.gz} | Bin ...efix-runestone.80892ed1280c2803.bundle.js} | Bin ...ne.80892ed1280c2803.bundle.js.LICENSE.txt} | Bin ...80892ed1280c2803.bundle.js.LICENSE.txt.gz} | Bin ...x-runestone.80892ed1280c2803.bundle.js.gz} | Bin ...-runestone.80892ed1280c2803.bundle.js.map} | Bin ...nestone.80892ed1280c2803.bundle.js.map.gz} | Bin ...prefix-runtime.3dca4b99808f4053.bundle.js} | Bin ...fix-runtime.3dca4b99808f4053.bundle.js.gz} | Bin ...ix-runtime.3dca4b99808f4053.bundle.js.map} | Bin ...runtime.3dca4b99808f4053.bundle.js.map.gz} | Bin course/_static/662.1bb5065279414751.js | 2 - course/_static/662.1bb5065279414751.js.gz | Bin 2781 -> 0 bytes course/_static/662.1bb5065279414751.js.map | 1 - course/_static/662.1bb5065279414751.js.map.gz | Bin 8687 -> 0 bytes course/_static/662.e77a89c65303c376.js | 2 + course/_static/662.e77a89c65303c376.js.gz | Bin 0 -> 2781 bytes course/_static/662.e77a89c65303c376.js.map | 1 + course/_static/662.e77a89c65303c376.js.map.gz | Bin 0 -> 8683 bytes course/_static/_runestone-services.xml | 8 +- ...ix-runestone.1c010553c35c544c.bundle.js.gz | Bin 22561 -> 0 bytes ...x-runestone.1c010553c35c544c.bundle.js.map | 1 - ...unestone.1c010553c35c544c.bundle.js.map.gz | Bin 70241 -> 0 bytes .../prefix-runestone.677a75a9120449ff.css.map | 1 - ...efix-runestone.677a75a9120449ff.css.map.gz | Bin 52921 -> 0 bytes ... => prefix-runestone.6ec5960970d8b364.css} | 4 +- ... prefix-runestone.6ec5960970d8b364.css.gz} | Bin 37910 -> 38178 bytes .../prefix-runestone.6ec5960970d8b364.css.map | 1 + ...efix-runestone.6ec5960970d8b364.css.map.gz | Bin 0 -> 53075 bytes ...efix-runestone.80892ed1280c2803.bundle.js} | 6 +- ...ne.80892ed1280c2803.bundle.js.LICENSE.txt} | 0 ...80892ed1280c2803.bundle.js.LICENSE.txt.gz} | Bin ...ix-runestone.80892ed1280c2803.bundle.js.gz | Bin 0 -> 22602 bytes ...x-runestone.80892ed1280c2803.bundle.js.map | 1 + ...unestone.80892ed1280c2803.bundle.js.map.gz | Bin 0 -> 70356 bytes ...prefix-runtime.3dca4b99808f4053.bundle.js} | 4 +- ...efix-runtime.3dca4b99808f4053.bundle.js.gz | Bin 0 -> 3114 bytes ...ix-runtime.3dca4b99808f4053.bundle.js.map} | 2 +- ...-runtime.3dca4b99808f4053.bundle.js.map.gz | Bin 0 -> 8477 bytes ...efix-runtime.991c135ccf182bf5.bundle.js.gz | Bin 3116 -> 0 bytes ...-runtime.991c135ccf182bf5.bundle.js.map.gz | Bin 8479 -> 0 bytes .../pretext/css/print-worksheet.css.map | 2 +- course/_static/pretext/css/theme.css.map | 2 +- course/_static/webpack_static_imports.json | 2 +- course/_static/webpack_static_imports.json.gz | Bin 153 -> 155 bytes course/_static/webpack_static_imports.xml | 8 +- course/ch-notes.html | 58 +- course/course-documents.html | 46 +- course/frontmatter.html | 46 +- .../latex-image/fig-Venn-diagram-2.svg | 27 - course/index.html | 2 +- .../knowl/xref/example-rolls-conditional.html | 6 +- course/lunr-pretext-search-index.js | 197 +- course/notes-01-13.html | 524 ++ course/notes-01-15.html | 416 ++ course/notes-01-20.html | 348 ++ course/notes-week-01.html | 709 --- course/quiz-01-printable.html | 322 ++ course/quiz-01.html | 306 + course/quizzes.html | 220 + .../recitation-calculus-review-printable.html | 54 +- course/recitation-calculus-review.html | 50 +- course/recitations.html | 50 +- course/root-1-2.html | 47 +- course/syllabus.html | 46 +- index.html | 34 - slides-annotated/_static/pretext/js/answer.js | 552 -- .../_static/pretext/js/diagcess/diagcess.js | 1 - slides-annotated/_static/pretext/js/edit.js | 4988 ----------------- .../_static/pretext/js/highlight.js | 480 -- .../_static/pretext/js/instructor.js | 131 - .../_static/pretext/js/lib/jquery.espy.min.js | 195 - .../_static/pretext/js/lib/jquery.min.js | 2 - .../_static/pretext/js/lib/jquery.sticky.js | 161 - .../_static/pretext/js/lib/knowl.js | 338 -- .../_static/pretext/js/lib/mathjaxknowl.js | 109 - .../_static/pretext/js/lib/mathjaxknowl3.js | 48 - slides-annotated/_static/pretext/js/login.js | 322 -- .../_static/pretext/js/lti_iframe_resizer.js | 48 - .../pretext/js/pretext-stack/stackapicalls.js | 515 -- .../pretext/js/pretext-stack/stackjsvle.js | 652 --- .../pretext-webwork/2.16/pretext-webwork.js | 753 --- .../pretext-webwork/2.17/pretext-webwork.js | 1058 ---- .../pretext-webwork/2.18/pretext-webwork.js | 1058 ---- .../pretext-webwork/2.19/pretext-webwork.js | 677 --- .../pretext-webwork/2.20/pretext-webwork.js | 686 --- .../_static/pretext/js/pretext.js | 257 - .../_static/pretext/js/pretext_add_on.js | 1264 ----- .../_static/pretext/js/pretext_search.js | 315 -- .../_static/pretext/js/ptx_search.js | 112 - .../_static/pretext/js/user_preferences.js | 510 -- slides-annotated/index.html | 206 - slides/_static/pretext/js/answer.js | 552 -- .../_static/pretext/js/diagcess/diagcess.js | 1 - slides/_static/pretext/js/edit.js | 4988 ----------------- slides/_static/pretext/js/highlight.js | 480 -- slides/_static/pretext/js/instructor.js | 131 - .../_static/pretext/js/lib/jquery.espy.min.js | 195 - slides/_static/pretext/js/lib/jquery.min.js | 2 - .../_static/pretext/js/lib/jquery.sticky.js | 161 - slides/_static/pretext/js/lib/knowl.js | 338 -- slides/_static/pretext/js/lib/mathjaxknowl.js | 109 - .../_static/pretext/js/lib/mathjaxknowl3.js | 48 - slides/_static/pretext/js/login.js | 322 -- .../_static/pretext/js/lti_iframe_resizer.js | 48 - .../pretext/js/pretext-stack/stackapicalls.js | 515 -- .../pretext/js/pretext-stack/stackjsvle.js | 652 --- .../pretext-webwork/2.16/pretext-webwork.js | 753 --- .../pretext-webwork/2.17/pretext-webwork.js | 1058 ---- .../pretext-webwork/2.18/pretext-webwork.js | 1058 ---- .../pretext-webwork/2.19/pretext-webwork.js | 677 --- .../pretext-webwork/2.20/pretext-webwork.js | 686 --- slides/_static/pretext/js/pretext.js | 257 - slides/_static/pretext/js/pretext_add_on.js | 1264 ----- slides/_static/pretext/js/pretext_search.js | 315 -- slides/_static/pretext/js/ptx_search.js | 112 - slides/_static/pretext/js/user_preferences.js | 510 -- slides/index.html | 249 - tags.html | 30 - theme/css/ptx-bg-dark.svg | 676 --- theme/css/ptx-bg-light.svg | 676 --- theme/css/style.css | 691 --- 133 files changed, 2578 insertions(+), 34063 deletions(-) delete mode 100755 archives.html delete mode 100755 authors.html delete mode 100755 categories.html rename course/_static/{._662.1bb5065279414751.js => ._662.e77a89c65303c376.js} (100%) rename course/_static/{._662.1bb5065279414751.js.gz => ._662.e77a89c65303c376.js.gz} (100%) rename course/_static/{._662.1bb5065279414751.js.map => ._662.e77a89c65303c376.js.map} (100%) rename course/_static/{._662.1bb5065279414751.js.map.gz => ._662.e77a89c65303c376.js.map.gz} (100%) rename course/_static/{._prefix-runestone.1c010553c35c544c.bundle.js => ._prefix-runestone.6ec5960970d8b364.css} (100%) rename course/_static/{._prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt => ._prefix-runestone.6ec5960970d8b364.css.gz} (100%) rename course/_static/{._prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt.gz => ._prefix-runestone.6ec5960970d8b364.css.map} (100%) rename course/_static/{._prefix-runestone.1c010553c35c544c.bundle.js.gz => ._prefix-runestone.6ec5960970d8b364.css.map.gz} (100%) rename course/_static/{._prefix-runestone.1c010553c35c544c.bundle.js.map => ._prefix-runestone.80892ed1280c2803.bundle.js} (100%) rename course/_static/{._prefix-runestone.1c010553c35c544c.bundle.js.map.gz => ._prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt} (100%) rename course/_static/{._prefix-runestone.677a75a9120449ff.css => ._prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt.gz} (100%) rename course/_static/{._prefix-runestone.677a75a9120449ff.css.gz => ._prefix-runestone.80892ed1280c2803.bundle.js.gz} (100%) rename course/_static/{._prefix-runestone.677a75a9120449ff.css.map => ._prefix-runestone.80892ed1280c2803.bundle.js.map} (100%) rename course/_static/{._prefix-runestone.677a75a9120449ff.css.map.gz => ._prefix-runestone.80892ed1280c2803.bundle.js.map.gz} (100%) rename course/_static/{._prefix-runtime.991c135ccf182bf5.bundle.js => ._prefix-runtime.3dca4b99808f4053.bundle.js} (100%) rename course/_static/{._prefix-runtime.991c135ccf182bf5.bundle.js.gz => ._prefix-runtime.3dca4b99808f4053.bundle.js.gz} (100%) rename course/_static/{._prefix-runtime.991c135ccf182bf5.bundle.js.map => ._prefix-runtime.3dca4b99808f4053.bundle.js.map} (100%) rename course/_static/{._prefix-runtime.991c135ccf182bf5.bundle.js.map.gz => ._prefix-runtime.3dca4b99808f4053.bundle.js.map.gz} (100%) delete mode 100755 course/_static/662.1bb5065279414751.js delete mode 100755 course/_static/662.1bb5065279414751.js.gz delete mode 100755 course/_static/662.1bb5065279414751.js.map delete mode 100755 course/_static/662.1bb5065279414751.js.map.gz create mode 100755 course/_static/662.e77a89c65303c376.js create mode 100755 course/_static/662.e77a89c65303c376.js.gz create mode 100755 course/_static/662.e77a89c65303c376.js.map create mode 100755 course/_static/662.e77a89c65303c376.js.map.gz delete mode 100755 course/_static/prefix-runestone.1c010553c35c544c.bundle.js.gz delete mode 100755 course/_static/prefix-runestone.1c010553c35c544c.bundle.js.map delete mode 100755 course/_static/prefix-runestone.1c010553c35c544c.bundle.js.map.gz delete mode 100755 course/_static/prefix-runestone.677a75a9120449ff.css.map delete mode 100755 course/_static/prefix-runestone.677a75a9120449ff.css.map.gz rename course/_static/{prefix-runestone.677a75a9120449ff.css => prefix-runestone.6ec5960970d8b364.css} (94%) rename course/_static/{prefix-runestone.677a75a9120449ff.css.gz => prefix-runestone.6ec5960970d8b364.css.gz} (76%) create mode 100755 course/_static/prefix-runestone.6ec5960970d8b364.css.map create mode 100755 course/_static/prefix-runestone.6ec5960970d8b364.css.map.gz rename course/_static/{prefix-runestone.1c010553c35c544c.bundle.js => prefix-runestone.80892ed1280c2803.bundle.js} (76%) rename course/_static/{prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt => prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt} (100%) rename course/_static/{prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt.gz => prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt.gz} (100%) create mode 100755 course/_static/prefix-runestone.80892ed1280c2803.bundle.js.gz create mode 100755 course/_static/prefix-runestone.80892ed1280c2803.bundle.js.map create mode 100755 course/_static/prefix-runestone.80892ed1280c2803.bundle.js.map.gz rename course/_static/{prefix-runtime.991c135ccf182bf5.bundle.js => prefix-runtime.3dca4b99808f4053.bundle.js} (82%) create mode 100755 course/_static/prefix-runtime.3dca4b99808f4053.bundle.js.gz rename course/_static/{prefix-runtime.991c135ccf182bf5.bundle.js.map => prefix-runtime.3dca4b99808f4053.bundle.js.map} (99%) create mode 100755 course/_static/prefix-runtime.3dca4b99808f4053.bundle.js.map.gz delete mode 100755 course/_static/prefix-runtime.991c135ccf182bf5.bundle.js.gz delete mode 100755 course/_static/prefix-runtime.991c135ccf182bf5.bundle.js.map.gz delete mode 100755 course/generated/latex-image/fig-Venn-diagram-2.svg create mode 100755 course/notes-01-13.html create mode 100755 course/notes-01-15.html create mode 100755 course/notes-01-20.html delete mode 100755 course/notes-week-01.html create mode 100755 course/quiz-01-printable.html create mode 100755 course/quiz-01.html create mode 100755 course/quizzes.html delete mode 100755 index.html delete mode 100755 slides-annotated/_static/pretext/js/answer.js delete mode 100755 slides-annotated/_static/pretext/js/diagcess/diagcess.js delete mode 100755 slides-annotated/_static/pretext/js/edit.js delete mode 100755 slides-annotated/_static/pretext/js/highlight.js delete mode 100755 slides-annotated/_static/pretext/js/instructor.js delete mode 100755 slides-annotated/_static/pretext/js/lib/jquery.espy.min.js delete mode 100755 slides-annotated/_static/pretext/js/lib/jquery.min.js delete mode 100755 slides-annotated/_static/pretext/js/lib/jquery.sticky.js delete mode 100755 slides-annotated/_static/pretext/js/lib/knowl.js delete mode 100755 slides-annotated/_static/pretext/js/lib/mathjaxknowl.js delete mode 100755 slides-annotated/_static/pretext/js/lib/mathjaxknowl3.js delete mode 100755 slides-annotated/_static/pretext/js/login.js delete mode 100755 slides-annotated/_static/pretext/js/lti_iframe_resizer.js delete mode 100755 slides-annotated/_static/pretext/js/pretext-stack/stackapicalls.js delete mode 100755 slides-annotated/_static/pretext/js/pretext-stack/stackjsvle.js delete mode 100755 slides-annotated/_static/pretext/js/pretext-webwork/2.16/pretext-webwork.js delete mode 100755 slides-annotated/_static/pretext/js/pretext-webwork/2.17/pretext-webwork.js delete mode 100755 slides-annotated/_static/pretext/js/pretext-webwork/2.18/pretext-webwork.js delete mode 100755 slides-annotated/_static/pretext/js/pretext-webwork/2.19/pretext-webwork.js delete mode 100755 slides-annotated/_static/pretext/js/pretext-webwork/2.20/pretext-webwork.js delete mode 100755 slides-annotated/_static/pretext/js/pretext.js delete mode 100755 slides-annotated/_static/pretext/js/pretext_add_on.js delete mode 100755 slides-annotated/_static/pretext/js/pretext_search.js delete mode 100755 slides-annotated/_static/pretext/js/ptx_search.js delete mode 100755 slides-annotated/_static/pretext/js/user_preferences.js delete mode 100755 slides-annotated/index.html delete mode 100755 slides/_static/pretext/js/answer.js delete mode 100755 slides/_static/pretext/js/diagcess/diagcess.js delete mode 100755 slides/_static/pretext/js/edit.js delete mode 100755 slides/_static/pretext/js/highlight.js delete mode 100755 slides/_static/pretext/js/instructor.js delete mode 100755 slides/_static/pretext/js/lib/jquery.espy.min.js delete mode 100755 slides/_static/pretext/js/lib/jquery.min.js delete mode 100755 slides/_static/pretext/js/lib/jquery.sticky.js delete mode 100755 slides/_static/pretext/js/lib/knowl.js delete mode 100755 slides/_static/pretext/js/lib/mathjaxknowl.js delete mode 100755 slides/_static/pretext/js/lib/mathjaxknowl3.js delete mode 100755 slides/_static/pretext/js/login.js delete mode 100755 slides/_static/pretext/js/lti_iframe_resizer.js delete mode 100755 slides/_static/pretext/js/pretext-stack/stackapicalls.js delete mode 100755 slides/_static/pretext/js/pretext-stack/stackjsvle.js delete mode 100755 slides/_static/pretext/js/pretext-webwork/2.16/pretext-webwork.js delete mode 100755 slides/_static/pretext/js/pretext-webwork/2.17/pretext-webwork.js delete mode 100755 slides/_static/pretext/js/pretext-webwork/2.18/pretext-webwork.js delete mode 100755 slides/_static/pretext/js/pretext-webwork/2.19/pretext-webwork.js delete mode 100755 slides/_static/pretext/js/pretext-webwork/2.20/pretext-webwork.js delete mode 100755 slides/_static/pretext/js/pretext.js delete mode 100755 slides/_static/pretext/js/pretext_add_on.js delete mode 100755 slides/_static/pretext/js/pretext_search.js delete mode 100755 slides/_static/pretext/js/ptx_search.js delete mode 100755 slides/_static/pretext/js/user_preferences.js delete mode 100755 slides/index.html delete mode 100755 tags.html delete mode 100755 theme/css/ptx-bg-dark.svg delete mode 100755 theme/css/ptx-bg-light.svg delete mode 100755 theme/css/style.css diff --git a/archives.html b/archives.html deleted file mode 100755 index 71044b6..0000000 --- a/archives.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - Introduction to Probability and Statistics for the Life Sciences - Archives - - - - - - - - -
- -

Introduction to Probability and Statistics for the Life Sciences

-

Spring 2026 MATH 1044

-
-

Archives for Introduction to Probability and Statistics for the Life Sciences

- -
-
-
- - - \ No newline at end of file diff --git a/authors.html b/authors.html deleted file mode 100755 index c8760dc..0000000 --- a/authors.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - Introduction to Probability and Statistics for the Life Sciences - Authors - - - - - - - - -
- -

Introduction to Probability and Statistics for the Life Sciences

-

Spring 2026 MATH 1044

-
-

Authors on Introduction to Probability and Statistics for the Life Sciences

- -
- - - \ No newline at end of file diff --git a/categories.html b/categories.html deleted file mode 100755 index bf7e5c2..0000000 --- a/categories.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - Introduction to Probability and Statistics for the Life Sciences - Categories - - - - - - - - -
- -

Introduction to Probability and Statistics for the Life Sciences

-

Spring 2026 MATH 1044

-
-

Categories on Introduction to Probability and Statistics for the Life Sciences

- -
- - - \ No newline at end of file diff --git a/course/.mapping.json b/course/.mapping.json index 5e210fc..cbdd823 100755 --- a/course/.mapping.json +++ b/course/.mapping.json @@ -1 +1 @@ -{"source/frontmatter.ptx": ["frontmatter"], "source/main.ptx": ["course-documents", "ch-notes", "recitations"], "source/syllabus/syllabus.ptx": ["syllabus"], "source/notes/week01.ptx": ["notes-week-01"], "source/recitations/calculus-review.ptx": ["recitation-calculus-review"]} \ No newline at end of file +{"source/main.ptx": ["frontmatter", "course-documents", "ch-notes", "quizzes", "recitations"], "source/syllabus/syllabus.ptx": ["syllabus"], "source/notes/1-13.ptx": ["notes-01-13"], "source/notes/1-15.ptx": ["notes-01-15"], "source/notes/1-20.ptx": ["notes-01-20"], "source/quizzes/quiz-01.ptx": ["quiz-01"], "source/recitations/calculus-review.ptx": ["recitation-calculus-review"]} \ No newline at end of file diff --git a/course/_static/._662.1bb5065279414751.js b/course/_static/._662.e77a89c65303c376.js similarity index 100% rename from course/_static/._662.1bb5065279414751.js rename to course/_static/._662.e77a89c65303c376.js diff --git a/course/_static/._662.1bb5065279414751.js.gz b/course/_static/._662.e77a89c65303c376.js.gz similarity index 100% rename from course/_static/._662.1bb5065279414751.js.gz rename to course/_static/._662.e77a89c65303c376.js.gz diff --git a/course/_static/._662.1bb5065279414751.js.map b/course/_static/._662.e77a89c65303c376.js.map similarity index 100% rename from course/_static/._662.1bb5065279414751.js.map rename to course/_static/._662.e77a89c65303c376.js.map diff --git a/course/_static/._662.1bb5065279414751.js.map.gz b/course/_static/._662.e77a89c65303c376.js.map.gz similarity index 100% rename from course/_static/._662.1bb5065279414751.js.map.gz rename to course/_static/._662.e77a89c65303c376.js.map.gz diff --git a/course/_static/._prefix-runestone.1c010553c35c544c.bundle.js b/course/_static/._prefix-runestone.6ec5960970d8b364.css similarity index 100% rename from course/_static/._prefix-runestone.1c010553c35c544c.bundle.js rename to course/_static/._prefix-runestone.6ec5960970d8b364.css diff --git a/course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt b/course/_static/._prefix-runestone.6ec5960970d8b364.css.gz similarity index 100% rename from course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt rename to course/_static/._prefix-runestone.6ec5960970d8b364.css.gz diff --git a/course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt.gz b/course/_static/._prefix-runestone.6ec5960970d8b364.css.map similarity index 100% rename from course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt.gz rename to course/_static/._prefix-runestone.6ec5960970d8b364.css.map diff --git a/course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.gz b/course/_static/._prefix-runestone.6ec5960970d8b364.css.map.gz similarity index 100% rename from course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.gz rename to course/_static/._prefix-runestone.6ec5960970d8b364.css.map.gz diff --git a/course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.map b/course/_static/._prefix-runestone.80892ed1280c2803.bundle.js similarity index 100% rename from course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.map rename to course/_static/._prefix-runestone.80892ed1280c2803.bundle.js diff --git a/course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.map.gz b/course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt similarity index 100% rename from course/_static/._prefix-runestone.1c010553c35c544c.bundle.js.map.gz rename to course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt diff --git a/course/_static/._prefix-runestone.677a75a9120449ff.css b/course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt.gz similarity index 100% rename from course/_static/._prefix-runestone.677a75a9120449ff.css rename to course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt.gz diff --git a/course/_static/._prefix-runestone.677a75a9120449ff.css.gz b/course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.gz similarity index 100% rename from course/_static/._prefix-runestone.677a75a9120449ff.css.gz rename to course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.gz diff --git a/course/_static/._prefix-runestone.677a75a9120449ff.css.map b/course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.map similarity index 100% rename from course/_static/._prefix-runestone.677a75a9120449ff.css.map rename to course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.map diff --git a/course/_static/._prefix-runestone.677a75a9120449ff.css.map.gz b/course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.map.gz similarity index 100% rename from course/_static/._prefix-runestone.677a75a9120449ff.css.map.gz rename to course/_static/._prefix-runestone.80892ed1280c2803.bundle.js.map.gz diff --git a/course/_static/._prefix-runtime.991c135ccf182bf5.bundle.js b/course/_static/._prefix-runtime.3dca4b99808f4053.bundle.js similarity index 100% rename from course/_static/._prefix-runtime.991c135ccf182bf5.bundle.js rename to course/_static/._prefix-runtime.3dca4b99808f4053.bundle.js diff --git a/course/_static/._prefix-runtime.991c135ccf182bf5.bundle.js.gz b/course/_static/._prefix-runtime.3dca4b99808f4053.bundle.js.gz similarity index 100% rename from course/_static/._prefix-runtime.991c135ccf182bf5.bundle.js.gz rename to course/_static/._prefix-runtime.3dca4b99808f4053.bundle.js.gz diff --git a/course/_static/._prefix-runtime.991c135ccf182bf5.bundle.js.map b/course/_static/._prefix-runtime.3dca4b99808f4053.bundle.js.map similarity index 100% rename from course/_static/._prefix-runtime.991c135ccf182bf5.bundle.js.map rename to course/_static/._prefix-runtime.3dca4b99808f4053.bundle.js.map diff --git a/course/_static/._prefix-runtime.991c135ccf182bf5.bundle.js.map.gz b/course/_static/._prefix-runtime.3dca4b99808f4053.bundle.js.map.gz similarity index 100% rename from course/_static/._prefix-runtime.991c135ccf182bf5.bundle.js.map.gz rename to course/_static/._prefix-runtime.3dca4b99808f4053.bundle.js.map.gz diff --git a/course/_static/662.1bb5065279414751.js b/course/_static/662.1bb5065279414751.js deleted file mode 100755 index 5fcf219..0000000 --- a/course/_static/662.1bb5065279414751.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[662],{10662:(e,t,i)=>{i.r(t),i.d(t,{default:()=>n});var s=i(98098),o=i(78673);class n extends o.A{constructor(e){super(e),this.origOpts=e,this.questions=$(e.orig).data("questionlist"),this.proficiency=$(e.orig).data("proficiency"),this.minDifficulty=$(e.orig).data("minDifficulty"),this.maxDifficulty=$(e.orig).data("maxDifficulty"),this.points=$(e.orig).data("points"),this.autogradable=$(e.orig).data("autogradable"),this.not_seen_ever=$(e.orig).data("not_seen_ever"),this.selector_id=$(e.orig).first().attr("id"),this.primaryOnly=$(e.orig).data("primary"),this.ABExperiment=$(e.orig).data("ab"),this.toggleOptions=$(e.orig).data("toggleoptions"),this.toggleLabels=$(e.orig).data("togglelabels"),this.limitBaseCourse=$(e.orig).data("limit-basecourse"),e.orig.id=this.selector_id}async initialize(){let e=this,t={selector_id:this.selector_id};this.questions?t.questions=this.questions:this.proficiency&&(t.proficiency=this.proficiency),this.minDifficulty&&(t.minDifficulty=this.minDifficulty),this.maxDifficulty&&(t.maxDifficulty=this.maxDifficulty),this.points&&(t.points=this.points),this.autogradable&&(t.autogradable=this.autogradable),this.not_seen_ever&&(t.not_seen_ever=this.not_seen_ever),this.primaryOnly&&(t.primary=this.primaryOnly),this.ABExperiment&&(t.AB=this.ABExperiment),this.timedWrapper&&(t.timedWrapper=this.timedWrapper),this.toggleOptions&&(t.toggleOptions=this.toggleOptions),this.toggleLabels&&(t.toggleLabels=this.toggleLabels),this.limitBaseCourse&&(t.limitBaseCourse=eBookConfig.basecourse);let i=this.origOpts,o=this.selector_id;console.log("getting question source");let n,a=new Request(`${eBookConfig.new_server_prefix}/assessment/get_question_source`,{method:"POST",headers:this.jsonHeaders,body:JSON.stringify(t)}),l=await fetch(a),r=await l.json();if(r=r.detail,r.indexOf("No preview")>=0)throw alert(`Error: Not able to find a question for ${o} based on the criteria`),new Error(`Unable to find a question for ${o}`);if(i.timed){n=(0,s.$y)(r,{timed:!0,selector_id:o,assessmentTaken:i.assessmentTaken});for(let t of i.rqa)if(t.question==e){t.question=n.question;break}e.realComponent=n.question,e.containerDiv=n.question.containerDiv,e.realComponent.selectorId=o}else{if(t.toggleOptions){var g=t.toggleLabels.replace("togglelabels:","").trim();if(g){g=g.split(",");for(var c=0;cToggle Question:
';var v=r.split('id="')[1];v=v.split('"')[0],r=m+r+"
"}if(await(0,s.JK)(r,o,{selector_id:o,is_toggle:this.toggleOptions,is_select:!0,useRunestoneServices:!0}),t.toggleOptions){$("#component-preview").hide();var y=document.getElementById(o+"-toggleQuestion");for(d=0;d")+10),f=i.slice(i.indexOf(""),i.length);i=m+d+f,await this.toggleSet(e,t,i,s),$("#component-preview").hide()}}void 0===window.component_factory&&(window.component_factory={}),window.component_factory.selectquestion=function(e){return new n(e)},$(document).on("runestone:login-complete",(async function(){let e=document.querySelectorAll("[data-component=selectquestion]");for(let t of e)try{if(0==$(t).closest("[data-component=timedAssessment]").length){let e=new n({orig:t});await e.initialize()}}catch(e){console.log(`Error rendering New Exercise ${t.id}\n Details: ${e}`),console.log(e.stack)}}))}}]); -//# sourceMappingURL=662.1bb5065279414751.js.map \ No newline at end of file diff --git a/course/_static/662.1bb5065279414751.js.gz b/course/_static/662.1bb5065279414751.js.gz deleted file mode 100755 index fb68451ebe8362c342750713b00f376535b201f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2781 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 diff --git a/course/_static/662.1bb5065279414751.js.map b/course/_static/662.1bb5065279414751.js.map deleted file mode 100755 index 66fd5e9..0000000 --- a/course/_static/662.1bb5065279414751.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"662.1bb5065279414751.js","mappings":"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","sources":["webpack://WebComponents/./runestone/selectquestion/js/selectone.js"],"sourcesContent":["/**\n * *******************************\n * |docname| - SelectOne Component\n * *******************************\n */\nimport {\n renderRunestoneComponent,\n createTimedComponent,\n} from \"../../common/js/renderComponent.js\";\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\nimport \"../css/selectquestion.css\";\n\nexport default class SelectOne extends RunestoneBase {\n /**\n * constructor --\n * Making an instance of a selectone is a bit more complicated because it is\n * a kind of meta directive. That is, go to the server and randomly select\n * a question to display in this spot. Or, if a student has already seen this question\n * in the context of an exam retrieve the question they saw in the first place.\n * Making an API call and waiting for the response is handled asynchronously.\n * But lots of code is not written with that assumption. So we do the initialization in\n * two parts.\n * 1. Create the object with the usual constructor\n * 2. call initialize, which returns a promise. When that promise is resolved\n * the \"replacement\" component will replace the original selectone component in the DOM.\n *\n * @param {} opts\n */\n constructor(opts) {\n super(opts);\n this.origOpts = opts;\n this.questions = $(opts.orig).data(\"questionlist\");\n this.proficiency = $(opts.orig).data(\"proficiency\");\n this.minDifficulty = $(opts.orig).data(\"minDifficulty\");\n this.maxDifficulty = $(opts.orig).data(\"maxDifficulty\");\n this.points = $(opts.orig).data(\"points\");\n this.autogradable = $(opts.orig).data(\"autogradable\");\n this.not_seen_ever = $(opts.orig).data(\"not_seen_ever\");\n this.selector_id = $(opts.orig).first().attr(\"id\");\n this.primaryOnly = $(opts.orig).data(\"primary\");\n this.ABExperiment = $(opts.orig).data(\"ab\");\n this.toggleOptions = $(opts.orig).data(\"toggleoptions\");\n this.toggleLabels = $(opts.orig).data(\"togglelabels\");\n this.limitBaseCourse = $(opts.orig).data(\"limit-basecourse\");\n opts.orig.id = this.selector_id;\n }\n /**\n * initialize --\n * initialize is used so that the constructor does not have to be async.\n * Constructors should definitely not return promises that would seriously\n * mess things up.\n * @return {Promise} Will resolve after component from DB is reified\n */\n async initialize() {\n let self = this;\n let data = { selector_id: this.selector_id };\n if (this.questions) {\n data.questions = this.questions;\n } else if (this.proficiency) {\n data.proficiency = this.proficiency;\n }\n if (this.minDifficulty) {\n data.minDifficulty = this.minDifficulty;\n }\n if (this.maxDifficulty) {\n data.maxDifficulty = this.maxDifficulty;\n }\n if (this.points) {\n data.points = this.points;\n }\n if (this.autogradable) {\n data.autogradable = this.autogradable;\n }\n if (this.not_seen_ever) {\n data.not_seen_ever = this.not_seen_ever;\n }\n if (this.primaryOnly) {\n data.primary = this.primaryOnly;\n }\n if (this.ABExperiment) {\n data.AB = this.ABExperiment;\n }\n if (this.timedWrapper) {\n data.timedWrapper = this.timedWrapper;\n }\n if (this.toggleOptions) {\n data.toggleOptions = this.toggleOptions;\n }\n if (this.toggleLabels) {\n data.toggleLabels = this.toggleLabels;\n }\n if (this.limitBaseCourse) {\n data.limitBaseCourse = eBookConfig.basecourse;\n }\n let opts = this.origOpts;\n let selectorId = this.selector_id;\n console.log(\"getting question source\");\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/get_question_source`,\n {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(data),\n }\n );\n let response = await fetch(request);\n let htmlsrc = await response.json();\n htmlsrc = htmlsrc.detail;\n if (htmlsrc.indexOf(\"No preview\") >= 0) {\n alert(\n `Error: Not able to find a question for ${selectorId} based on the criteria`\n );\n throw new Error(`Unable to find a question for ${selectorId}`);\n }\n let res;\n if (opts.timed) {\n // timed components are not rendered immediately, only when the student\n // starts the assessment and visits this particular entry.\n res = createTimedComponent(htmlsrc, {\n timed: true,\n selector_id: selectorId,\n assessmentTaken: opts.assessmentTaken,\n });\n // replace the entry in the timed assessment's list of components\n // with the component created by createTimedComponent\n for (let component of opts.rqa) {\n if (component.question == self) {\n component.question = res.question;\n break;\n }\n }\n self.realComponent = res.question;\n self.containerDiv = res.question.containerDiv;\n self.realComponent.selectorId = selectorId;\n } else {\n if (data.toggleOptions) {\n var toggleLabels = data.toggleLabels\n .replace(\"togglelabels:\", \"\")\n .trim();\n if (toggleLabels) {\n toggleLabels = toggleLabels.split(\",\");\n for (var t = 0; t < toggleLabels.length; t++) {\n toggleLabels[t] = toggleLabels[t].trim();\n }\n }\n var toggleQuestions = this.questions.split(\", \");\n var toggleUI = \"\";\n // check so that only the first toggle select question on the assignments page has a preview panel created, then all toggle select previews use this same panel\n if (!document.getElementById(\"component-preview\")) {\n toggleUI +=\n '
' +\n '
' +\n '
' +\n \"
\";\n }\n // dropdown menu containing the question options\n toggleUI +=\n '
';\n var toggleFirstID = htmlsrc.split('id=\"')[1];\n toggleFirstID = toggleFirstID.split('\"')[0];\n htmlsrc = toggleUI + htmlsrc + \"
\";\n }\n // just render this component on the page in its usual place\n await renderRunestoneComponent(htmlsrc, selectorId, {\n selector_id: selectorId,\n is_toggle: this.toggleOptions,\n is_select: true,\n useRunestoneServices: true,\n });\n if (data.toggleOptions) {\n $(\"#component-preview\").hide();\n var toggleQuestionSelect = document.getElementById(\n selectorId + \"-toggleQuestion\"\n );\n for (i = 0; i < toggleQuestionSelect.options.length; i++) {\n if (\n toggleQuestionSelect.options[i].value == toggleFirstID\n ) {\n toggleQuestionSelect.value = toggleFirstID;\n $(\"#\" + selectorId).data(\n \"toggle_current\",\n toggleFirstID\n );\n $(\"#\" + selectorId).data(\n \"toggle_current_type\",\n toggleQuestionTypes[0]\n );\n break;\n }\n }\n toggleQuestionSelect.addEventListener(\n \"change\",\n async function () {\n await this.togglePreview(\n toggleQuestionSelect.parentElement.id,\n data.toggleOptions,\n toggleQuestionTypes\n );\n this.logBookEvent({\n event: \"view_toggle\",\n act: toggleQuestionSelect.value,\n div_id: toggleQuestionSelect.parentElement.id,\n });\n }.bind(this)\n );\n }\n }\n return response;\n }\n\n // retrieve html source of a question, for use in various toggle functionalities\n async getToggleSrc(toggleQuestionID) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/htmlsrc?acid=${toggleQuestionID}`,\n {\n method: \"GET\",\n }\n );\n let response = await fetch(request);\n let data = await response.json();\n let htmlsrc = data.detail;\n return htmlsrc;\n }\n\n // on changing the value of toggle select dropdown, render selected question in preview panel, add appropriate buttons, then make preview panel visible\n async togglePreview(parentID, toggleOptions, toggleQuestionTypes) {\n $(\"#toggle-buttons\").html(\"\");\n var parentDiv = document.getElementById(parentID);\n var toggleQuestionSelect = parentDiv.getElementsByTagName(\"select\")[0];\n var selectedQuestion =\n toggleQuestionSelect.options[toggleQuestionSelect.selectedIndex]\n .value;\n var htmlsrc = await this.getToggleSrc(selectedQuestion);\n renderRunestoneComponent(htmlsrc, \"toggle-preview\", {\n selector_id: \"toggle-preview\",\n is_toggle: this.toggleOptions,\n is_select: true,\n useRunestoneServices: true,\n });\n\n // add \"Close Preview\" button to the preview panel\n let closeButton = document.createElement(\"button\");\n $(closeButton).text(\"Close Preview\");\n $(closeButton).addClass(\"btn btn-default\");\n closeButton.addEventListener(\"click\",\n function () {\n $(\"#toggle-preview\").html(\"\");\n toggleQuestionSelect.value = $(\"#\" + parentID).data(\n \"toggle_current\"\n );\n $(\"#component-preview\").hide();\n this.logBookEvent({\n event: \"close_toggle\",\n act: toggleQuestionSelect.value,\n div_id: toggleQuestionSelect.parentElement.id\n });\n }.bind(this)\n );\n $(\"#toggle-buttons\").append(closeButton);\n\n // if \"lock\" is not in toggle options, then allow adding more buttons to the preview panel\n if (!toggleOptions.includes(\"lock\")) {\n let setButton = document.createElement(\"button\");\n $(setButton).text(\"Select this Problem\");\n $(setButton).addClass(\"btn btn-primary\");\n $(setButton).click(\n async function () {\n await this.toggleSet(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n );\n $(\"#component-preview\").hide();\n this.logBookEvent({\n event: \"select_toggle\",\n act: selectedQuestion,\n div_id: parentID,\n });\n }.bind(this)\n );\n $(\"#toggle-buttons\").append(setButton);\n\n // if \"transfer\" in toggle options, and if current question type is Parsons and selected question type is active code, then add \"Transfer\" button to preview panel\n if (toggleOptions.includes(\"transfer\")) {\n var currentType = $(\"#\" + parentID).data(\"toggle_current_type\");\n var selectedType =\n toggleQuestionTypes[toggleQuestionSelect.selectedIndex];\n if (\n currentType == \"Parsons Mixed-Up Code\" &&\n selectedType == \"Active Write Code\"\n ) {\n let transferButton = document.createElement(\"button\");\n $(transferButton).text(\"Transfer Response\");\n $(transferButton).addClass(\"btn btn-primary\");\n $(transferButton).click(\n async function () {\n await this.toggleTransfer(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n );\n }.bind(this)\n );\n $(\"#toggle-buttons\").append(transferButton);\n }\n }\n }\n\n $(\"#component-preview\").show();\n }\n\n // on clicking \"Select this Problem\" button, close preview panel, replace current question in assignments page with selected question, and send request to update grading database\n // _ `toggleSet`\n async toggleSet(parentID, selectedQuestion, htmlsrc, toggleQuestionTypes) {\n var selectorId = parentID + \"-toggleSelectedQuestion\";\n var toggleQuestionSelect = document\n .getElementById(parentID)\n .getElementsByTagName(\"select\")[0];\n document.getElementById(selectorId).innerHTML = \"\"; // need to check whether this is even necessary\n await renderRunestoneComponent(htmlsrc, selectorId, {\n selector_id: selectorId,\n is_toggle: this.toggleOptions,\n is_select: true,\n useRunestoneServices: true,\n });\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/set_selected_question?metaid=${parentID}&selected=${selectedQuestion}`,\n {}\n );\n await fetch(request);\n $(\"#toggle-preview\").html(\"\");\n $(\"#\" + parentID).data(\"toggle_current\", selectedQuestion);\n $(\"#\" + parentID).data(\n \"toggle_current_type\",\n toggleQuestionTypes[toggleQuestionSelect.selectedIndex]\n );\n }\n\n // on clicking \"Transfer\" button, extract the current text and indentation of the Parsons blocks in the answer space, then paste that into the selected active code question\n async toggleTransfer(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n ) {\n // retrieve all Parsons lines within the answer space and loop through this list\n var currentParsons = document\n .getElementById(parentID + \"-toggleSelectedQuestion\")\n .querySelectorAll(\"div[class^='answer']\")[0]\n .getElementsByClassName(\"prettyprint lang-py\");\n var currentParsonsClass;\n var currentBlockIndent;\n var indentCount;\n var indent;\n var parsonsLine;\n var parsonsLines = ``;\n var count;\n for (var p = 0; p < currentParsons.length; p++) {\n indentCount = 0;\n indent = \"\";\n // for Parsons blocks that have built-in indentation in their lines\n currentParsonsClass = currentParsons[p].classList[2];\n if (currentParsonsClass) {\n if (currentParsonsClass.includes(\"indent\")) {\n indentCount =\n parseInt(indentCount) +\n parseInt(\n currentParsonsClass.slice(\n 6,\n currentParsonsClass.length\n )\n );\n }\n }\n // for Parsons answer spaces with vertical lines that allow student to define their own line indentation\n currentBlockIndent =\n currentParsons[p].parentElement.parentElement.style.left;\n if (currentBlockIndent) {\n indentCount =\n parseInt(indentCount) +\n parseInt(\n currentBlockIndent.slice(\n 0,\n currentBlockIndent.indexOf(\"px\")\n ) / 30\n );\n }\n for (var d = 0; d < indentCount; d++) {\n indent += \" \";\n }\n // retrieve each text snippet of each Parsons line and loop through this list\n parsonsLine = currentParsons[p].getElementsByTagName(\"span\");\n count = 0;\n for (var l = 0; l < parsonsLine.length; l++) {\n if (parsonsLine[l].childNodes[0].nodeName == \"#text\") {\n // Parsons blocks have differing amounts of hierarchy levels (spans within spans)\n if (p == 0 && count == 0) {\n // need different check than l == 0 because the l numbering doesn't align with location within line due to inconsistent span heirarchy\n parsonsLines += indent + parsonsLine[l].innerHTML;\n count++;\n } else if (count != 0) {\n parsonsLines += parsonsLine[l].innerHTML;\n count++;\n } else {\n parsonsLines =\n parsonsLines +\n `\n ` +\n indent +\n parsonsLine[l].innerHTML;\n parsonsLines = parsonsLines.replace(\n \" \",\n \"\"\n );\n count++;\n }\n }\n }\n }\n // replace all existing code within selected active code question with extracted Parsons text\n var htmlsrcFormer = htmlsrc.slice(\n 0,\n htmlsrc.indexOf(\"\") +\n 10\n );\n var htmlsrcLatter = htmlsrc.slice(\n htmlsrc.indexOf(\"\"),\n htmlsrc.length\n );\n htmlsrc = htmlsrcFormer + parsonsLines + htmlsrcLatter;\n\n await this.toggleSet(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n );\n $(\"#component-preview\").hide();\n }\n}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\n\nwindow.component_factory.selectquestion = function (opts) {\n return new SelectOne(opts);\n};\n\n/*\n * When the page is loaded and the login checks are complete find and render\n * each selectquestion component that is not part of a timedAssessment.\n **/\n$(document).on(\"runestone:login-complete\", async function () {\n let selQuestions = document.querySelectorAll(\n \"[data-component=selectquestion]\"\n );\n for (let cq of selQuestions) {\n try {\n if ($(cq).closest(\"[data-component=timedAssessment]\").length == 0) {\n // If this element exists within a timed component, don't render it here\n let tmp = new SelectOne({ orig: cq });\n await tmp.initialize();\n }\n } catch (err) {\n console.log(`Error rendering New Exercise ${cq.id}\n Details: ${err}`);\n console.log(err.stack);\n }\n }\n});\n"],"names":["SelectOne","constructor","opts","super","this","origOpts","questions","$","orig","data","proficiency","minDifficulty","maxDifficulty","points","autogradable","not_seen_ever","selector_id","first","attr","primaryOnly","ABExperiment","toggleOptions","toggleLabels","limitBaseCourse","id","initialize","self","primary","AB","timedWrapper","eBookConfig","basecourse","selectorId","console","log","res","request","Request","new_server_prefix","method","headers","jsonHeaders","body","JSON","stringify","response","fetch","htmlsrc","json","detail","indexOf","alert","Error","timed","assessmentTaken","component","rqa","question","realComponent","containerDiv","replace","trim","split","t","length","i","toggleQuestionSubstring","toggleQuestionType","toggleQuestions","toggleUI","document","getElementById","toggleQuestionTypes","getToggleSrc","slice","includes","toggleFirstID","is_toggle","is_select","useRunestoneServices","hide","toggleQuestionSelect","options","value","addEventListener","async","togglePreview","parentElement","logBookEvent","event","act","div_id","bind","toggleQuestionID","parentID","html","getElementsByTagName","selectedQuestion","selectedIndex","closeButton","createElement","text","addClass","append","setButton","click","toggleSet","currentType","selectedType","transferButton","toggleTransfer","show","innerHTML","currentParsonsClass","currentBlockIndent","indentCount","indent","parsonsLine","count","currentParsons","querySelectorAll","getElementsByClassName","parsonsLines","p","classList","parseInt","style","left","d","l","childNodes","nodeName","htmlsrcFormer","htmlsrcLatter","window","component_factory","selectquestion","on","selQuestions","cq","closest","tmp","err","stack"],"sourceRoot":""} \ No newline at end of file diff --git a/course/_static/662.1bb5065279414751.js.map.gz b/course/_static/662.1bb5065279414751.js.map.gz deleted file mode 100755 index 34a9b9d3f390a70eee727855c440c4ccf448531a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8687 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.r(t),i.d(t,{default:()=>n});var s=i(98098),o=i(78673);class n extends o.A{constructor(e){super(e),this.origOpts=e,this.questions=$(e.orig).data("questionlist"),this.proficiency=$(e.orig).data("proficiency"),this.minDifficulty=$(e.orig).data("minDifficulty"),this.maxDifficulty=$(e.orig).data("maxDifficulty"),this.points=$(e.orig).data("points"),this.autogradable=$(e.orig).data("autogradable"),this.not_seen_ever=$(e.orig).data("not_seen_ever"),this.selector_id=$(e.orig).first().attr("id"),this.primaryOnly=$(e.orig).data("primary"),this.ABExperiment=$(e.orig).data("ab"),this.toggleOptions=$(e.orig).data("toggleoptions"),this.toggleLabels=$(e.orig).data("togglelabels"),this.limitBaseCourse=$(e.orig).data("limit-basecourse"),e.orig.id=this.selector_id}async initialize(){let e=this,t={selector_id:this.selector_id};this.questions?t.questions=this.questions:this.proficiency&&(t.proficiency=this.proficiency),this.minDifficulty&&(t.minDifficulty=this.minDifficulty),this.maxDifficulty&&(t.maxDifficulty=this.maxDifficulty),this.points&&(t.points=this.points),this.autogradable&&(t.autogradable=this.autogradable),this.not_seen_ever&&(t.not_seen_ever=this.not_seen_ever),this.primaryOnly&&(t.primary=this.primaryOnly),this.ABExperiment&&(t.AB=this.ABExperiment),this.timedWrapper&&(t.timedWrapper=this.timedWrapper),this.toggleOptions&&(t.toggleOptions=this.toggleOptions),this.toggleLabels&&(t.toggleLabels=this.toggleLabels),this.limitBaseCourse&&(t.limitBaseCourse=eBookConfig.basecourse);let i=this.origOpts,o=this.selector_id;console.log("getting question source");let n,a=new Request(`${eBookConfig.new_server_prefix}/assessment/get_question_source`,{method:"POST",headers:this.jsonHeaders,body:JSON.stringify(t)}),l=await fetch(a),r=await l.json();if(r=r.detail,r.indexOf("No preview")>=0)throw alert(`Error: Not able to find a question for ${o} based on the criteria`),new Error(`Unable to find a question for ${o}`);if(i.timed){n=(0,s.$y)(r,{timed:!0,selector_id:o,assessmentTaken:i.assessmentTaken});for(let t of i.rqa)if(t.question==e){t.question=n.question;break}e.realComponent=n.question,e.containerDiv=n.question.containerDiv,e.realComponent.selectorId=o}else{if(t.toggleOptions){var g=t.toggleLabels;if(g){g=(g=g.replace("togglelabels:","").trim()).split(",");for(var c=0;cToggle Question:
';var v=r.split('id="')[1];v=v.split('"')[0],r=m+r+"
"}if(await(0,s.JK)(r,o,{selector_id:o,is_toggle:this.toggleOptions,is_select:!0,useRunestoneServices:!0}),t.toggleOptions){$("#component-preview").hide();var y=document.getElementById(o+"-toggleQuestion");for(d=0;d")+10),f=i.slice(i.indexOf(""),i.length);i=m+d+f,await this.toggleSet(e,t,i,s),$("#component-preview").hide()}}void 0===window.component_factory&&(window.component_factory={}),window.component_factory.selectquestion=function(e){return new n(e)},$(document).on("runestone:login-complete",(async function(){let e=document.querySelectorAll("[data-component=selectquestion]");for(let t of e)try{if(0==$(t).closest("[data-component=timedAssessment]").length){let e=new n({orig:t});await e.initialize()}}catch(e){console.log(`Error rendering New Exercise ${t.id}\n Details: ${e}`),console.log(e.stack)}}))}}]); +//# sourceMappingURL=662.e77a89c65303c376.js.map \ No newline at end of file diff --git a/course/_static/662.e77a89c65303c376.js.gz b/course/_static/662.e77a89c65303c376.js.gz new file mode 100755 index 0000000000000000000000000000000000000000..eafa2bf918b9e4e18f40bd91887617cb45ef6151 GIT binary patch literal 2781 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 literal 0 HcmV?d00001 diff --git a/course/_static/662.e77a89c65303c376.js.map b/course/_static/662.e77a89c65303c376.js.map new file mode 100755 index 0000000..5c037bc --- /dev/null +++ b/course/_static/662.e77a89c65303c376.js.map @@ -0,0 +1 @@ +{"version":3,"file":"662.e77a89c65303c376.js","mappings":"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","sources":["webpack://WebComponents/./runestone/selectquestion/js/selectone.js"],"sourcesContent":["/**\n * *******************************\n * |docname| - SelectOne Component\n * *******************************\n */\nimport {\n renderRunestoneComponent,\n createTimedComponent,\n} from \"../../common/js/renderComponent.js\";\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\nimport \"../css/selectquestion.css\";\n\nexport default class SelectOne extends RunestoneBase {\n /**\n * constructor --\n * Making an instance of a selectone is a bit more complicated because it is\n * a kind of meta directive. That is, go to the server and randomly select\n * a question to display in this spot. Or, if a student has already seen this question\n * in the context of an exam retrieve the question they saw in the first place.\n * Making an API call and waiting for the response is handled asynchronously.\n * But lots of code is not written with that assumption. So we do the initialization in\n * two parts.\n * 1. Create the object with the usual constructor\n * 2. call initialize, which returns a promise. When that promise is resolved\n * the \"replacement\" component will replace the original selectone component in the DOM.\n *\n * @param {} opts\n */\n constructor(opts) {\n super(opts);\n this.origOpts = opts;\n this.questions = $(opts.orig).data(\"questionlist\");\n this.proficiency = $(opts.orig).data(\"proficiency\");\n this.minDifficulty = $(opts.orig).data(\"minDifficulty\");\n this.maxDifficulty = $(opts.orig).data(\"maxDifficulty\");\n this.points = $(opts.orig).data(\"points\");\n this.autogradable = $(opts.orig).data(\"autogradable\");\n this.not_seen_ever = $(opts.orig).data(\"not_seen_ever\");\n this.selector_id = $(opts.orig).first().attr(\"id\");\n this.primaryOnly = $(opts.orig).data(\"primary\");\n this.ABExperiment = $(opts.orig).data(\"ab\");\n this.toggleOptions = $(opts.orig).data(\"toggleoptions\");\n this.toggleLabels = $(opts.orig).data(\"togglelabels\");\n this.limitBaseCourse = $(opts.orig).data(\"limit-basecourse\");\n opts.orig.id = this.selector_id;\n }\n /**\n * initialize --\n * initialize is used so that the constructor does not have to be async.\n * Constructors should definitely not return promises that would seriously\n * mess things up.\n * @return {Promise} Will resolve after component from DB is reified\n */\n async initialize() {\n let self = this;\n let data = { selector_id: this.selector_id };\n if (this.questions) {\n data.questions = this.questions;\n } else if (this.proficiency) {\n data.proficiency = this.proficiency;\n }\n if (this.minDifficulty) {\n data.minDifficulty = this.minDifficulty;\n }\n if (this.maxDifficulty) {\n data.maxDifficulty = this.maxDifficulty;\n }\n if (this.points) {\n data.points = this.points;\n }\n if (this.autogradable) {\n data.autogradable = this.autogradable;\n }\n if (this.not_seen_ever) {\n data.not_seen_ever = this.not_seen_ever;\n }\n if (this.primaryOnly) {\n data.primary = this.primaryOnly;\n }\n if (this.ABExperiment) {\n data.AB = this.ABExperiment;\n }\n if (this.timedWrapper) {\n data.timedWrapper = this.timedWrapper;\n }\n if (this.toggleOptions) {\n data.toggleOptions = this.toggleOptions;\n }\n if (this.toggleLabels) {\n data.toggleLabels = this.toggleLabels;\n }\n if (this.limitBaseCourse) {\n data.limitBaseCourse = eBookConfig.basecourse;\n }\n let opts = this.origOpts;\n let selectorId = this.selector_id;\n console.log(\"getting question source\");\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/get_question_source`,\n {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(data),\n }\n );\n let response = await fetch(request);\n let htmlsrc = await response.json();\n htmlsrc = htmlsrc.detail;\n if (htmlsrc.indexOf(\"No preview\") >= 0) {\n alert(\n `Error: Not able to find a question for ${selectorId} based on the criteria`\n );\n throw new Error(`Unable to find a question for ${selectorId}`);\n }\n let res;\n if (opts.timed) {\n // timed components are not rendered immediately, only when the student\n // starts the assessment and visits this particular entry.\n res = createTimedComponent(htmlsrc, {\n timed: true,\n selector_id: selectorId,\n assessmentTaken: opts.assessmentTaken,\n });\n // replace the entry in the timed assessment's list of components\n // with the component created by createTimedComponent\n for (let component of opts.rqa) {\n if (component.question == self) {\n component.question = res.question;\n break;\n }\n }\n self.realComponent = res.question;\n self.containerDiv = res.question.containerDiv;\n self.realComponent.selectorId = selectorId;\n } else {\n if (data.toggleOptions) {\n var toggleLabels = data.toggleLabels;\n if (toggleLabels) {\n toggleLabels = toggleLabels.replace(\"togglelabels:\", \"\").trim();\n toggleLabels = toggleLabels.split(\",\");\n for (var t = 0; t < toggleLabels.length; t++) {\n toggleLabels[t] = toggleLabels[t].trim();\n }\n }\n var toggleQuestions = this.questions.split(\", \");\n var toggleUI = \"\";\n // check so that only the first toggle select question on the assignments page has a preview panel created, then all toggle select previews use this same panel\n if (!document.getElementById(\"component-preview\")) {\n toggleUI +=\n '
' +\n '
' +\n '
' +\n \"
\";\n }\n // dropdown menu containing the question options\n toggleUI +=\n '
';\n var toggleFirstID = htmlsrc.split('id=\"')[1];\n toggleFirstID = toggleFirstID.split('\"')[0];\n htmlsrc = toggleUI + htmlsrc + \"
\";\n }\n // just render this component on the page in its usual place\n await renderRunestoneComponent(htmlsrc, selectorId, {\n selector_id: selectorId,\n is_toggle: this.toggleOptions,\n is_select: true,\n useRunestoneServices: true,\n });\n if (data.toggleOptions) {\n $(\"#component-preview\").hide();\n var toggleQuestionSelect = document.getElementById(\n selectorId + \"-toggleQuestion\"\n );\n for (i = 0; i < toggleQuestionSelect.options.length; i++) {\n if (\n toggleQuestionSelect.options[i].value == toggleFirstID\n ) {\n toggleQuestionSelect.value = toggleFirstID;\n $(\"#\" + selectorId).data(\n \"toggle_current\",\n toggleFirstID\n );\n $(\"#\" + selectorId).data(\n \"toggle_current_type\",\n toggleQuestionTypes[0]\n );\n break;\n }\n }\n toggleQuestionSelect.addEventListener(\n \"change\",\n async function () {\n await this.togglePreview(\n toggleQuestionSelect.parentElement.id,\n data.toggleOptions,\n toggleQuestionTypes\n );\n this.logBookEvent({\n event: \"view_toggle\",\n act: toggleQuestionSelect.value,\n div_id: toggleQuestionSelect.parentElement.id,\n });\n }.bind(this)\n );\n }\n }\n return response;\n }\n\n // retrieve html source of a question, for use in various toggle functionalities\n async getToggleSrc(toggleQuestionID) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/htmlsrc?acid=${toggleQuestionID}`,\n {\n method: \"GET\",\n }\n );\n let response = await fetch(request);\n let data = await response.json();\n let htmlsrc = data.detail;\n return htmlsrc;\n }\n\n // on changing the value of toggle select dropdown, render selected question in preview panel, add appropriate buttons, then make preview panel visible\n async togglePreview(parentID, toggleOptions, toggleQuestionTypes) {\n $(\"#toggle-buttons\").html(\"\");\n var parentDiv = document.getElementById(parentID);\n var toggleQuestionSelect = parentDiv.getElementsByTagName(\"select\")[0];\n var selectedQuestion =\n toggleQuestionSelect.options[toggleQuestionSelect.selectedIndex]\n .value;\n var htmlsrc = await this.getToggleSrc(selectedQuestion);\n renderRunestoneComponent(htmlsrc, \"toggle-preview\", {\n selector_id: \"toggle-preview\",\n is_toggle: this.toggleOptions,\n is_select: true,\n useRunestoneServices: true,\n });\n\n // add \"Close Preview\" button to the preview panel\n let closeButton = document.createElement(\"button\");\n $(closeButton).text(\"Close Preview\");\n $(closeButton).addClass(\"btn btn-default\");\n closeButton.addEventListener(\"click\",\n function () {\n $(\"#toggle-preview\").html(\"\");\n toggleQuestionSelect.value = $(\"#\" + parentID).data(\n \"toggle_current\"\n );\n $(\"#component-preview\").hide();\n this.logBookEvent({\n event: \"close_toggle\",\n act: toggleQuestionSelect.value,\n div_id: toggleQuestionSelect.parentElement.id\n });\n }.bind(this)\n );\n $(\"#toggle-buttons\").append(closeButton);\n\n // if \"lock\" is not in toggle options, then allow adding more buttons to the preview panel\n if (!toggleOptions.includes(\"lock\")) {\n let setButton = document.createElement(\"button\");\n $(setButton).text(\"Select this Problem\");\n $(setButton).addClass(\"btn btn-primary\");\n $(setButton).click(\n async function () {\n await this.toggleSet(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n );\n $(\"#component-preview\").hide();\n this.logBookEvent({\n event: \"select_toggle\",\n act: selectedQuestion,\n div_id: parentID,\n });\n }.bind(this)\n );\n $(\"#toggle-buttons\").append(setButton);\n\n // if \"transfer\" in toggle options, and if current question type is Parsons and selected question type is active code, then add \"Transfer\" button to preview panel\n if (toggleOptions.includes(\"transfer\")) {\n var currentType = $(\"#\" + parentID).data(\"toggle_current_type\");\n var selectedType =\n toggleQuestionTypes[toggleQuestionSelect.selectedIndex];\n if (\n currentType == \"Parsons Mixed-Up Code\" &&\n selectedType == \"Active Write Code\"\n ) {\n let transferButton = document.createElement(\"button\");\n $(transferButton).text(\"Transfer Response\");\n $(transferButton).addClass(\"btn btn-primary\");\n $(transferButton).click(\n async function () {\n await this.toggleTransfer(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n );\n }.bind(this)\n );\n $(\"#toggle-buttons\").append(transferButton);\n }\n }\n }\n\n $(\"#component-preview\").show();\n }\n\n // on clicking \"Select this Problem\" button, close preview panel, replace current question in assignments page with selected question, and send request to update grading database\n // _ `toggleSet`\n async toggleSet(parentID, selectedQuestion, htmlsrc, toggleQuestionTypes) {\n var selectorId = parentID + \"-toggleSelectedQuestion\";\n var toggleQuestionSelect = document\n .getElementById(parentID)\n .getElementsByTagName(\"select\")[0];\n document.getElementById(selectorId).innerHTML = \"\"; // need to check whether this is even necessary\n await renderRunestoneComponent(htmlsrc, selectorId, {\n selector_id: selectorId,\n is_toggle: this.toggleOptions,\n is_select: true,\n useRunestoneServices: true,\n });\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/set_selected_question?metaid=${parentID}&selected=${selectedQuestion}`,\n {}\n );\n await fetch(request);\n $(\"#toggle-preview\").html(\"\");\n $(\"#\" + parentID).data(\"toggle_current\", selectedQuestion);\n $(\"#\" + parentID).data(\n \"toggle_current_type\",\n toggleQuestionTypes[toggleQuestionSelect.selectedIndex]\n );\n }\n\n // on clicking \"Transfer\" button, extract the current text and indentation of the Parsons blocks in the answer space, then paste that into the selected active code question\n async toggleTransfer(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n ) {\n // retrieve all Parsons lines within the answer space and loop through this list\n var currentParsons = document\n .getElementById(parentID + \"-toggleSelectedQuestion\")\n .querySelectorAll(\"div[class^='answer']\")[0]\n .getElementsByClassName(\"prettyprint lang-py\");\n var currentParsonsClass;\n var currentBlockIndent;\n var indentCount;\n var indent;\n var parsonsLine;\n var parsonsLines = ``;\n var count;\n for (var p = 0; p < currentParsons.length; p++) {\n indentCount = 0;\n indent = \"\";\n // for Parsons blocks that have built-in indentation in their lines\n currentParsonsClass = currentParsons[p].classList[2];\n if (currentParsonsClass) {\n if (currentParsonsClass.includes(\"indent\")) {\n indentCount =\n parseInt(indentCount) +\n parseInt(\n currentParsonsClass.slice(\n 6,\n currentParsonsClass.length\n )\n );\n }\n }\n // for Parsons answer spaces with vertical lines that allow student to define their own line indentation\n currentBlockIndent =\n currentParsons[p].parentElement.parentElement.style.left;\n if (currentBlockIndent) {\n indentCount =\n parseInt(indentCount) +\n parseInt(\n currentBlockIndent.slice(\n 0,\n currentBlockIndent.indexOf(\"px\")\n ) / 30\n );\n }\n for (var d = 0; d < indentCount; d++) {\n indent += \" \";\n }\n // retrieve each text snippet of each Parsons line and loop through this list\n parsonsLine = currentParsons[p].getElementsByTagName(\"span\");\n count = 0;\n for (var l = 0; l < parsonsLine.length; l++) {\n if (parsonsLine[l].childNodes[0].nodeName == \"#text\") {\n // Parsons blocks have differing amounts of hierarchy levels (spans within spans)\n if (p == 0 && count == 0) {\n // need different check than l == 0 because the l numbering doesn't align with location within line due to inconsistent span heirarchy\n parsonsLines += indent + parsonsLine[l].innerHTML;\n count++;\n } else if (count != 0) {\n parsonsLines += parsonsLine[l].innerHTML;\n count++;\n } else {\n parsonsLines =\n parsonsLines +\n `\n ` +\n indent +\n parsonsLine[l].innerHTML;\n parsonsLines = parsonsLines.replace(\n \" \",\n \"\"\n );\n count++;\n }\n }\n }\n }\n // replace all existing code within selected active code question with extracted Parsons text\n var htmlsrcFormer = htmlsrc.slice(\n 0,\n htmlsrc.indexOf(\"\") +\n 10\n );\n var htmlsrcLatter = htmlsrc.slice(\n htmlsrc.indexOf(\"\"),\n htmlsrc.length\n );\n htmlsrc = htmlsrcFormer + parsonsLines + htmlsrcLatter;\n\n await this.toggleSet(\n parentID,\n selectedQuestion,\n htmlsrc,\n toggleQuestionTypes\n );\n $(\"#component-preview\").hide();\n }\n}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\n\nwindow.component_factory.selectquestion = function (opts) {\n return new SelectOne(opts);\n};\n\n/*\n * When the page is loaded and the login checks are complete find and render\n * each selectquestion component that is not part of a timedAssessment.\n **/\n$(document).on(\"runestone:login-complete\", async function () {\n let selQuestions = document.querySelectorAll(\n \"[data-component=selectquestion]\"\n );\n for (let cq of selQuestions) {\n try {\n if ($(cq).closest(\"[data-component=timedAssessment]\").length == 0) {\n // If this element exists within a timed component, don't render it here\n let tmp = new SelectOne({ orig: cq });\n await tmp.initialize();\n }\n } catch (err) {\n console.log(`Error rendering New Exercise ${cq.id}\n Details: ${err}`);\n console.log(err.stack);\n }\n }\n});\n"],"names":["SelectOne","constructor","opts","super","this","origOpts","questions","$","orig","data","proficiency","minDifficulty","maxDifficulty","points","autogradable","not_seen_ever","selector_id","first","attr","primaryOnly","ABExperiment","toggleOptions","toggleLabels","limitBaseCourse","id","initialize","self","primary","AB","timedWrapper","eBookConfig","basecourse","selectorId","console","log","res","request","Request","new_server_prefix","method","headers","jsonHeaders","body","JSON","stringify","response","fetch","htmlsrc","json","detail","indexOf","alert","Error","timed","assessmentTaken","component","rqa","question","realComponent","containerDiv","replace","trim","split","t","length","i","toggleQuestionSubstring","toggleQuestionType","toggleQuestions","toggleUI","document","getElementById","toggleQuestionTypes","getToggleSrc","slice","includes","toggleFirstID","is_toggle","is_select","useRunestoneServices","hide","toggleQuestionSelect","options","value","addEventListener","async","togglePreview","parentElement","logBookEvent","event","act","div_id","bind","toggleQuestionID","parentID","html","getElementsByTagName","selectedQuestion","selectedIndex","closeButton","createElement","text","addClass","append","setButton","click","toggleSet","currentType","selectedType","transferButton","toggleTransfer","show","innerHTML","currentParsonsClass","currentBlockIndent","indentCount","indent","parsonsLine","count","currentParsons","querySelectorAll","getElementsByClassName","parsonsLines","p","classList","parseInt","style","left","d","l","childNodes","nodeName","htmlsrcFormer","htmlsrcLatter","window","component_factory","selectquestion","on","selQuestions","cq","closest","tmp","err","stack"],"sourceRoot":""} \ No newline at end of file diff --git a/course/_static/662.e77a89c65303c376.js.map.gz b/course/_static/662.e77a89c65303c376.js.map.gz new file mode 100755 index 0000000000000000000000000000000000000000..ace3be4152e3b6b5591502ef6574acc8199a009e GIT binary patch literal 8683 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 JoO_#o004-psV4vc literal 0 HcmV?d00001 diff --git a/course/_static/_runestone-services.xml b/course/_static/_runestone-services.xml index ef4065c..1029381 100755 --- a/course/_static/_runestone-services.xml +++ b/course/_static/_runestone-services.xml @@ -1,14 +1,14 @@ - prefix-runtime.991c135ccf182bf5.bundle.js + prefix-runtime.3dca4b99808f4053.bundle.js prefix-723.3e6434f80549315a.bundle.js - prefix-runestone.1c010553c35c544c.bundle.js + prefix-runestone.80892ed1280c2803.bundle.js prefix-723.3bccd435914aa0ff.css - prefix-runestone.677a75a9120449ff.css + prefix-runestone.6ec5960970d8b364.css https://runestone.academy/cdn/runestone/ - 7.11.9 + 7.11.10 diff --git a/course/_static/prefix-runestone.1c010553c35c544c.bundle.js.gz b/course/_static/prefix-runestone.1c010553c35c544c.bundle.js.gz deleted file mode 100755 index f1bf6dc45ddd509fc812f938b8d6ebafe4560cbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22561 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 li > a.internal, > ul, > li > ul\");\n\n // Iterate everything in order.\n $items.each(function (index, item) {\n var $item = $(item),\n tag = item.tagName.toLowerCase(),\n $childrenLi = $item.children('li'),\n $parentLi = $($item.parent('li'), $item.parent().parent('li'));\n\n // Add dropdowns if more children and above minimum level.\n if (tag === 'ul' && level >= minLevel && $childrenLi.length > 0) {\n $parentLi\n .addClass('dropdown-submenu')\n .children('a').first().attr('tabindex', -1);\n\n $item.addClass('dropdown-menu');\n }\n\n findA($item, level + 1);\n });\n };\n\n findA($ul);\n };\n\n /**\n * Patch all tables to remove ``docutils`` class and add Bootstrap base\n * ``table`` class.\n */\n patchTables = function () {\n $(\"table.docutils\")\n .removeClass(\"docutils\")\n .addClass(\"table\")\n .attr(\"border\", 0);\n };\n\n$(function () {\n\n /*\n * Scroll the window to avoid the topnav bar\n * https://github.com/twitter/bootstrap/issues/1768\n */\n if ($(\"#navbar.navbar-fixed-top\").length > 0) {\n var navHeight = $(\"#navbar\").height(),\n shiftWindow = function() { scrollBy(0, -navHeight - 10); };\n\n if (location.hash) {\n shiftWindow();\n }\n\n window.addEventListener(\"hashchange\", shiftWindow);\n }\n\n // Add styling, structure to TOC's.\n $(\".dropdown-menu\").each(function () {\n $(this).find(\"ul\").each(function (index, item){\n var $item = $(item);\n $item.addClass('unstyled');\n });\n });\n\n // Global TOC.\n if ($(\"ul.globaltoc li\").length) {\n patchToc($(\"ul.globaltoc\"), 1);\n } else {\n // Remove Global TOC.\n $(\".globaltoc-container\").remove();\n }\n\n // Local TOC.\n patchToc($(\"ul.localtoc\"), 2);\n\n // Mutate sub-lists (for bs-2.3.0).\n $(\".dropdown-menu ul\").not(\".dropdown-menu\").each(function () {\n var $ul = $(this),\n $parent = $ul.parent(),\n tag = $parent[0].tagName.toLowerCase(),\n $kids = $ul.children().detach();\n\n // Replace list with items if submenu header.\n if (tag === \"ul\") {\n $ul.replaceWith($kids);\n } else if (tag === \"li\") {\n // Insert into previous list.\n $parent.after($kids);\n $ul.remove();\n }\n });\n\n // Add divider in page TOC.\n $localLi = $(\"ul.localtoc li\");\n if ($localLi.length > 2) {\n $localLi.first().after('
  • ');\n }\n\n // Enable dropdown.\n $('.dropdown-toggle').dropdown();\n\n // Patch tables.\n patchTables();\n\n // Add Note, Warning styles.\n $('div.note').addClass('alert').addClass('alert-info');\n $('div.warning').addClass('alert').addClass('alert-warning');\n\n // Inline code styles to Bootstrap style.\n $('tt.docutils.literal').not(\".xref\").each(function (i, e) {\n // ignore references\n if (!$(e).parent().hasClass(\"reference\")) {\n $(e).replaceWith(function () {\n return $(\"\").text($(this).text());\n });\n }});\n });\n}(window.jQuery));\n","var codeExercises;\nvar presenterCssLink;\nvar presentModeInitialized = false;\n\nfunction presentToggle() {\n if (!presentModeInitialized) {\n presentModeSetup();\n presentModeInitialized = true;\n }\n let bod = $(\"body\");\n let presentClass = \"present\";\n let fullHeightClass = \"full-height\";\n let bottomClass = \"bottom\";\n if (bod.hasClass(presentClass)) {\n $(\"section *\")\n .not(\n \"h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code\"\n )\n .removeClass(\"hidden\"); //show everything\n $(\"#completionButton\").removeClass(\"hidden\");\n bod.removeClass(presentClass);\n $(\".\" + fullHeightClass).removeClass(fullHeightClass);\n $(\".\" + bottomClass).removeClass(bottomClass);\n localStorage.setItem(\"presentMode\", \"text\");\n codeExercises.removeClass(\"hidden\");\n presenterCssLink.disabled = true; // disable present_mode.css\n } else {\n $(\"section *\")\n .not(\n \"h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code\"\n )\n .addClass(\"hidden\"); // hide extraneous stuff\n $(\"#completionButton\").addClass(\"hidden\");\n bod.addClass(presentClass);\n bod.addClass(fullHeightClass);\n $(\"html\").addClass(fullHeightClass);\n $(\"section .runestone\").addClass(fullHeightClass);\n $(\".ac-caption\").addClass(bottomClass);\n localStorage.setItem(\"presentMode\", presentClass);\n // presenter_mode.css is loaded by webpack\n //loadPresenterCss(); // present_mode.css should only apply when in presenter mode.\n activateExercise();\n }\n}\n\nfunction loadPresenterCss() {\n presenterCssLink = document.createElement(\"link\");\n presenterCssLink.type = \"text/css\";\n presenterCssLink.href = \"../_static/presenter_mode.less\";\n presenterCssLink.rel = \"stylesheet\";\n document.getElementsByTagName(\"head\")[0].appendChild(presenterCssLink);\n}\n\nfunction presentModeSetup() {\n // moved this out of configure\n let dataComponent = $(\"[data-childcomponent]\");\n\n // this still leaves some things semi-messed up when you exit presenter mode.\n // but instructors will probably just learn to refresh the page.\n dataComponent.addClass(\"runestone\");\n dataComponent.parent().closest(\"div\").not(\"section\").addClass(\"runestone\");\n dataComponent.parent().closest(\"div\").css(\"max-width\", \"none\");\n\n dataComponent.each(function (index) {\n let me = $(this);\n $(this)\n .find(\".ac_code_div, .ac_output\")\n .wrapAll(\"
    \");\n });\n\n codelensListener(500);\n $(\"section img\").wrap('
    ');\n codeExercises = $(\".runestone\").not(\".runestone .runestone\");\n // codeExercises.each(function(){\n $(\"h1\").before(\n \"
    \\\n \\\n \\\n
    \"\n );\n}\nfunction getActiveExercise() {\n return (active = codeExercises.filter(\".active\"));\n}\n\nfunction activateExercise(index) {\n if (typeof index == \"undefined\") {\n index = 0;\n }\n\n let active = getActiveExercise();\n\n if (codeExercises.length) {\n active.removeClass(\"active\");\n active = $(codeExercises[index]).addClass(\"active\");\n active.removeClass(\"hidden\");\n codeExercises.not(codeExercises.filter(\".active\")).addClass(\"hidden\");\n }\n}\n\nwindow.nextExercise = function() {\n let active = getActiveExercise();\n let nextIndex = codeExercises.index(active) + 1;\n if (nextIndex < codeExercises.length) {\n activateExercise(nextIndex);\n }\n}\n\nwindow.prevExercise = function() {\n let active = getActiveExercise();\n let prevIndex = codeExercises.index(active) - 1;\n if (prevIndex >= 0) {\n activateExercise(prevIndex);\n }\n}\n\nfunction configure() {\n let rightNav = $(\".navbar-right\");\n rightNav.prepend(\n \"\"\n );\n\n let modeSelect = $(\".mode-select\").change(presentToggle);\n}\n\nfunction codelensListener(duration) {\n // $(\".ExecutionVisualizer\").length ? configureCodelens() : setTimeout(codelensListener, duration);\n // configureCodelens();\n}\n\nfunction configureCodelens() {\n let acCodeTitle = document.createElement(\"h4\");\n acCodeTitle.textContent = \"Active Code Window\";\n let acCode = $(\".ac_code_div\");\n $(\".ac_code_div\").addClass(\"col-md-6\");\n acCode.prepend(acCodeTitle);\n\n acOutTitle = document.createElement(\"h4\");\n acOutTitle.textContent = \"Output Window\";\n let acOut = $(\".ac_output\").addClass(\"col-md-6\");\n $(\".ac_output\").prepend(acOutTitle);\n\n let sketchpadTitle = document.createElement(\"h4\");\n sketchpadTitle.textContent = \"Sketchpad\";\n let sketchpad = document.createElement(\"span\");\n $(sketchpad).addClass(\"sketchpad\");\n let sketchpadContainer = document.createElement(\"div\");\n $(sketchpadContainer).addClass(\"sketchpad-container\");\n sketchpadContainer.appendChild(sketchpadTitle);\n sketchpadContainer.appendChild(sketchpad);\n //$('.ac_output').append(sketchpadContainer);\n\n let visualizers = $(\".ExecutionVisualizer\");\n\n console.log(\"Econtainer: \", this.eContainer);\n\n $(\"[data-childcomponent]\").on(\"click\", \"button.row-mode\", function () {\n $(this).closest(\"[data-childcomponent]\").removeClass(\"card-mode\");\n $(this).closest(\"[data-childcomponent]\").addClass(\"row-mode\");\n $(this).next(\".card-mode\").removeClass(\"active-layout\");\n $(this).addClass(\"active-layout\");\n });\n\n $(\"[data-childcomponent]\").on(\"click\", \"button.card-mode\", function () {\n $(this).closest(\"[data-childcomponent]\").removeClass(\"row-mode\");\n $(this).closest(\"[data-childcomponent]\").addClass(\"card-mode\");\n $(this).prev(\".row-mode\").removeClass(\"active-layout\");\n $(this).addClass(\"active-layout\");\n });\n\n $(\"[data-childcomponent] .ac_section\").each(function () {\n $(this).prepend(\n '
    '\n );\n });\n\n visualizers.each(function (index) {\n let me = $(this);\n let col1 = me.find(\"#vizLayoutTdFirst\");\n let col2 = me.find(\"#vizLayoutTdSecond\");\n let dataVis = me.find(\"#dataViz\");\n let stackHeapTable = me.find(\"#stackHeapTable\");\n let output = me.find(\"#progOutputs\");\n output.css(\"display\", \"block\");\n me.parent().prepend(\n \"
    Example \" +\n (Number(index) + 1) +\n \"
    \"\n );\n });\n\n acCode.each(function () {\n let section = $(this).closest(\".ac-block\").parent();\n console.log(section, section.length);\n section.append(sketchpadContainer);\n });\n\n $(\"button.card-mode\").click();\n\n let modeSelect = $(\".mode-select\");\n let mode = localStorage.getItem(\"presentMode\");\n if (mode == \"present\") {\n modeSelect.val(\"present\");\n modeSelect.change();\n }\n}\n\n$(document).on(\"runestone:login-complete\", function () {\n // if user is instructor, enable presenter mode\n if (eBookConfig.isInstructor) {\n configure();\n }\n});\n","/*!\n * jQuery Internationalization library\n *\n * Copyright (C) 2012 Santhosh Thottingal\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to\n * choose one license or the other and you don't have to notify anyone which license you are using.\n * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n( function ( $ ) {\n\t'use strict';\n\n\t$.i18n = $.i18n || {};\n\t$.extend( $.i18n.fallbacks, {\n\t\tab: [ 'ru' ],\n\t\tace: [ 'id' ],\n\t\taln: [ 'sq' ],\n\t\t// Not so standard - als is supposed to be Tosk Albanian,\n\t\t// but in Wikipedia it's used for a Germanic language.\n\t\tals: [ 'gsw', 'de' ],\n\t\tan: [ 'es' ],\n\t\tanp: [ 'hi' ],\n\t\tarn: [ 'es' ],\n\t\tarz: [ 'ar' ],\n\t\tav: [ 'ru' ],\n\t\tay: [ 'es' ],\n\t\tba: [ 'ru' ],\n\t\tbar: [ 'de' ],\n\t\t'bat-smg': [ 'sgs', 'lt' ],\n\t\tbcc: [ 'fa' ],\n\t\t'be-x-old': [ 'be-tarask' ],\n\t\tbh: [ 'bho' ],\n\t\tbjn: [ 'id' ],\n\t\tbm: [ 'fr' ],\n\t\tbpy: [ 'bn' ],\n\t\tbqi: [ 'fa' ],\n\t\tbug: [ 'id' ],\n\t\t'cbk-zam': [ 'es' ],\n\t\tce: [ 'ru' ],\n\t\tcrh: [ 'crh-latn' ],\n\t\t'crh-cyrl': [ 'ru' ],\n\t\tcsb: [ 'pl' ],\n\t\tcv: [ 'ru' ],\n\t\t'de-at': [ 'de' ],\n\t\t'de-ch': [ 'de' ],\n\t\t'de-formal': [ 'de' ],\n\t\tdsb: [ 'de' ],\n\t\tdtp: [ 'ms' ],\n\t\tegl: [ 'it' ],\n\t\teml: [ 'it' ],\n\t\tff: [ 'fr' ],\n\t\tfit: [ 'fi' ],\n\t\t'fiu-vro': [ 'vro', 'et' ],\n\t\tfrc: [ 'fr' ],\n\t\tfrp: [ 'fr' ],\n\t\tfrr: [ 'de' ],\n\t\tfur: [ 'it' ],\n\t\tgag: [ 'tr' ],\n\t\tgan: [ 'gan-hant', 'zh-hant', 'zh-hans' ],\n\t\t'gan-hans': [ 'zh-hans' ],\n\t\t'gan-hant': [ 'zh-hant', 'zh-hans' ],\n\t\tgl: [ 'pt' ],\n\t\tglk: [ 'fa' ],\n\t\tgn: [ 'es' ],\n\t\tgsw: [ 'de' ],\n\t\thif: [ 'hif-latn' ],\n\t\thsb: [ 'de' ],\n\t\tht: [ 'fr' ],\n\t\tii: [ 'zh-cn', 'zh-hans' ],\n\t\tinh: [ 'ru' ],\n\t\tiu: [ 'ike-cans' ],\n\t\tjut: [ 'da' ],\n\t\tjv: [ 'id' ],\n\t\tkaa: [ 'kk-latn', 'kk-cyrl' ],\n\t\tkbd: [ 'kbd-cyrl' ],\n\t\tkhw: [ 'ur' ],\n\t\tkiu: [ 'tr' ],\n\t\tkk: [ 'kk-cyrl' ],\n\t\t'kk-arab': [ 'kk-cyrl' ],\n\t\t'kk-latn': [ 'kk-cyrl' ],\n\t\t'kk-cn': [ 'kk-arab', 'kk-cyrl' ],\n\t\t'kk-kz': [ 'kk-cyrl' ],\n\t\t'kk-tr': [ 'kk-latn', 'kk-cyrl' ],\n\t\tkl: [ 'da' ],\n\t\t'ko-kp': [ 'ko' ],\n\t\tkoi: [ 'ru' ],\n\t\tkrc: [ 'ru' ],\n\t\tks: [ 'ks-arab' ],\n\t\tksh: [ 'de' ],\n\t\tku: [ 'ku-latn' ],\n\t\t'ku-arab': [ 'ckb' ],\n\t\tkv: [ 'ru' ],\n\t\tlad: [ 'es' ],\n\t\tlb: [ 'de' ],\n\t\tlbe: [ 'ru' ],\n\t\tlez: [ 'ru' ],\n\t\tli: [ 'nl' ],\n\t\tlij: [ 'it' ],\n\t\tliv: [ 'et' ],\n\t\tlmo: [ 'it' ],\n\t\tln: [ 'fr' ],\n\t\tltg: [ 'lv' ],\n\t\tlzz: [ 'tr' ],\n\t\tmai: [ 'hi' ],\n\t\t'map-bms': [ 'jv', 'id' ],\n\t\tmg: [ 'fr' ],\n\t\tmhr: [ 'ru' ],\n\t\tmin: [ 'id' ],\n\t\tmo: [ 'ro' ],\n\t\tmrj: [ 'ru' ],\n\t\tmwl: [ 'pt' ],\n\t\tmyv: [ 'ru' ],\n\t\tmzn: [ 'fa' ],\n\t\tnah: [ 'es' ],\n\t\tnap: [ 'it' ],\n\t\tnds: [ 'de' ],\n\t\t'nds-nl': [ 'nl' ],\n\t\t'nl-informal': [ 'nl' ],\n\t\tno: [ 'nb' ],\n\t\tos: [ 'ru' ],\n\t\tpcd: [ 'fr' ],\n\t\tpdc: [ 'de' ],\n\t\tpdt: [ 'de' ],\n\t\tpfl: [ 'de' ],\n\t\tpms: [ 'it' ],\n\t\tpt: [ 'pt-br' ],\n\t\t'pt-br': [ 'pt' ],\n\t\tqu: [ 'es' ],\n\t\tqug: [ 'qu', 'es' ],\n\t\trgn: [ 'it' ],\n\t\trmy: [ 'ro' ],\n\t\t'roa-rup': [ 'rup' ],\n\t\true: [ 'uk', 'ru' ],\n\t\truq: [ 'ruq-latn', 'ro' ],\n\t\t'ruq-cyrl': [ 'mk' ],\n\t\t'ruq-latn': [ 'ro' ],\n\t\tsa: [ 'hi' ],\n\t\tsah: [ 'ru' ],\n\t\tscn: [ 'it' ],\n\t\tsg: [ 'fr' ],\n\t\tsgs: [ 'lt' ],\n\t\tsli: [ 'de' ],\n\t\tsr: [ 'sr-ec' ],\n\t\tsrn: [ 'nl' ],\n\t\tstq: [ 'de' ],\n\t\tsu: [ 'id' ],\n\t\tszl: [ 'pl' ],\n\t\ttcy: [ 'kn' ],\n\t\ttg: [ 'tg-cyrl' ],\n\t\ttt: [ 'tt-cyrl', 'ru' ],\n\t\t'tt-cyrl': [ 'ru' ],\n\t\tty: [ 'fr' ],\n\t\tudm: [ 'ru' ],\n\t\tug: [ 'ug-arab' ],\n\t\tuk: [ 'ru' ],\n\t\tvec: [ 'it' ],\n\t\tvep: [ 'et' ],\n\t\tvls: [ 'nl' ],\n\t\tvmf: [ 'de' ],\n\t\tvot: [ 'fi' ],\n\t\tvro: [ 'et' ],\n\t\twa: [ 'fr' ],\n\t\two: [ 'fr' ],\n\t\twuu: [ 'zh-hans' ],\n\t\txal: [ 'ru' ],\n\t\txmf: [ 'ka' ],\n\t\tyi: [ 'he' ],\n\t\tza: [ 'zh-hans' ],\n\t\tzea: [ 'nl' ],\n\t\tzh: [ 'zh-hans' ],\n\t\t'zh-classical': [ 'lzh' ],\n\t\t'zh-cn': [ 'zh-hans' ],\n\t\t'zh-hant': [ 'zh-hans' ],\n\t\t'zh-hk': [ 'zh-hant', 'zh-hans' ],\n\t\t'zh-min-nan': [ 'nan' ],\n\t\t'zh-mo': [ 'zh-hk', 'zh-hant', 'zh-hans' ],\n\t\t'zh-my': [ 'zh-sg', 'zh-hans' ],\n\t\t'zh-sg': [ 'zh-hans' ],\n\t\t'zh-tw': [ 'zh-hant', 'zh-hans' ],\n\t\t'zh-yue': [ 'yue' ]\n\t} );\n}( jQuery ) );\n","/* global pluralRuleParser */\n( function ( $ ) {\n\t'use strict';\n\n\t// jscs:disable\n\tvar language = {\n\t\t// CLDR plural rules generated using\n\t\t// libs/CLDRPluralRuleParser/tools/PluralXML2JSON.html\n\t\tpluralRules: {\n\t\t\tak: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tam: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tar: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n % 100 = 3..10',\n\t\t\t\tmany: 'n % 100 = 11..99'\n\t\t\t},\n\t\t\tars: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n % 100 = 3..10',\n\t\t\t\tmany: 'n % 100 = 11..99'\n\t\t\t},\n\t\t\tas: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tbe: {\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11',\n\t\t\t\tfew: 'n % 10 = 2..4 and n % 100 != 12..14',\n\t\t\t\tmany: 'n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14'\n\t\t\t},\n\t\t\tbh: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tbn: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tbr: {\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11,71,91',\n\t\t\t\ttwo: 'n % 10 = 2 and n % 100 != 12,72,92',\n\t\t\t\tfew: 'n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99',\n\t\t\t\tmany: 'n != 0 and n % 1000000 = 0'\n\t\t\t},\n\t\t\tbs: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\tcs: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'i = 2..4 and v = 0',\n\t\t\t\tmany: 'v != 0'\n\t\t\t},\n\t\t\tcy: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n = 3',\n\t\t\t\tmany: 'n = 6'\n\t\t\t},\n\t\t\tda: {\n\t\t\t\tone: 'n = 1 or t != 0 and i = 0,1'\n\t\t\t},\n\t\t\tdsb: {\n\t\t\t\tone: 'v = 0 and i % 100 = 1 or f % 100 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 100 = 2 or f % 100 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 3..4 or f % 100 = 3..4'\n\t\t\t},\n\t\t\tfa: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tff: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tfil: {\n\t\t\t\tone: 'v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9'\n\t\t\t},\n\t\t\tfr: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tga: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n = 3..6',\n\t\t\t\tmany: 'n = 7..10'\n\t\t\t},\n\t\t\tgd: {\n\t\t\t\tone: 'n = 1,11',\n\t\t\t\ttwo: 'n = 2,12',\n\t\t\t\tfew: 'n = 3..10,13..19'\n\t\t\t},\n\t\t\tgu: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tguw: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tgv: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 10 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 0,20,40,60,80',\n\t\t\t\tmany: 'v != 0'\n\t\t\t},\n\t\t\the: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\ttwo: 'i = 2 and v = 0',\n\t\t\t\tmany: 'v = 0 and n != 0..10 and n % 10 = 0'\n\t\t\t},\n\t\t\thi: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\thr: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\thsb: {\n\t\t\t\tone: 'v = 0 and i % 100 = 1 or f % 100 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 100 = 2 or f % 100 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 3..4 or f % 100 = 3..4'\n\t\t\t},\n\t\t\thy: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tis: {\n\t\t\t\tone: 't = 0 and i % 10 = 1 and i % 100 != 11 or t != 0'\n\t\t\t},\n\t\t\tiu: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tiw: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\ttwo: 'i = 2 and v = 0',\n\t\t\t\tmany: 'v = 0 and n != 0..10 and n % 10 = 0'\n\t\t\t},\n\t\t\tkab: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tkn: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tkw: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tlag: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'i = 0,1 and n != 0'\n\t\t\t},\n\t\t\tln: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tlt: {\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11..19',\n\t\t\t\tfew: 'n % 10 = 2..9 and n % 100 != 11..19',\n\t\t\t\tmany: 'f != 0'\n\t\t\t},\n\t\t\tlv: {\n\t\t\t\tzero: 'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19',\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1'\n\t\t\t},\n\t\t\tmg: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tmk: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 or f % 10 = 1'\n\t\t\t},\n\t\t\tmo: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'\n\t\t\t},\n\t\t\tmr: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tmt: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\tfew: 'n = 0 or n % 100 = 2..10',\n\t\t\t\tmany: 'n % 100 = 11..19'\n\t\t\t},\n\t\t\tnaq: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tnso: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tpa: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tpl: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',\n\t\t\t\tmany: 'v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14'\n\t\t\t},\n\t\t\tprg: {\n\t\t\t\tzero: 'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19',\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1'\n\t\t\t},\n\t\t\tpt: {\n\t\t\t\tone: 'i = 0..1'\n\t\t\t},\n\t\t\tro: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'\n\t\t\t},\n\t\t\tru: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',\n\t\t\t\tmany: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'\n\t\t\t},\n\t\t\tse: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsh: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\tshi: {\n\t\t\t\tone: 'i = 0 or n = 1',\n\t\t\t\tfew: 'n = 2..10'\n\t\t\t},\n\t\t\tsi: {\n\t\t\t\tone: 'n = 0,1 or i = 0 and f = 1'\n\t\t\t},\n\t\t\tsk: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'i = 2..4 and v = 0',\n\t\t\t\tmany: 'v != 0'\n\t\t\t},\n\t\t\tsl: {\n\t\t\t\tone: 'v = 0 and i % 100 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 100 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 3..4 or v != 0'\n\t\t\t},\n\t\t\tsma: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsmi: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsmj: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsmn: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsms: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsr: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\tti: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\ttl: {\n\t\t\t\tone: 'v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9'\n\t\t\t},\n\t\t\ttzm: {\n\t\t\t\tone: 'n = 0..1 or n = 11..99'\n\t\t\t},\n\t\t\tuk: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',\n\t\t\t\tmany: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'\n\t\t\t},\n\t\t\twa: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tzu: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t}\n\t\t},\n\t\t// jscs:enable\n\n\t\t/**\n\t\t * Plural form transformations, needed for some languages.\n\t\t *\n\t\t * @param {integer} count\n\t\t * Non-localized quantifier\n\t\t * @param {Array} forms\n\t\t * List of plural forms\n\t\t * @return {string} Correct form for quantifier in this language\n\t\t */\n\t\tconvertPlural: function ( count, forms ) {\n\t\t\tvar pluralRules,\n\t\t\t\tpluralFormIndex,\n\t\t\t\tindex,\n\t\t\t\texplicitPluralPattern = new RegExp( '\\\\d+=', 'i' ),\n\t\t\t\tformCount,\n\t\t\t\tform;\n\n\t\t\tif ( !forms || forms.length === 0 ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// Handle for Explicit 0= & 1= values\n\t\t\tfor ( index = 0; index < forms.length; index++ ) {\n\t\t\t\tform = forms[ index ];\n\t\t\t\tif ( explicitPluralPattern.test( form ) ) {\n\t\t\t\t\tformCount = parseInt( form.slice( 0, form.indexOf( '=' ) ), 10 );\n\t\t\t\t\tif ( formCount === count ) {\n\t\t\t\t\t\treturn ( form.slice( form.indexOf( '=' ) + 1 ) );\n\t\t\t\t\t}\n\t\t\t\t\tforms[ index ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tforms = $.map( forms, function ( form ) {\n\t\t\t\tif ( form !== undefined ) {\n\t\t\t\t\treturn form;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tpluralRules = this.pluralRules[ $.i18n().locale ];\n\n\t\t\tif ( !pluralRules ) {\n\t\t\t\t// default fallback.\n\t\t\t\treturn ( count === 1 ) ? forms[ 0 ] : forms[ 1 ];\n\t\t\t}\n\n\t\t\tpluralFormIndex = this.getPluralForm( count, pluralRules );\n\t\t\tpluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );\n\n\t\t\treturn forms[ pluralFormIndex ];\n\t\t},\n\n\t\t/**\n\t\t * For the number, get the plural for index\n\t\t *\n\t\t * @param {integer} number\n\t\t * @param {Object} pluralRules\n\t\t * @return {integer} plural form index\n\t\t */\n\t\tgetPluralForm: function ( number, pluralRules ) {\n\t\t\tvar i,\n\t\t\t\tpluralForms = [ 'zero', 'one', 'two', 'few', 'many', 'other' ],\n\t\t\t\tpluralFormIndex = 0;\n\n\t\t\tfor ( i = 0; i < pluralForms.length; i++ ) {\n\t\t\t\tif ( pluralRules[ pluralForms[ i ] ] ) {\n\t\t\t\t\tif ( pluralRuleParser( pluralRules[ pluralForms[ i ] ], number ) ) {\n\t\t\t\t\t\treturn pluralFormIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\tpluralFormIndex++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn pluralFormIndex;\n\t\t},\n\n\t\t/**\n\t\t * Converts a number using digitTransformTable.\n\t\t *\n\t\t * @param {number} num Value to be converted\n\t\t * @param {boolean} integer Convert the return value to an integer\n\t\t * @return {string} The number converted into a String.\n\t\t */\n\t\tconvertNumber: function ( num, integer ) {\n\t\t\tvar tmp, item, i,\n\t\t\t\ttransformTable, numberString, convertedNumber;\n\n\t\t\t// Set the target Transform table:\n\t\t\ttransformTable = this.digitTransformTable( $.i18n().locale );\n\t\t\tnumberString = String( num );\n\t\t\tconvertedNumber = '';\n\n\t\t\tif ( !transformTable ) {\n\t\t\t\treturn num;\n\t\t\t}\n\n\t\t\t// Check if the restore to Latin number flag is set:\n\t\t\tif ( integer ) {\n\t\t\t\tif ( parseFloat( num, 10 ) === num ) {\n\t\t\t\t\treturn num;\n\t\t\t\t}\n\n\t\t\t\ttmp = [];\n\n\t\t\t\tfor ( item in transformTable ) {\n\t\t\t\t\ttmp[ transformTable[ item ] ] = item;\n\t\t\t\t}\n\n\t\t\t\ttransformTable = tmp;\n\t\t\t}\n\n\t\t\tfor ( i = 0; i < numberString.length; i++ ) {\n\t\t\t\tif ( transformTable[ numberString[ i ] ] ) {\n\t\t\t\t\tconvertedNumber += transformTable[ numberString[ i ] ];\n\t\t\t\t} else {\n\t\t\t\t\tconvertedNumber += numberString[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn integer ? parseFloat( convertedNumber, 10 ) : convertedNumber;\n\t\t},\n\n\t\t/**\n\t\t * Grammatical transformations, needed for inflected languages.\n\t\t * Invoked by putting {{grammar:form|word}} in a message.\n\t\t * Override this method for languages that need special grammar rules\n\t\t * applied dynamically.\n\t\t *\n\t\t * @param {string} word\n\t\t * @param {string} form\n\t\t * @return {string}\n\t\t */\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tconvertGrammar: function ( word, form ) {\n\t\t\treturn word;\n\t\t},\n\n\t\t/**\n\t\t * Provides an alternative text depending on specified gender. Usage\n\t\t * {{gender:[gender|user object]|masculine|feminine|neutral}}. If second\n\t\t * or third parameter are not specified, masculine is used.\n\t\t *\n\t\t * These details may be overriden per language.\n\t\t *\n\t\t * @param {string} gender\n\t\t * male, female, or anything else for neutral.\n\t\t * @param {Array} forms\n\t\t * List of gender forms\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgender: function ( gender, forms ) {\n\t\t\tif ( !forms || forms.length === 0 ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\twhile ( forms.length < 2 ) {\n\t\t\t\tforms.push( forms[ forms.length - 1 ] );\n\t\t\t}\n\n\t\t\tif ( gender === 'male' ) {\n\t\t\t\treturn forms[ 0 ];\n\t\t\t}\n\n\t\t\tif ( gender === 'female' ) {\n\t\t\t\treturn forms[ 1 ];\n\t\t\t}\n\n\t\t\treturn ( forms.length === 3 ) ? forms[ 2 ] : forms[ 0 ];\n\t\t},\n\n\t\t/**\n\t\t * Get the digit transform table for the given language\n\t\t * See http://cldr.unicode.org/translation/numbering-systems\n\t\t *\n\t\t * @param {string} language\n\t\t * @return {Array|boolean} List of digits in the passed language or false\n\t\t * representation, or boolean false if there is no information.\n\t\t */\n\t\tdigitTransformTable: function ( language ) {\n\t\t\tvar tables = {\n\t\t\t\tar: '٠١٢٣٤٥٦٧٨٩',\n\t\t\t\tfa: '۰۱۲۳۴۵۶۷۸۹',\n\t\t\t\tml: '൦൧൨൩൪൫൬൭൮൯',\n\t\t\t\tkn: '೦೧೨೩೪೫೬೭೮೯',\n\t\t\t\tlo: '໐໑໒໓໔໕໖໗໘໙',\n\t\t\t\tor: '୦୧୨୩୪୫୬୭୮୯',\n\t\t\t\tkh: '០១២៣៤៥៦៧៨៩',\n\t\t\t\tpa: '੦੧੨੩੪੫੬੭੮੯',\n\t\t\t\tgu: '૦૧૨૩૪૫૬૭૮૯',\n\t\t\t\thi: '०१२३४५६७८९',\n\t\t\t\tmy: '၀၁၂၃၄၅၆၇၈၉',\n\t\t\t\tta: '௦௧௨௩௪௫௬௭௮௯',\n\t\t\t\tte: '౦౧౨౩౪౫౬౭౮౯',\n\t\t\t\tth: '๐๑๒๓๔๕๖๗๘๙', // FIXME use iso 639 codes\n\t\t\t\tbo: '༠༡༢༣༤༥༦༧༨༩' // FIXME use iso 639 codes\n\t\t\t};\n\n\t\t\tif ( !tables[ language ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn tables[ language ].split( '' );\n\t\t}\n\t};\n\n\t$.extend( $.i18n.languages, {\n\t\t'default': language\n\t} );\n}( jQuery ) );\n","/*!\n * BIDI embedding support for jQuery.i18n\n *\n * Copyright (C) 2015, David Chan\n *\n * This code is dual licensed GPLv2 or later and MIT. You don't have to do\n * anything special to choose one license or the other and you don't have to\n * notify anyone which license you are using. You are free to use this code\n * in commercial projects as long as the copyright header is left intact.\n * See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\tvar strongDirRegExp;\n\n\t/**\n\t * Matches the first strong directionality codepoint:\n\t * - in group 1 if it is LTR\n\t * - in group 2 if it is RTL\n\t * Does not match if there is no strong directionality codepoint.\n\t *\n\t * Generated by UnicodeJS (see tools/strongDir) from the UCD; see\n\t * https://phabricator.wikimedia.org/diffusion/GUJS/ .\n\t */\n\tstrongDirRegExp = new RegExp(\n\t\t'(?:' +\n\t\t\t'(' +\n\t\t\t\t'[\\u0041-\\u005a\\u0061-\\u007a\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02b8\\u02bb-\\u02c1\\u02d0\\u02d1\\u02e0-\\u02e4\\u02ee\\u0370-\\u0373\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0482\\u048a-\\u052f\\u0531-\\u0556\\u0559-\\u055f\\u0561-\\u0587\\u0589\\u0903-\\u0939\\u093b\\u093d-\\u0940\\u0949-\\u094c\\u094e-\\u0950\\u0958-\\u0961\\u0964-\\u0980\\u0982\\u0983\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd-\\u09c0\\u09c7\\u09c8\\u09cb\\u09cc\\u09ce\\u09d7\\u09dc\\u09dd\\u09df-\\u09e1\\u09e6-\\u09f1\\u09f4-\\u09fa\\u0a03\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a3e-\\u0a40\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a6f\\u0a72-\\u0a74\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd-\\u0ac0\\u0ac9\\u0acb\\u0acc\\u0ad0\\u0ae0\\u0ae1\\u0ae6-\\u0af0\\u0af9\\u0b02\\u0b03\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b3e\\u0b40\\u0b47\\u0b48\\u0b4b\\u0b4c\\u0b57\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b66-\\u0b77\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe\\u0bbf\\u0bc1\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcc\\u0bd0\\u0bd7\\u0be6-\\u0bf2\\u0c01-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c41-\\u0c44\\u0c58-\\u0c5a\\u0c60\\u0c61\\u0c66-\\u0c6f\\u0c7f\\u0c82\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd-\\u0cc4\\u0cc6-\\u0cc8\\u0cca\\u0ccb\\u0cd5\\u0cd6\\u0cde\\u0ce0\\u0ce1\\u0ce6-\\u0cef\\u0cf1\\u0cf2\\u0d02\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d40\\u0d46-\\u0d48\\u0d4a-\\u0d4c\\u0d4e\\u0d57\\u0d5f-\\u0d61\\u0d66-\\u0d75\\u0d79-\\u0d7f\\u0d82\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dcf-\\u0dd1\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df4\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e4f-\\u0e5b\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00-\\u0f17\\u0f1a-\\u0f34\\u0f36\\u0f38\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f7f\\u0f85\\u0f88-\\u0f8c\\u0fbe-\\u0fc5\\u0fc7-\\u0fcc\\u0fce-\\u0fda\\u1000-\\u102c\\u1031\\u1038\\u103b\\u103c\\u103f-\\u1057\\u105a-\\u105d\\u1061-\\u1070\\u1075-\\u1081\\u1083\\u1084\\u1087-\\u108c\\u108e-\\u109c\\u109e-\\u10c5\\u10c7\\u10cd\\u10d0-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1360-\\u137c\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u167f\\u1681-\\u169a\\u16a0-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1735\\u1736\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17b6\\u17be-\\u17c5\\u17c7\\u17c8\\u17d4-\\u17da\\u17dc\\u17e0-\\u17e9\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1923-\\u1926\\u1929-\\u192b\\u1930\\u1931\\u1933-\\u1938\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19da\\u1a00-\\u1a16\\u1a19\\u1a1a\\u1a1e-\\u1a55\\u1a57\\u1a61\\u1a63\\u1a64\\u1a6d-\\u1a72\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1aa0-\\u1aad\\u1b04-\\u1b33\\u1b35\\u1b3b\\u1b3d-\\u1b41\\u1b43-\\u1b4b\\u1b50-\\u1b6a\\u1b74-\\u1b7c\\u1b82-\\u1ba1\\u1ba6\\u1ba7\\u1baa\\u1bae-\\u1be5\\u1be7\\u1bea-\\u1bec\\u1bee\\u1bf2\\u1bf3\\u1bfc-\\u1c2b\\u1c34\\u1c35\\u1c3b-\\u1c49\\u1c4d-\\u1c7f\\u1cc0-\\u1cc7\\u1cd3\\u1ce1\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200e\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u214f\\u2160-\\u2188\\u2336-\\u237a\\u2395\\u249c-\\u24e9\\u26ac\\u2800-\\u28ff\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d70\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u302e\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u3190-\\u31ba\\u31f0-\\u321c\\u3220-\\u324f\\u3260-\\u327b\\u327f-\\u32b0\\u32c0-\\u32cb\\u32d0-\\u32fe\\u3300-\\u3376\\u337b-\\u33dd\\u33e0-\\u33fe\\u3400-\\u4db5\\u4e00-\\u9fd5\\ua000-\\ua48c\\ua4d0-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66e\\ua680-\\ua69d\\ua6a0-\\ua6ef\\ua6f2-\\ua6f7\\ua722-\\ua787\\ua789-\\ua7ad\\ua7b0-\\ua7b7\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua824\\ua827\\ua830-\\ua837\\ua840-\\ua873\\ua880-\\ua8c3\\ua8ce-\\ua8d9\\ua8f2-\\ua8fd\\ua900-\\ua925\\ua92e-\\ua946\\ua952\\ua953\\ua95f-\\ua97c\\ua983-\\ua9b2\\ua9b4\\ua9b5\\ua9ba\\ua9bb\\ua9bd-\\ua9cd\\ua9cf-\\ua9d9\\ua9de-\\ua9e4\\ua9e6-\\ua9fe\\uaa00-\\uaa28\\uaa2f\\uaa30\\uaa33\\uaa34\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa4d\\uaa50-\\uaa59\\uaa5c-\\uaa7b\\uaa7d-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaaeb\\uaaee-\\uaaf5\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab65\\uab70-\\uabe4\\uabe6\\uabe7\\uabe9-\\uabec\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ue000-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b]|\\ud800[\\udc0d-\\udc26]|\\ud800[\\udc28-\\udc3a]|\\ud800\\udc3c|\\ud800\\udc3d|\\ud800[\\udc3f-\\udc4d]|\\ud800[\\udc50-\\udc5d]|\\ud800[\\udc80-\\udcfa]|\\ud800\\udd00|\\ud800\\udd02|\\ud800[\\udd07-\\udd33]|\\ud800[\\udd37-\\udd3f]|\\ud800[\\uddd0-\\uddfc]|\\ud800[\\ude80-\\ude9c]|\\ud800[\\udea0-\\uded0]|\\ud800[\\udf00-\\udf23]|\\ud800[\\udf30-\\udf4a]|\\ud800[\\udf50-\\udf75]|\\ud800[\\udf80-\\udf9d]|\\ud800[\\udf9f-\\udfc3]|\\ud800[\\udfc8-\\udfd5]|\\ud801[\\udc00-\\udc9d]|\\ud801[\\udca0-\\udca9]|\\ud801[\\udd00-\\udd27]|\\ud801[\\udd30-\\udd63]|\\ud801\\udd6f|\\ud801[\\ude00-\\udf36]|\\ud801[\\udf40-\\udf55]|\\ud801[\\udf60-\\udf67]|\\ud804\\udc00|\\ud804[\\udc02-\\udc37]|\\ud804[\\udc47-\\udc4d]|\\ud804[\\udc66-\\udc6f]|\\ud804[\\udc82-\\udcb2]|\\ud804\\udcb7|\\ud804\\udcb8|\\ud804[\\udcbb-\\udcc1]|\\ud804[\\udcd0-\\udce8]|\\ud804[\\udcf0-\\udcf9]|\\ud804[\\udd03-\\udd26]|\\ud804\\udd2c|\\ud804[\\udd36-\\udd43]|\\ud804[\\udd50-\\udd72]|\\ud804[\\udd74-\\udd76]|\\ud804[\\udd82-\\uddb5]|\\ud804[\\uddbf-\\uddc9]|\\ud804\\uddcd|\\ud804[\\uddd0-\\udddf]|\\ud804[\\udde1-\\uddf4]|\\ud804[\\ude00-\\ude11]|\\ud804[\\ude13-\\ude2e]|\\ud804\\ude32|\\ud804\\ude33|\\ud804\\ude35|\\ud804[\\ude38-\\ude3d]|\\ud804[\\ude80-\\ude86]|\\ud804\\ude88|\\ud804[\\ude8a-\\ude8d]|\\ud804[\\ude8f-\\ude9d]|\\ud804[\\ude9f-\\udea9]|\\ud804[\\udeb0-\\udede]|\\ud804[\\udee0-\\udee2]|\\ud804[\\udef0-\\udef9]|\\ud804\\udf02|\\ud804\\udf03|\\ud804[\\udf05-\\udf0c]|\\ud804\\udf0f|\\ud804\\udf10|\\ud804[\\udf13-\\udf28]|\\ud804[\\udf2a-\\udf30]|\\ud804\\udf32|\\ud804\\udf33|\\ud804[\\udf35-\\udf39]|\\ud804[\\udf3d-\\udf3f]|\\ud804[\\udf41-\\udf44]|\\ud804\\udf47|\\ud804\\udf48|\\ud804[\\udf4b-\\udf4d]|\\ud804\\udf50|\\ud804\\udf57|\\ud804[\\udf5d-\\udf63]|\\ud805[\\udc80-\\udcb2]|\\ud805\\udcb9|\\ud805[\\udcbb-\\udcbe]|\\ud805\\udcc1|\\ud805[\\udcc4-\\udcc7]|\\ud805[\\udcd0-\\udcd9]|\\ud805[\\udd80-\\uddb1]|\\ud805[\\uddb8-\\uddbb]|\\ud805\\uddbe|\\ud805[\\uddc1-\\udddb]|\\ud805[\\ude00-\\ude32]|\\ud805\\ude3b|\\ud805\\ude3c|\\ud805\\ude3e|\\ud805[\\ude41-\\ude44]|\\ud805[\\ude50-\\ude59]|\\ud805[\\ude80-\\udeaa]|\\ud805\\udeac|\\ud805\\udeae|\\ud805\\udeaf|\\ud805\\udeb6|\\ud805[\\udec0-\\udec9]|\\ud805[\\udf00-\\udf19]|\\ud805\\udf20|\\ud805\\udf21|\\ud805\\udf26|\\ud805[\\udf30-\\udf3f]|\\ud806[\\udca0-\\udcf2]|\\ud806\\udcff|\\ud806[\\udec0-\\udef8]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e]|\\ud809[\\udc70-\\udc74]|\\ud809[\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38]|\\ud81a[\\ude40-\\ude5e]|\\ud81a[\\ude60-\\ude69]|\\ud81a\\ude6e|\\ud81a\\ude6f|\\ud81a[\\uded0-\\udeed]|\\ud81a\\udef5|\\ud81a[\\udf00-\\udf2f]|\\ud81a[\\udf37-\\udf45]|\\ud81a[\\udf50-\\udf59]|\\ud81a[\\udf5b-\\udf61]|\\ud81a[\\udf63-\\udf77]|\\ud81a[\\udf7d-\\udf8f]|\\ud81b[\\udf00-\\udf44]|\\ud81b[\\udf50-\\udf7e]|\\ud81b[\\udf93-\\udf9f]|\\ud82c\\udc00|\\ud82c\\udc01|\\ud82f[\\udc00-\\udc6a]|\\ud82f[\\udc70-\\udc7c]|\\ud82f[\\udc80-\\udc88]|\\ud82f[\\udc90-\\udc99]|\\ud82f\\udc9c|\\ud82f\\udc9f|\\ud834[\\udc00-\\udcf5]|\\ud834[\\udd00-\\udd26]|\\ud834[\\udd29-\\udd66]|\\ud834[\\udd6a-\\udd72]|\\ud834\\udd83|\\ud834\\udd84|\\ud834[\\udd8c-\\udda9]|\\ud834[\\uddae-\\udde8]|\\ud834[\\udf60-\\udf71]|\\ud835[\\udc00-\\udc54]|\\ud835[\\udc56-\\udc9c]|\\ud835\\udc9e|\\ud835\\udc9f|\\ud835\\udca2|\\ud835\\udca5|\\ud835\\udca6|\\ud835[\\udca9-\\udcac]|\\ud835[\\udcae-\\udcb9]|\\ud835\\udcbb|\\ud835[\\udcbd-\\udcc3]|\\ud835[\\udcc5-\\udd05]|\\ud835[\\udd07-\\udd0a]|\\ud835[\\udd0d-\\udd14]|\\ud835[\\udd16-\\udd1c]|\\ud835[\\udd1e-\\udd39]|\\ud835[\\udd3b-\\udd3e]|\\ud835[\\udd40-\\udd44]|\\ud835\\udd46|\\ud835[\\udd4a-\\udd50]|\\ud835[\\udd52-\\udea5]|\\ud835[\\udea8-\\udeda]|\\ud835[\\udedc-\\udf14]|\\ud835[\\udf16-\\udf4e]|\\ud835[\\udf50-\\udf88]|\\ud835[\\udf8a-\\udfc2]|\\ud835[\\udfc4-\\udfcb]|\\ud836[\\udc00-\\uddff]|\\ud836[\\ude37-\\ude3a]|\\ud836[\\ude6d-\\ude74]|\\ud836[\\ude76-\\ude83]|\\ud836[\\ude85-\\ude8b]|\\ud83c[\\udd10-\\udd2e]|\\ud83c[\\udd30-\\udd69]|\\ud83c[\\udd70-\\udd9a]|\\ud83c[\\udde6-\\ude02]|\\ud83c[\\ude10-\\ude3a]|\\ud83c[\\ude40-\\ude48]|\\ud83c\\ude50|\\ud83c\\ude51|[\\ud840-\\ud868][\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6]|\\ud869[\\udf00-\\udfff]|[\\ud86a-\\ud86c][\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34]|\\ud86d[\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d]|\\ud86e[\\udc20-\\udfff]|[\\ud86f-\\ud872][\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1]|\\ud87e[\\udc00-\\ude1d]|[\\udb80-\\udbbe][\\udc00-\\udfff]|\\udbbf[\\udc00-\\udffd]|[\\udbc0-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udffd]' +\n\t\t\t')|(' +\n\t\t\t\t'[\\u0590\\u05be\\u05c0\\u05c3\\u05c6\\u05c8-\\u05ff\\u07c0-\\u07ea\\u07f4\\u07f5\\u07fa-\\u0815\\u081a\\u0824\\u0828\\u082e-\\u0858\\u085c-\\u089f\\u200f\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb4f\\u0608\\u060b\\u060d\\u061b-\\u064a\\u066d-\\u066f\\u0671-\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u0710\\u0712-\\u072f\\u074b-\\u07a5\\u07b1-\\u07bf\\u08a0-\\u08e2\\ufb50-\\ufd3d\\ufd40-\\ufdcf\\ufdf0-\\ufdfc\\ufdfe\\ufdff\\ufe70-\\ufefe]|\\ud802[\\udc00-\\udd1e]|\\ud802[\\udd20-\\ude00]|\\ud802\\ude04|\\ud802[\\ude07-\\ude0b]|\\ud802[\\ude10-\\ude37]|\\ud802[\\ude3b-\\ude3e]|\\ud802[\\ude40-\\udee4]|\\ud802[\\udee7-\\udf38]|\\ud802[\\udf40-\\udfff]|\\ud803[\\udc00-\\ude5f]|\\ud803[\\ude7f-\\udfff]|\\ud83a[\\udc00-\\udccf]|\\ud83a[\\udcd7-\\udfff]|\\ud83b[\\udc00-\\uddff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\ude00-\\udeef]|\\ud83b[\\udef2-\\udeff]' +\n\t\t\t')' +\n\t\t')'\n\t);\n\n\t/**\n\t * Gets directionality of the first strongly directional codepoint\n\t *\n\t * This is the rule the BIDI algorithm uses to determine the directionality of\n\t * paragraphs ( http://unicode.org/reports/tr9/#The_Paragraph_Level ) and\n\t * FSI isolates ( http://unicode.org/reports/tr9/#Explicit_Directional_Isolates ).\n\t *\n\t * TODO: Does not handle BIDI control characters inside the text.\n\t * TODO: Does not handle unallocated characters.\n\t *\n\t * @param {string} text The text from which to extract initial directionality.\n\t * @return {string} Directionality (either 'ltr' or 'rtl')\n\t */\n\tfunction strongDirFromContent( text ) {\n\t\tvar m = text.match( strongDirRegExp );\n\t\tif ( !m ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( m[ 2 ] === undefined ) {\n\t\t\treturn 'ltr';\n\t\t}\n\t\treturn 'rtl';\n\t}\n\n\t$.extend( $.i18n.parser.emitter, {\n\t\t/**\n\t\t * Wraps argument with unicode control characters for directionality safety\n\t\t *\n\t\t * This solves the problem where directionality-neutral characters at the edge of\n\t\t * the argument string get interpreted with the wrong directionality from the\n\t\t * enclosing context, giving renderings that look corrupted like \"(Ben_(WMF\".\n\t\t *\n\t\t * The wrapping is LRE...PDF or RLE...PDF, depending on the detected\n\t\t * directionality of the argument string, using the BIDI algorithm's own \"First\n\t\t * strong directional codepoint\" rule. Essentially, this works round the fact that\n\t\t * there is no embedding equivalent of U+2068 FSI (isolation with heuristic\n\t\t * direction inference). The latter is cleaner but still not widely supported.\n\t\t *\n\t\t * @param {string[]} nodes The text nodes from which to take the first item.\n\t\t * @return {string} Wrapped String of content as needed.\n\t\t */\n\t\tbidi: function ( nodes ) {\n\t\t\tvar dir = strongDirFromContent( nodes[ 0 ] );\n\t\t\tif ( dir === 'ltr' ) {\n\t\t\t\t// Wrap in LEFT-TO-RIGHT EMBEDDING ... POP DIRECTIONAL FORMATTING\n\t\t\t\treturn '\\u202A' + nodes[ 0 ] + '\\u202C';\n\t\t\t}\n\t\t\tif ( dir === 'rtl' ) {\n\t\t\t\t// Wrap in RIGHT-TO-LEFT EMBEDDING ... POP DIRECTIONAL FORMATTING\n\t\t\t\treturn '\\u202B' + nodes[ 0 ] + '\\u202C';\n\t\t\t}\n\t\t\t// No strong directionality: do not wrap\n\t\t\treturn nodes[ 0 ];\n\t\t}\n\t} );\n}( jQuery ) );\n","module.exports = jQuery;","/*!\n * jQuery Internationalization library\n *\n * Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do\n * anything special to choose one license or the other and you don't have to\n * notify anyone which license you are using. You are free to use\n * UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar MessageParserEmitter = function () {\n\t\tthis.language = $.i18n.languages[ String.locale ] || $.i18n.languages[ 'default' ];\n\t};\n\n\tMessageParserEmitter.prototype = {\n\t\tconstructor: MessageParserEmitter,\n\n\t\t/**\n\t\t * (We put this method definition here, and not in prototype, to make\n\t\t * sure it's not overwritten by any magic.) Walk entire node structure,\n\t\t * applying replacements and template functions when appropriate\n\t\t *\n\t\t * @param {Mixed} node abstract syntax tree (top node or subnode)\n\t\t * @param {Array} replacements for $1, $2, ... $n\n\t\t * @return {Mixed} single-string node or array of nodes suitable for\n\t\t * jQuery appending.\n\t\t */\n\t\temit: function ( node, replacements ) {\n\t\t\tvar ret, subnodes, operation,\n\t\t\t\tmessageParserEmitter = this;\n\n\t\t\tswitch ( typeof node ) {\n\t\t\t\tcase 'string':\n\t\t\t\tcase 'number':\n\t\t\t\t\tret = node;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'object':\n\t\t\t\t// node is an array of nodes\n\t\t\t\t\tsubnodes = $.map( node.slice( 1 ), function ( n ) {\n\t\t\t\t\t\treturn messageParserEmitter.emit( n, replacements );\n\t\t\t\t\t} );\n\n\t\t\t\t\toperation = node[ 0 ].toLowerCase();\n\n\t\t\t\t\tif ( typeof messageParserEmitter[ operation ] === 'function' ) {\n\t\t\t\t\t\tret = messageParserEmitter[ operation ]( subnodes, replacements );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error( 'unknown operation \"' + operation + '\"' );\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'undefined':\n\t\t\t\t// Parsing the empty string (as an entire expression, or as a\n\t\t\t\t// paramExpression in a template) results in undefined\n\t\t\t\t// Perhaps a more clever parser can detect this, and return the\n\t\t\t\t// empty string? Or is that useful information?\n\t\t\t\t// The logical thing is probably to return the empty string here\n\t\t\t\t// when we encounter undefined.\n\t\t\t\t\tret = '';\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'unexpected type in AST: ' + typeof node );\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t/**\n\t\t * Parsing has been applied depth-first we can assume that all nodes\n\t\t * here are single nodes Must return a single node to parents -- a\n\t\t * jQuery with synthetic span However, unwrap any other synthetic spans\n\t\t * in our children and pass them upwards\n\t\t *\n\t\t * @param {Array} nodes Mixed, some single nodes, some arrays of nodes.\n\t\t * @return {string}\n\t\t */\n\t\tconcat: function ( nodes ) {\n\t\t\tvar result = '';\n\n\t\t\t$.each( nodes, function ( i, node ) {\n\t\t\t\t// strings, integers, anything else\n\t\t\t\tresult += node;\n\t\t\t} );\n\n\t\t\treturn result;\n\t\t},\n\n\t\t/**\n\t\t * Return escaped replacement of correct index, or string if\n\t\t * unavailable. Note that we expect the parsed parameter to be\n\t\t * zero-based. i.e. $1 should have become [ 0 ]. if the specified\n\t\t * parameter is not found return the same string (e.g. \"$99\" ->\n\t\t * parameter 98 -> not found -> return \"$99\" ) TODO throw error if\n\t\t * nodes.length > 1 ?\n\t\t *\n\t\t * @param {Array} nodes One element, integer, n >= 0\n\t\t * @param {Array} replacements for $1, $2, ... $n\n\t\t * @return {string} replacement\n\t\t */\n\t\treplace: function ( nodes, replacements ) {\n\t\t\tvar index = parseInt( nodes[ 0 ], 10 );\n\n\t\t\tif ( index < replacements.length ) {\n\t\t\t\t// replacement is not a string, don't touch!\n\t\t\t\treturn replacements[ index ];\n\t\t\t} else {\n\t\t\t\t// index not found, fallback to displaying variable\n\t\t\t\treturn '$' + ( index + 1 );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Transform parsed structure into pluralization n.b. The first node may\n\t\t * be a non-integer (for instance, a string representing an Arabic\n\t\t * number). So convert it back with the current language's\n\t\t * convertNumber.\n\t\t *\n\t\t * @param {Array} nodes List [ {String|Number}, {String}, {String} ... ]\n\t\t * @return {string} selected pluralized form according to current\n\t\t * language.\n\t\t */\n\t\tplural: function ( nodes ) {\n\t\t\tvar count = parseFloat( this.language.convertNumber( nodes[ 0 ], 10 ) ),\n\t\t\t\tforms = nodes.slice( 1 );\n\n\t\t\treturn forms.length ? this.language.convertPlural( count, forms ) : '';\n\t\t},\n\n\t\t/**\n\t\t * Transform parsed structure into gender Usage\n\t\t * {{gender:gender|masculine|feminine|neutral}}.\n\t\t *\n\t\t * @param {Array} nodes List [ {String}, {String}, {String} , {String} ]\n\t\t * @return {string} selected gender form according to current language\n\t\t */\n\t\tgender: function ( nodes ) {\n\t\t\tvar gender = nodes[ 0 ],\n\t\t\t\tforms = nodes.slice( 1 );\n\n\t\t\treturn this.language.gender( gender, forms );\n\t\t},\n\n\t\t/**\n\t\t * Transform parsed structure into grammar conversion. Invoked by\n\t\t * putting {{grammar:form|word}} in a message\n\t\t *\n\t\t * @param {Array} nodes List [{Grammar case eg: genitive}, {String word}]\n\t\t * @return {string} selected grammatical form according to current\n\t\t * language.\n\t\t */\n\t\tgrammar: function ( nodes ) {\n\t\t\tvar form = nodes[ 0 ],\n\t\t\t\tword = nodes[ 1 ];\n\n\t\t\treturn word && form && this.language.convertGrammar( word, form );\n\t\t}\n\t};\n\n\t$.extend( $.i18n.parser.emitter, new MessageParserEmitter() );\n}( jQuery ) );\n","/*!\n * jQuery Internationalization library\n *\n * Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do\n * anything special to choose one license or the other and you don't have to\n * notify anyone which license you are using. You are free to use\n * UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar MessageParser = function ( options ) {\n\t\tthis.options = $.extend( {}, $.i18n.parser.defaults, options );\n\t\tthis.language = $.i18n.languages[ String.locale ] || $.i18n.languages[ 'default' ];\n\t\tthis.emitter = $.i18n.parser.emitter;\n\t};\n\n\tMessageParser.prototype = {\n\n\t\tconstructor: MessageParser,\n\n\t\tsimpleParse: function ( message, parameters ) {\n\t\t\treturn message.replace( /\\$(\\d+)/g, function ( str, match ) {\n\t\t\t\tvar index = parseInt( match, 10 ) - 1;\n\n\t\t\t\treturn parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;\n\t\t\t} );\n\t\t},\n\n\t\tparse: function ( message, replacements ) {\n\t\t\tif ( message.indexOf( '{{' ) < 0 ) {\n\t\t\t\treturn this.simpleParse( message, replacements );\n\t\t\t}\n\n\t\t\tthis.emitter.language = $.i18n.languages[ $.i18n().locale ] ||\n\t\t\t\t$.i18n.languages[ 'default' ];\n\n\t\t\treturn this.emitter.emit( this.ast( message ), replacements );\n\t\t},\n\n\t\tast: function ( message ) {\n\t\t\tvar pipe, colon, backslash, anyCharacter, dollar, digits, regularLiteral,\n\t\t\t\tregularLiteralWithoutBar, regularLiteralWithoutSpace, escapedOrLiteralWithoutBar,\n\t\t\t\tescapedOrRegularLiteral, templateContents, templateName, openTemplate,\n\t\t\t\tcloseTemplate, expression, paramExpression, result,\n\t\t\t\tpos = 0;\n\n\t\t\t// Try parsers until one works, if none work return null\n\t\t\tfunction choice( parserSyntax ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar i, result;\n\n\t\t\t\t\tfor ( i = 0; i < parserSyntax.length; i++ ) {\n\t\t\t\t\t\tresult = parserSyntax[ i ]();\n\n\t\t\t\t\t\tif ( result !== null ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Try several parserSyntax-es in a row.\n\t\t\t// All must succeed; otherwise, return null.\n\t\t\t// This is the only eager one.\n\t\t\tfunction sequence( parserSyntax ) {\n\t\t\t\tvar i, res,\n\t\t\t\t\toriginalPos = pos,\n\t\t\t\t\tresult = [];\n\n\t\t\t\tfor ( i = 0; i < parserSyntax.length; i++ ) {\n\t\t\t\t\tres = parserSyntax[ i ]();\n\n\t\t\t\t\tif ( res === null ) {\n\t\t\t\t\t\tpos = originalPos;\n\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tresult.push( res );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t// Run the same parser over and over until it fails.\n\t\t\t// Must succeed a minimum of n times; otherwise, return null.\n\t\t\tfunction nOrMore( n, p ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar originalPos = pos,\n\t\t\t\t\t\tresult = [],\n\t\t\t\t\t\tparsed = p();\n\n\t\t\t\t\twhile ( parsed !== null ) {\n\t\t\t\t\t\tresult.push( parsed );\n\t\t\t\t\t\tparsed = p();\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( result.length < n ) {\n\t\t\t\t\t\tpos = originalPos;\n\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Helpers -- just make parserSyntax out of simpler JS builtin types\n\n\t\t\tfunction makeStringParser( s ) {\n\t\t\t\tvar len = s.length;\n\n\t\t\t\treturn function () {\n\t\t\t\t\tvar result = null;\n\n\t\t\t\t\tif ( message.slice( pos, pos + len ) === s ) {\n\t\t\t\t\t\tresult = s;\n\t\t\t\t\t\tpos += len;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfunction makeRegexParser( regex ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar matches = message.slice( pos ).match( regex );\n\n\t\t\t\t\tif ( matches === null ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tpos += matches[ 0 ].length;\n\n\t\t\t\t\treturn matches[ 0 ];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tpipe = makeStringParser( '|' );\n\t\t\tcolon = makeStringParser( ':' );\n\t\t\tbackslash = makeStringParser( '\\\\' );\n\t\t\tanyCharacter = makeRegexParser( /^./ );\n\t\t\tdollar = makeStringParser( '$' );\n\t\t\tdigits = makeRegexParser( /^\\d+/ );\n\t\t\tregularLiteral = makeRegexParser( /^[^{}[\\]$\\\\]/ );\n\t\t\tregularLiteralWithoutBar = makeRegexParser( /^[^{}[\\]$\\\\|]/ );\n\t\t\tregularLiteralWithoutSpace = makeRegexParser( /^[^{}[\\]$\\s]/ );\n\n\t\t\t// There is a general pattern:\n\t\t\t// parse a thing;\n\t\t\t// if it worked, apply transform,\n\t\t\t// otherwise return null.\n\t\t\t// But using this as a combinator seems to cause problems\n\t\t\t// when combined with nOrMore().\n\t\t\t// May be some scoping issue.\n\t\t\tfunction transform( p, fn ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar result = p();\n\n\t\t\t\t\treturn result === null ? null : fn( result );\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Used to define \"literals\" within template parameters. The pipe\n\t\t\t// character is the parameter delimeter, so by default\n\t\t\t// it is not a literal in the parameter\n\t\t\tfunction literalWithoutBar() {\n\t\t\t\tvar result = nOrMore( 1, escapedOrLiteralWithoutBar )();\n\n\t\t\t\treturn result === null ? null : result.join( '' );\n\t\t\t}\n\n\t\t\tfunction literal() {\n\t\t\t\tvar result = nOrMore( 1, escapedOrRegularLiteral )();\n\n\t\t\t\treturn result === null ? null : result.join( '' );\n\t\t\t}\n\n\t\t\tfunction escapedLiteral() {\n\t\t\t\tvar result = sequence( [ backslash, anyCharacter ] );\n\n\t\t\t\treturn result === null ? null : result[ 1 ];\n\t\t\t}\n\n\t\t\tchoice( [ escapedLiteral, regularLiteralWithoutSpace ] );\n\t\t\tescapedOrLiteralWithoutBar = choice( [ escapedLiteral, regularLiteralWithoutBar ] );\n\t\t\tescapedOrRegularLiteral = choice( [ escapedLiteral, regularLiteral ] );\n\n\t\t\tfunction replacement() {\n\t\t\t\tvar result = sequence( [ dollar, digits ] );\n\n\t\t\t\tif ( result === null ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn [ 'REPLACE', parseInt( result[ 1 ], 10 ) - 1 ];\n\t\t\t}\n\n\t\t\ttemplateName = transform(\n\t\t\t\t// see $wgLegalTitleChars\n\t\t\t\t// not allowing : due to the need to catch \"PLURAL:$1\"\n\t\t\t\tmakeRegexParser( /^[ !\"$&'()*,./0-9;=?@A-Z^_`a-z~\\x80-\\xFF+-]+/ ),\n\n\t\t\t\tfunction ( result ) {\n\t\t\t\t\treturn result.toString();\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tfunction templateParam() {\n\t\t\t\tvar expr,\n\t\t\t\t\tresult = sequence( [ pipe, nOrMore( 0, paramExpression ) ] );\n\n\t\t\t\tif ( result === null ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\texpr = result[ 1 ];\n\n\t\t\t\t// use a \"CONCAT\" operator if there are multiple nodes,\n\t\t\t\t// otherwise return the first node, raw.\n\t\t\t\treturn expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[ 0 ];\n\t\t\t}\n\n\t\t\tfunction templateWithReplacement() {\n\t\t\t\tvar result = sequence( [ templateName, colon, replacement ] );\n\n\t\t\t\treturn result === null ? null : [ result[ 0 ], result[ 2 ] ];\n\t\t\t}\n\n\t\t\tfunction templateWithOutReplacement() {\n\t\t\t\tvar result = sequence( [ templateName, colon, paramExpression ] );\n\n\t\t\t\treturn result === null ? null : [ result[ 0 ], result[ 2 ] ];\n\t\t\t}\n\n\t\t\ttemplateContents = choice( [\n\t\t\t\tfunction () {\n\t\t\t\t\tvar res = sequence( [\n\t\t\t\t\t\t// templates can have placeholders for dynamic\n\t\t\t\t\t\t// replacement eg: {{PLURAL:$1|one car|$1 cars}}\n\t\t\t\t\t\t// or no placeholders eg:\n\t\t\t\t\t\t// {{GRAMMAR:genitive|{{SITENAME}}}\n\t\t\t\t\t\tchoice( [ templateWithReplacement, templateWithOutReplacement ] ),\n\t\t\t\t\t\tnOrMore( 0, templateParam )\n\t\t\t\t\t] );\n\n\t\t\t\t\treturn res === null ? null : res[ 0 ].concat( res[ 1 ] );\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tvar res = sequence( [ templateName, nOrMore( 0, templateParam ) ] );\n\n\t\t\t\t\tif ( res === null ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [ res[ 0 ] ].concat( res[ 1 ] );\n\t\t\t\t}\n\t\t\t] );\n\n\t\t\topenTemplate = makeStringParser( '{{' );\n\t\t\tcloseTemplate = makeStringParser( '}}' );\n\n\t\t\tfunction template() {\n\t\t\t\tvar result = sequence( [ openTemplate, templateContents, closeTemplate ] );\n\n\t\t\t\treturn result === null ? null : result[ 1 ];\n\t\t\t}\n\n\t\t\texpression = choice( [ template, replacement, literal ] );\n\t\t\tparamExpression = choice( [ template, replacement, literalWithoutBar ] );\n\n\t\t\tfunction start() {\n\t\t\t\tvar result = nOrMore( 0, expression )();\n\n\t\t\t\tif ( result === null ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn [ 'CONCAT' ].concat( result );\n\t\t\t}\n\n\t\t\tresult = start();\n\n\t\t\t/*\n\t\t\t * For success, the pos must have gotten to the end of the input\n\t\t\t * and returned a non-null.\n\t\t\t * n.b. This is part of language infrastructure, so we do not throw an\n\t\t\t * internationalizable message.\n\t\t\t */\n\t\t\tif ( result === null || pos !== message.length ) {\n\t\t\t\tthrow new Error( 'Parse error at position ' + pos.toString() + ' in input: ' + message );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t};\n\n\t$.extend( $.i18n.parser, new MessageParser() );\n}( jQuery ) );","/*!\n * jQuery Internationalization library - Message Store\n *\n * Copyright (C) 2012 Santhosh Thottingal\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to\n * choose one license or the other and you don't have to notify anyone which license you are using.\n * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar MessageStore = function () {\n\t\tthis.messages = {};\n\t\tthis.sources = {};\n\t};\n\n\tfunction jsonMessageLoader( url ) {\n\t\tvar deferred = $.Deferred();\n\n\t\t$.getJSON( url )\n\t\t\t.done( deferred.resolve )\n\t\t\t.fail( function ( jqxhr, settings, exception ) {\n\t\t\t\t$.i18n.log( 'Error in loading messages from ' + url + ' Exception: ' + exception );\n\t\t\t\t// Ignore 404 exception, because we are handling fallabacks explicitly\n\t\t\t\tdeferred.resolve();\n\t\t\t} );\n\n\t\treturn deferred.promise();\n\t}\n\n\t/**\n\t * See https://github.com/wikimedia/jquery.i18n/wiki/Specification#wiki-Message_File_Loading\n\t */\n\tMessageStore.prototype = {\n\n\t\t/**\n\t\t * General message loading API This can take a URL string for\n\t\t * the json formatted messages.\n\t\t * load('path/to/all_localizations.json');\n\t\t *\n\t\t * This can also load a localization file for a locale \n\t\t * load( 'path/to/de-messages.json', 'de' );\n\t\t * \n\t\t * A data object containing message key- message translation mappings\n\t\t * can also be passed Eg:\n\t\t * \n\t\t * load( { 'hello' : 'Hello' }, optionalLocale );\n\t\t * If the data argument is\n\t\t * null/undefined/false,\n\t\t * all cached messages for the i18n instance will get reset.\n\t\t *\n\t\t * @param {string|Object} source\n\t\t * @param {string} locale Language tag\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\tload: function ( source, locale ) {\n\t\t\tvar key = null,\n\t\t\t\tdeferred = null,\n\t\t\t\tdeferreds = [],\n\t\t\t\tmessageStore = this;\n\n\t\t\tif ( typeof source === 'string' ) {\n\t\t\t\t// This is a URL to the messages file.\n\t\t\t\t$.i18n.log( 'Loading messages from: ' + source );\n\t\t\t\tdeferred = jsonMessageLoader( source )\n\t\t\t\t\t.done( function ( localization ) {\n\t\t\t\t\t\tmessageStore.set( locale, localization );\n\t\t\t\t\t} );\n\n\t\t\t\treturn deferred.promise();\n\t\t\t}\n\n\t\t\tif ( locale ) {\n\t\t\t\t// source is an key-value pair of messages for given locale\n\t\t\t\tmessageStore.set( locale, source );\n\n\t\t\t\treturn $.Deferred().resolve();\n\t\t\t} else {\n\t\t\t\t// source is a key-value pair of locales and their source\n\t\t\t\tfor ( key in source ) {\n\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, key ) ) {\n\t\t\t\t\t\tlocale = key;\n\t\t\t\t\t\t// No {locale} given, assume data is a group of languages,\n\t\t\t\t\t\t// call this function again for each language.\n\t\t\t\t\t\tdeferreds.push( messageStore.load( source[ key ], locale ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $.when.apply( $, deferreds );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Set messages to the given locale.\n\t\t * If locale exists, add messages to the locale.\n\t\t *\n\t\t * @param {string} locale\n\t\t * @param {Object} messages\n\t\t */\n\t\tset: function ( locale, messages ) {\n\t\t\tif ( !this.messages[ locale ] ) {\n\t\t\t\tthis.messages[ locale ] = messages;\n\t\t\t} else {\n\t\t\t\tthis.messages[ locale ] = $.extend( this.messages[ locale ], messages );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t *\n\t\t * @param {string} locale\n\t\t * @param {string} messageKey\n\t\t * @return {boolean}\n\t\t */\n\t\tget: function ( locale, messageKey ) {\n\t\t\treturn this.messages[ locale ] && this.messages[ locale ][ messageKey ];\n\t\t}\n\t};\n\n\t$.extend( $.i18n.messageStore, new MessageStore() );\n}( jQuery ) );\n","/*!\n * jQuery Internationalization library\n *\n * Copyright (C) 2012 Santhosh Thottingal\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do\n * anything special to choose one license or the other and you don't have to\n * notify anyone which license you are using. You are free to use\n * UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar I18N,\n\t\tslice = Array.prototype.slice;\n\t/**\n\t * @constructor\n\t * @param {Object} options\n\t */\n\tI18N = function ( options ) {\n\t\t// Load defaults\n\t\tthis.options = $.extend( {}, I18N.defaults, options );\n\n\t\tthis.parser = this.options.parser;\n\t\tthis.locale = this.options.locale;\n\t\tthis.messageStore = this.options.messageStore;\n\t\tthis.languages = {};\n\t};\n\n\tI18N.prototype = {\n\t\t/**\n\t\t * Localize a given messageKey to a locale.\n\t\t * @param {String} messageKey\n\t\t * @return {String} Localized message\n\t\t */\n\t\tlocalize: function ( messageKey ) {\n\t\t\tvar localeParts, localePartIndex, locale, fallbackIndex,\n\t\t\t\ttryingLocale, message;\n\n\t\t\tlocale = this.locale;\n\t\t\tfallbackIndex = 0;\n\n\t\t\twhile ( locale ) {\n\t\t\t\t// Iterate through locales starting at most-specific until\n\t\t\t\t// localization is found. As in fi-Latn-FI, fi-Latn and fi.\n\t\t\t\tlocaleParts = locale.split( '-' );\n\t\t\t\tlocalePartIndex = localeParts.length;\n\n\t\t\t\tdo {\n\t\t\t\t\ttryingLocale = localeParts.slice( 0, localePartIndex ).join( '-' );\n\t\t\t\t\tmessage = this.messageStore.get( tryingLocale, messageKey );\n\n\t\t\t\t\tif ( message ) {\n\t\t\t\t\t\treturn message;\n\t\t\t\t\t}\n\n\t\t\t\t\tlocalePartIndex--;\n\t\t\t\t} while ( localePartIndex );\n\n\t\t\t\tif ( locale === 'en' ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tlocale = ( $.i18n.fallbacks[ this.locale ] &&\n\t\t\t\t\t\t$.i18n.fallbacks[ this.locale ][ fallbackIndex ] ) ||\n\t\t\t\t\t\tthis.options.fallbackLocale;\n\t\t\t\t$.i18n.log( 'Trying fallback locale for ' + this.locale + ': ' + locale + ' (' + messageKey + ')' );\n\n\t\t\t\tfallbackIndex++;\n\t\t\t}\n\n\t\t\t// key not found\n\t\t\treturn '';\n\t\t},\n\n\t\t/*\n\t\t * Destroy the i18n instance.\n\t\t */\n\t\tdestroy: function () {\n\t\t\t$.removeData( document, 'i18n' );\n\t\t},\n\n\t\t/**\n\t\t * General message loading API This can take a URL string for\n\t\t * the json formatted messages. Example:\n\t\t * load('path/to/all_localizations.json');\n\t\t *\n\t\t * To load a localization file for a locale:\n\t\t * \n\t\t * load('path/to/de-messages.json', 'de' );\n\t\t * \n\t\t *\n\t\t * To load a localization file from a directory:\n\t\t * \n\t\t * load('path/to/i18n/directory', 'de' );\n\t\t * \n\t\t * The above method has the advantage of fallback resolution.\n\t\t * ie, it will automatically load the fallback locales for de.\n\t\t * For most usecases, this is the recommended method.\n\t\t * It is optional to have trailing slash at end.\n\t\t *\n\t\t * A data object containing message key- message translation mappings\n\t\t * can also be passed. Example:\n\t\t * \n\t\t * load( { 'hello' : 'Hello' }, optionalLocale );\n\t\t * \n\t\t *\n\t\t * A source map containing key-value pair of languagename and locations\n\t\t * can also be passed. Example:\n\t\t * \n\t\t * load( {\n\t\t * bn: 'i18n/bn.json',\n\t\t * he: 'i18n/he.json',\n\t\t * en: 'i18n/en.json'\n\t\t * } )\n\t\t * \n\t\t *\n\t\t * If the data argument is null/undefined/false,\n\t\t * all cached messages for the i18n instance will get reset.\n\t\t *\n\t\t * @param {string|Object} source\n\t\t * @param {string} locale Language tag\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\tload: function ( source, locale ) {\n\t\t\tvar fallbackLocales, locIndex, fallbackLocale, sourceMap = {};\n\t\t\tif ( !source && !locale ) {\n\t\t\t\tsource = 'i18n/' + $.i18n().locale + '.json';\n\t\t\t\tlocale = $.i18n().locale;\n\t\t\t}\n\t\t\tif ( typeof source === 'string' &&\n\t\t\t\t// source extension should be json, but can have query params after that.\n\t\t\t\tsource.split( '?' )[ 0 ].split( '.' ).pop() !== 'json'\n\t\t\t) {\n\t\t\t\t// Load specified locale then check for fallbacks when directory is\n\t\t\t\t// specified in load()\n\t\t\t\tsourceMap[ locale ] = source + '/' + locale + '.json';\n\t\t\t\tfallbackLocales = ( $.i18n.fallbacks[ locale ] || [] )\n\t\t\t\t\t.concat( this.options.fallbackLocale );\n\t\t\t\tfor ( locIndex = 0; locIndex < fallbackLocales.length; locIndex++ ) {\n\t\t\t\t\tfallbackLocale = fallbackLocales[ locIndex ];\n\t\t\t\t\tsourceMap[ fallbackLocale ] = source + '/' + fallbackLocale + '.json';\n\t\t\t\t}\n\t\t\t\treturn this.load( sourceMap );\n\t\t\t} else {\n\t\t\t\treturn this.messageStore.load( source, locale );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Does parameter and magic word substitution.\n\t\t *\n\t\t * @param {string} key Message key\n\t\t * @param {Array} parameters Message parameters\n\t\t * @return {string}\n\t\t */\n\t\tparse: function ( key, parameters ) {\n\t\t\tvar message = this.localize( key );\n\t\t\t// FIXME: This changes the state of the I18N object,\n\t\t\t// should probably not change the 'this.parser' but just\n\t\t\t// pass it to the parser.\n\t\t\tthis.parser.language = $.i18n.languages[ $.i18n().locale ] || $.i18n.languages[ 'default' ];\n\t\t\tif ( message === '' ) {\n\t\t\t\tmessage = key;\n\t\t\t}\n\t\t\treturn this.parser.parse( message, parameters );\n\t\t}\n\t};\n\n\t/**\n\t * Process a message from the $.I18N instance\n\t * for the current document, stored in jQuery.data(document).\n\t *\n\t * @param {string} key Key of the message.\n\t * @param {string} param1 [param...] Variadic list of parameters for {key}.\n\t * @return {string|$.I18N} Parsed message, or if no key was given\n\t * the instance of $.I18N is returned.\n\t */\n\t$.i18n = function ( key, param1 ) {\n\t\tvar parameters,\n\t\t\ti18n = $.data( document, 'i18n' ),\n\t\t\toptions = typeof key === 'object' && key;\n\n\t\t// If the locale option for this call is different then the setup so far,\n\t\t// update it automatically. This doesn't just change the context for this\n\t\t// call but for all future call as well.\n\t\t// If there is no i18n setup yet, don't do this. It will be taken care of\n\t\t// by the `new I18N` construction below.\n\t\t// NOTE: It should only change language for this one call.\n\t\t// Then cache instances of I18N somewhere.\n\t\tif ( options && options.locale && i18n && i18n.locale !== options.locale ) {\n\t\t\ti18n.locale = options.locale;\n\t\t}\n\n\t\tif ( !i18n ) {\n\t\t\ti18n = new I18N( options );\n\t\t\t$.data( document, 'i18n', i18n );\n\t\t}\n\n\t\tif ( typeof key === 'string' ) {\n\t\t\tif ( param1 !== undefined ) {\n\t\t\t\tparameters = slice.call( arguments, 1 );\n\t\t\t} else {\n\t\t\t\tparameters = [];\n\t\t\t}\n\n\t\t\treturn i18n.parse( key, parameters );\n\t\t} else {\n\t\t\t// FIXME: remove this feature/bug.\n\t\t\treturn i18n;\n\t\t}\n\t};\n\n\t$.fn.i18n = function () {\n\t\tvar i18n = $.data( document, 'i18n' );\n\n\t\tif ( !i18n ) {\n\t\t\ti18n = new I18N();\n\t\t\t$.data( document, 'i18n', i18n );\n\t\t}\n\n\t\treturn this.each( function () {\n\t\t\tvar $this = $( this ),\n\t\t\t\tmessageKey = $this.data( 'i18n' ),\n\t\t\t\tlBracket, rBracket, type, key;\n\n\t\t\tif ( messageKey ) {\n\t\t\t\tlBracket = messageKey.indexOf( '[' );\n\t\t\t\trBracket = messageKey.indexOf( ']' );\n\t\t\t\tif ( lBracket !== -1 && rBracket !== -1 && lBracket < rBracket ) {\n\t\t\t\t\ttype = messageKey.slice( lBracket + 1, rBracket );\n\t\t\t\t\tkey = messageKey.slice( rBracket + 1 );\n\t\t\t\t\tif ( type === 'html' ) {\n\t\t\t\t\t\t$this.html( i18n.parse( key ) );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$this.attr( type, i18n.parse( key ) );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$this.text( i18n.parse( messageKey ) );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$this.find( '[data-i18n]' ).i18n();\n\t\t\t}\n\t\t} );\n\t};\n\n\tfunction getDefaultLocale() {\n\t\tvar nav, locale = $( 'html' ).attr( 'lang' );\n\n\t\tif ( !locale ) {\n\t\t\tif ( typeof window.navigator !== undefined ) {\n\t\t\t\tnav = window.navigator;\n\t\t\t\tlocale = nav.language || nav.userLanguage || '';\n\t\t\t} else {\n\t\t\t\tlocale = '';\n\t\t\t}\n\t\t}\n\t\treturn locale;\n\t}\n\n\t$.i18n.languages = {};\n\t$.i18n.messageStore = $.i18n.messageStore || {};\n\t$.i18n.parser = {\n\t\t// The default parser only handles variable substitution\n\t\tparse: function ( message, parameters ) {\n\t\t\treturn message.replace( /\\$(\\d+)/g, function ( str, match ) {\n\t\t\t\tvar index = parseInt( match, 10 ) - 1;\n\t\t\t\treturn parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;\n\t\t\t} );\n\t\t},\n\t\temitter: {}\n\t};\n\t$.i18n.fallbacks = {};\n\t$.i18n.debug = false;\n\t$.i18n.log = function ( /* arguments */ ) {\n\t\tif ( window.console && $.i18n.debug ) {\n\t\t\twindow.console.log.apply( window.console, arguments );\n\t\t}\n\t};\n\t/* Static members */\n\tI18N.defaults = {\n\t\tlocale: getDefaultLocale(),\n\t\tfallbackLocale: 'en',\n\t\tparser: $.i18n.parser,\n\t\tmessageStore: $.i18n.messageStore\n\t};\n\n\t// Expose constructor\n\t$.i18n.constructor = I18N;\n}( jQuery ) );","/*!\n * jQuery idleTimer plugin\n * version 0.9.100511\n * by Paul Irish.\n * http://github.com/paulirish/yui-misc/tree/\n * MIT license\n\n * adapted from YUI idle timer by nzakas:\n * http://github.com/nzakas/yui-misc/\n*/\n/*\n * Copyright (c) 2009 Nicholas C. Zakas\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/* updated to fix Chrome setTimeout issue by Zaid Zawaideh */\n\n // API available in <= v0.8\n /*******************************\n\n // idleTimer() takes an optional argument that defines the idle timeout\n // timeout is in milliseconds; defaults to 30000\n $.idleTimer(10000);\n\n\n $(document).bind(\"idle.idleTimer\", function(){\n // function you want to fire when the user goes idle\n });\n\n\n $(document).bind(\"active.idleTimer\", function(){\n // function you want to fire when the user becomes active again\n });\n\n // pass the string 'destroy' to stop the timer\n $.idleTimer('destroy');\n\n // you can query if the user is idle or not with data()\n $.data(document,'idleTimer'); // 'idle' or 'active'\n\n // you can get time elapsed since user when idle/active\n $.idleTimer('getElapsedTime'); // time since state change in ms\n\n ********/\n\n\n\n // API available in >= v0.9\n /*************************\n\n // bind to specific elements, allows for multiple timer instances\n $(elem).idleTimer(timeout|'destroy'|'getElapsedTime');\n $.data(elem,'idleTimer'); // 'idle' or 'active'\n\n // if you're using the old $.idleTimer api, you should not do $(document).idleTimer(...)\n\n // element bound timers will only watch for events inside of them.\n // you may just want page-level activity, in which case you may set up\n // your timers on document, document.documentElement, and document.body\n\n // You can optionally provide a second argument to override certain options.\n // Here are the defaults, so you can omit any or all of them.\n $(elem).idleTimer(timeout, {\n startImmediately: true, //starts a timeout as soon as the timer is set up; otherwise it waits for the first event.\n idle: false, //indicates if the user is idle\n enabled: true, //indicates if the idle timer is enabled\n events: 'mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove' // activity is one of these events\n });\n\n ********/\n\n(function($){\n\n$.idleTimer = function(newTimeout, elem, opts){\n\n // defaults that are to be stored as instance props on the elem\n\n\topts = $.extend({\n\t\tstartImmediately: true, //starts a timeout as soon as the timer is set up\n\t\tidle: false, //indicates if the user is idle\n\t\tenabled: true, //indicates if the idle timer is enabled\n\t\ttimeout: 30000, //the amount of time (ms) before the user is considered idle\n\t\tevents: 'mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove' // activity is one of these events\n\t}, opts);\n\n\n elem = elem || document;\n\n /* (intentionally not documented)\n * Toggles the idle state and fires an appropriate event.\n * @return {void}\n */\n var toggleIdleState = function(myelem){\n\n // curse you, mozilla setTimeout lateness bug!\n if (typeof myelem === 'number'){\n myelem = undefined;\n }\n\n var obj = $.data(myelem || elem,'idleTimerObj');\n\n //toggle the state\n obj.idle = !obj.idle;\n\n // reset timeout \n var elapsed = (+new Date()) - obj.olddate;\n obj.olddate = +new Date();\n\n // handle Chrome always triggering idle after js alert or comfirm popup\n if (obj.idle && (elapsed < opts.timeout)) {\n obj.idle = false;\n clearTimeout($.idleTimer.tId);\n if (opts.enabled)\n $.idleTimer.tId = setTimeout(toggleIdleState, opts.timeout);\n return;\n }\n \n //fire appropriate event\n\n // create a custom event, but first, store the new state on the element\n // and then append that string to a namespace\n var event = jQuery.Event( $.data(elem,'idleTimer', obj.idle ? \"idle\" : \"active\" ) + '.idleTimer' );\n\n // we do want this to bubble, at least as a temporary fix for jQuery 1.7\n // event.stopPropagation();\n $(elem).trigger(event);\n },\n\n /**\n * Stops the idle timer. This removes appropriate event handlers\n * and cancels any pending timeouts.\n * @return {void}\n * @method stop\n * @static\n */\n stop = function(elem){\n\n var obj = $.data(elem,'idleTimerObj') || {};\n\n //set to disabled\n obj.enabled = false;\n\n //clear any pending timeouts\n clearTimeout(obj.tId);\n\n //detach the event handlers\n $(elem).off('.idleTimer');\n },\n\n\n /* (intentionally not documented)\n * Handles a user event indicating that the user isn't idle.\n * @param {Event} event A DOM2-normalized event object.\n * @return {void}\n */\n handleUserEvent = function(){\n\n var obj = $.data(this,'idleTimerObj');\n\n //clear any existing timeout\n clearTimeout(obj.tId);\n\n\n\n //if the idle timer is enabled\n if (obj.enabled){\n\n\n //if it's idle, that means the user is no longer idle\n if (obj.idle){\n toggleIdleState(this);\n }\n\n //set a new timeout\n obj.tId = setTimeout(toggleIdleState, obj.timeout);\n\n }\n };\n\n\n /**\n * Starts the idle timer. This adds appropriate event handlers\n * and starts the first timeout.\n * @param {int} newTimeout (Optional) A new value for the timeout period in ms.\n * @return {void}\n * @method $.idleTimer\n * @static\n */\n\n\n var obj = $.data(elem,'idleTimerObj') || {};\n\n obj.olddate = obj.olddate || +new Date();\n\n //assign a new timeout if necessary\n if (typeof newTimeout === \"number\"){\n opts.timeout = newTimeout;\n } else if (newTimeout === 'destroy') {\n stop(elem);\n return this;\n } else if (newTimeout === 'getElapsedTime'){\n return (+new Date()) - obj.olddate;\n }\n\n //assign appropriate event handlers\n $(elem).on($.trim((opts.events+' ').split(' ').join('.idleTimer ')),handleUserEvent);\n\n\n obj.idle = opts.idle;\n obj.enabled = opts.enabled;\n obj.timeout = opts.timeout;\n\n\n //set a timeout to toggle state. May wish to omit this in some situations\n\tif (opts.startImmediately) {\n\t obj.tId = setTimeout(toggleIdleState, obj.timeout);\n\t}\n\n // assume the user is active for the first x seconds.\n $.data(elem,'idleTimer',\"active\");\n\n // store our instance on the object\n $.data(elem,'idleTimerObj',obj);\n\n\n\n}; // end of $.idleTimer()\n\n\n// v0.9 API for defining multiple timers.\n$.fn.idleTimer = function(newTimeout,opts){\n\t// Allow omission of opts for backward compatibility\n\tif (!opts) {\n\t\topts = {};\n\t}\n\n if(this[0]){\n $.idleTimer(newTimeout,this[0],opts);\n }\n\n return this;\n};\n\n\n})(jQuery);\n","/*global variable declarations*/\n\n\"use strict\";\n\nimport \"../css/user-highlights.css\";\n\nfunction getCompletions() {\n // Get the completion status\n if (\n window.location.href.match(\n /(\\/index.html|toctree.html|genindex.html|navhelp.html|toc.html|assignments.html|Exercises.html)/\n )\n ) {\n return;\n }\n\n var currentPathname = window.location.pathname;\n if (currentPathname.indexOf(\"?\") !== -1) {\n currentPathname = currentPathname.substring(\n 0,\n currentPathname.lastIndexOf(\"?\")\n );\n }\n var data = {\n lastPageUrl: currentPathname,\n isPtxBook: isPreTeXt(),\n };\n jQuery\n .ajax({\n url: `${eBookConfig.new_server_prefix}/logger/getCompletionStatus`,\n data: data,\n async: false,\n })\n .done(function (data) {\n if (data != \"None\") {\n var completionData = data.detail;\n var completionClass, completionMsg;\n if (completionData[0].completionStatus == 1) {\n completionClass = \"buttonConfirmCompletion\";\n completionMsg =\n \" Completed. Well Done!\";\n } else {\n completionClass = \"buttonAskCompletion\";\n completionMsg = \"Mark as Completed\";\n }\n let scp = document.querySelector(\"#scprogresscontainer\");\n if (scp) {\n scp.classList.add(\"ptx-runestone-container\");\n }\n $(\"#scprogresscontainer\").append(\n '
    \"\n );\n }\n });\n}\n\nfunction showLastPositionBanner() {\n var lastPositionVal = $.getUrlVar(\"lastPosition\");\n if (typeof lastPositionVal !== \"undefined\") {\n $(\"body\").append(\n ''\n );\n $(\"html, body\").animate({ scrollTop: parseInt(lastPositionVal) }, 1000);\n }\n}\n\nfunction addNavigationAndCompletionButtons() {\n if (\n window.location.href.match(\n /(index.html|genindex.html|navhelp.html|toc.html|assignments.html|Exercises.html|toctree.html)/\n )\n ) {\n return;\n }\n var navLinkBgRightHiddenPosition = -$(\"#navLinkBgRight\").outerWidth() - 5;\n var navLinkBgRightHalfOpen;\n var navLinkBgRightFullOpen = 0;\n\n if ($(\"#completionButton\").hasClass(\"buttonAskCompletion\")) {\n navLinkBgRightHalfOpen = navLinkBgRightHiddenPosition + 70;\n } else if ($(\"#completionButton\").hasClass(\"buttonConfirmCompletion\")) {\n navLinkBgRightHalfOpen = 0;\n }\n var relationsNextIconInitialPosition = $(\"#relations-next\").css(\"right\");\n var relationsNextIconNewPosition = -(navLinkBgRightHiddenPosition + 35);\n\n $(\"#navLinkBgRight\").css(\"right\", navLinkBgRightHiddenPosition).show();\n var navBgShown = false;\n $(window).scroll(function () {\n if (\n $(window).scrollTop() + $(window).height() ==\n $(document).height()\n ) {\n $(\"#navLinkBgRight\").animate(\n { right: navLinkBgRightHalfOpen },\n 200\n );\n $(\"#navLinkBgLeft\").animate({ left: \"0px\" }, 200);\n if ($(\"#completionButton\").hasClass(\"buttonConfirmCompletion\")) {\n $(\"#relations-next\").animate(\n { right: relationsNextIconNewPosition },\n 200\n );\n }\n navBgShown = true;\n } else if (navBgShown) {\n $(\"#navLinkBgRight\").animate(\n { right: navLinkBgRightHiddenPosition },\n 200\n );\n $(\"#navLinkBgLeft\").animate({ left: \"-65px\" }, 200);\n $(\"#relations-next\").animate({\n right: relationsNextIconInitialPosition,\n });\n navBgShown = false;\n }\n });\n\n var completionFlag = 0;\n if ($(\"#completionButton\").hasClass(\"buttonAskCompletion\")) {\n completionFlag = 0;\n } else {\n completionFlag = 1;\n }\n // Make sure we mark this page as visited regardless of how flakey\n // the onunload handlers become.\n processPageState(completionFlag, true, false, false);\n $(\"#completionButton\").on(\"click\", function () {\n var markingComplete = false;\n var markingIncomplete = false;\n if ($(this).hasClass(\"buttonAskCompletion\")) {\n $(this)\n .removeClass(\"buttonAskCompletion\")\n .addClass(\"buttonConfirmCompletion\")\n .html(\n \" Completed. Well Done!\"\n );\n $(\"#navLinkBgRight\").animate({ right: navLinkBgRightFullOpen });\n $(\"#relations-next\").animate({\n right: relationsNextIconNewPosition,\n });\n navLinkBgRightHalfOpen = 0;\n completionFlag = 1;\n markingComplete = true;\n } else if ($(this).hasClass(\"buttonConfirmCompletion\")) {\n $(this)\n .removeClass(\"buttonConfirmCompletion\")\n .addClass(\"buttonAskCompletion\")\n .html(\"Mark as Completed\");\n navLinkBgRightHalfOpen = navLinkBgRightHiddenPosition + 70;\n $(\"#navLinkBgRight\").animate({ right: navLinkBgRightHalfOpen });\n $(\"#relations-next\").animate({\n right: relationsNextIconInitialPosition,\n });\n completionFlag = 0;\n markingIncomplete = true;\n }\n processPageState(\n completionFlag,\n false,\n markingComplete,\n markingIncomplete\n );\n });\n\n // we cannot afford to do this at both load and unload especially as users\n // go from page to page. This just doubles the load. So, try without this one.\n // $(window).on(\"beforeunload\", function (e) {\n // if (completionFlag == 0) {\n // processPageState(completionFlag, false, false, false);\n // }\n // });\n}\n\n// _ decorateTableOfContents\n// -------------------------\nfunction decorateTableOfContents() {\n if (\n window.location.href.toLowerCase().indexOf(\"toc.html\") != -1 ||\n window.location.href.toLowerCase().indexOf(\"index.html\") != -1 ||\n window.location.href.toLowerCase().indexOf(\"frontmatter\") != -1\n ) {\n if (!isPreTeXt()) {\n jQuery.get(\n `${eBookConfig.new_server_prefix}/logger/getAllCompletionStatus`,\n function (data) {\n var subChapterList;\n if (data != \"None\") {\n subChapterList = data.detail;\n\n var allSubChapterURLs = $(\"#main-content div li a\");\n $.each(subChapterList, function (index, item) {\n for (var s = 0; s < allSubChapterURLs.length; s++) {\n if (\n allSubChapterURLs[s].href.indexOf(\n item.chapterName +\n \"/\" +\n item.subChapterName\n ) != -1\n ) {\n if (item.completionStatus == 1) {\n $(allSubChapterURLs[s].parentElement)\n .addClass(\"completed\")\n .append(\n '- Completed this topic on ' +\n item.endDate +\n \"\"\n )\n .children()\n .first()\n .hover(\n function () {\n $(this)\n .next(\n \".infoTextCompleted\"\n )\n .show();\n },\n function () {\n $(this)\n .next(\n \".infoTextCompleted\"\n )\n .hide();\n }\n );\n } else if (item.completionStatus == 0) {\n $(allSubChapterURLs[s].parentElement)\n .addClass(\"active\")\n .append(\n 'Last read this topic on ' +\n item.endDate +\n \"\"\n )\n .children()\n .first()\n .hover(\n function () {\n $(this)\n .next(\".infoTextActive\")\n .show();\n },\n function () {\n $(this)\n .next(\".infoTextActive\")\n .hide();\n }\n );\n }\n }\n }\n });\n }\n }\n );\n }\n var data = { course: eBookConfig.course };\n jQuery.get(\n `${eBookConfig.new_server_prefix}/logger/getlastpage`,\n data,\n function (data) {\n var lastPageData;\n if (data != \"None\") {\n lastPageData = data.detail;\n if (lastPageData.lastPageChapter != null) {\n $(\"#continue-reading\")\n .show()\n .html(\n '
    '\n );\n }\n }\n }\n );\n }\n}\n\nfunction enableCompletions() {\n getCompletions();\n showLastPositionBanner();\n addNavigationAndCompletionButtons();\n decorateTableOfContents();\n}\n\n// call enable user highlights after login\n$(document).on(\"runestone:login\", enableCompletions);\n\nfunction isPreTeXt() {\n let ptxMarker = document.querySelector(\"body.pretext\");\n if (ptxMarker) {\n return true;\n } else {\n return false;\n }\n}\n// _ processPageState\n// -------------------------\nfunction processPageState(\n completionFlag,\n pageLoad,\n markingComplete,\n markingIncomplete\n) {\n /*Log last page visited*/\n var currentPathname = window.location.pathname;\n if (currentPathname.indexOf(\"?\") !== -1) {\n currentPathname = currentPathname.substring(\n 0,\n currentPathname.lastIndexOf(\"?\")\n );\n }\n // Is this a ptx book?\n let isPtxBook = isPreTeXt();\n var data = {\n lastPageUrl: currentPathname,\n lastPageScrollLocation: Math.round($(window).scrollTop()),\n completionFlag: completionFlag,\n pageLoad: pageLoad,\n markingComplete: markingComplete,\n markingIncomplete: markingIncomplete,\n course: eBookConfig.course,\n isPtxBook: isPtxBook,\n };\n $(document).ajaxError(function (e, jqhxr, settings, exception) {\n console.log(\"Request Failed for \" + settings.url);\n console.log(e);\n });\n jQuery.ajax({\n url: `${eBookConfig.new_server_prefix}/logger/updatelastpage`,\n contentType: \"application/json; charset=utf-8\",\n dataType: \"json\",\n data: JSON.stringify(data),\n method: \"POST\",\n async: true,\n });\n}\n\n$.extend({\n getUrlVars: function () {\n var vars = [],\n hash;\n var hashes = window.location.search\n .slice(window.location.search.indexOf(\"?\") + 1)\n .split(\"&\");\n for (var i = 0; i < hashes.length; i++) {\n hash = hashes[i].split(\"=\");\n vars.push(hash[0]);\n vars[hash[0]] = hash[1];\n }\n return vars;\n },\n getUrlVar: function (name) {\n return $.getUrlVars()[name];\n },\n});\n","/*\n Support functions for PreTeXt books running on Runestone\n\n*/\n\nimport RunestoneBase from \"./runestonebase.js\";\n\nfunction setupPTXEvents() {\n let rb = new RunestoneBase();\n // log an event when a knowl is opened.\n document.querySelectorAll(\"[data-knowl]\").forEach((el) => {\n el.addEventListener(\"click\", function () {\n let div_id = el.getAttribute(\"data-knowl\");\n rb.logBookEvent({ event: \"knowl\", act: \"click\", div_id: div_id });\n });\n });\n let born_hidden = document.querySelectorAll(\"details.born-hidden-knowl\");\n born_hidden.forEach((el) => {\n // log an event when a knowl is opened that was born hidden\n el.addEventListener(\"toggle\", function () {\n if (el.open) {\n let div_id = el.id;\n rb.logBookEvent({ event: \"knowl\", act: \"open\", div_id: div_id });\n }\n });\n });\n // log an event when a sage cell is evaluated\n document.querySelectorAll(\".sagecell_evalButton\").forEach((btn) => {\n btn.addEventListener(\"click\", function () {\n let container = btn.closest(\".ptx-sagecell\");\n let codeInput = container ? container.querySelector(\".sagecell_input\") : null;\n let code = codeInput ? codeInput.textContent : \"\";\n let div_id = container ? container.id : null;\n if (! div_id) {\n console.warn(\"Could not find container or div_id for sagecell button\");\n return;\n }\n\n rb.logBookEvent({ event: \"sage\", act: \"run\", div_id: div_id });\n });\n });\n if (typeof eBookConfig !== \"undefined\" && !eBookConfig.isInstructor) {\n document.querySelectorAll(\".commentary\").forEach((el) => {\n el.style.display = \"none\";\n });\n }\n}\n\nwindow.addEventListener(\"load\", function () {\n console.log(\"setting up pretext\");\n setupPTXEvents();\n let wrap = document.getElementById(\"primary-navbar-sticky-wrapper\");\n if (wrap) {\n wrap.style.overflow = \"visible\";\n }\n});\n","import RunestoneBase from \"../../common/js/runestonebase.js\";\n\nexport class SpliceWrapper extends RunestoneBase {\n constructor() {\n super();\n this.initSplice();\n }\n\n initSplice() {\n // SPLICE Events\n window.addEventListener(\"message\", async (event) => {\n \n var sourceIframe = this.sendingIframe(event);\n console.log(`SpliceWrapper: received message subject: ${event.data.subject} from iframe: ${sourceIframe ? sourceIframe.id : \"unknown\"}`);\n if (event.data.subject == \"SPLICE.reportScoreAndState\") {\n this.handleScoreAndState(event, sourceIframe);\n } else if (event.data.subject == \"SPLICE.sendEvent\") {\n this.handleSpliceEvent(event, sourceIframe);\n } else if (event.data.subject == \"SPLICE.getState\") {\n await this.handleGetState(event, sourceIframe);\n } else if (\n event.origin === \"https://www.myopenmath.com\" &&\n typeof event.data === \"string\" &&\n event.data.indexOf(\"lti.ext.imathas.result\") != -1\n ) {\n // proof of concept for My Open Math\n let msgdata = JSON.parse(event.data);\n let jwt = basicParseJwt(msgdata.jwt);\n console.log(\n \"Result received from frame \" +\n msgdata.frame_id +\n \" with score \" +\n jwt.score\n );\n // todo send score to server\n // does MOM have a way to get the state?\n // todo send state to server\n }\n });\n }\n\n getUniqueID(event, frame) {\n // Determine the unique identifier for this activity\n // The SPLICE protocol allows for two possibilities\n // 1. activity_id is the unique id as assigned by the provider\n // 2. activity_id is the iframe src url\n // if the activity_id is set there may also be another attribute called domain\n // On Runestone we will try to map the activity to the div_id of the enclosing RS component\n // if possible, otherwise we will use the activity_id or iframe src\n // If an interactive is included in an exercises this allows us to map the score\n // to the id the instructor used to assign the problem.\n if (frame) {\n let rsDiv = frame.closest(\"[data-component]\");\n if (rsDiv) {\n return rsDiv.id;\n }\n }\n let location = event.data.activity_id;\n if (!location) {\n if (frame) {\n location = frame.src;\n } else {\n location = \"unknown\";\n console.error(\n \"Could not find iframe that sent the SPLICE event\"\n );\n }\n }\n return location;\n }\n\n handleScoreAndState(event, frame) {\n console.log(\"Got SPLICE.reportScoreAndState\");\n console.log(event.data.activity_id);\n console.log(event.data.score);\n console.log(event.data.state);\n let location = this.getUniqueID(event, frame);\n this.logBookEvent({\n event: event.data.subject,\n div_id: location,\n act: `score: ${event.data.score}`,\n score: event.data.score,\n percent: event.data.score,\n correct: event.data.score == 1.0 ? true : false,\n answer: JSON.stringify(event.data.state),\n });\n }\n\n sendingIframe(event) {\n // determine the iframe that sent the event\n // you would think that event.source would be the iframe\n // but it is not and getting the location out of event.source\n // creates CORS issues.\n for (const f of document.getElementsByTagName(\"iframe\")) {\n if (f.contentWindow === event.source) return f;\n }\n return undefined;\n }\n\n async getSavedState(location) {\n // fetch the state from the server\n try {\n const response = await fetch(\"/ns/assessment/results\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n div_id: location,\n course: eBookConfig.course,\n event: \"SPLICE.getState\",\n }),\n });\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = await response.json();\n return data;\n } catch (error) {\n console.error(\"Error fetching SPLICE state:\", error);\n return null;\n }\n }\n\n async handleGetState(event, frame) {\n console.log(\"Got SPLICE.getState\");\n console.log(event.data.activity_id);\n console.log(event.data.state);\n // subject is SPLICE.getState.response\n let location = this.getUniqueID(event, frame);\n let res = await this.getSavedState(location);\n let state = res.detail.answer;\n event.source.postMessage(\n {\n message_id: event.data.message_id,\n subject: \"SPLICE.getState.response\",\n state: state,\n },\n \"*\"\n );\n }\n\n handleSpliceEvent(event, frame) {\n // handle generic SPLICE events, such as logged clicks\n // or other events. SPLICE does not require that we do\n // anything with them, but in keeping with our tradition\n // we will save them to the useinfo table in the database\n // in case they prove to be useful for research later\n console.log(\"Got SPLICE.sendEvent\");\n console.log(event.data.activity_id);\n console.log(event.data.name);\n //console.log(event.data.data);\n let location = this.getUniqueID(event, frame);\n this.logBookEvent({\n event: event.data.subject,\n div_id: location,\n act: event.data.name || \"unknown\",\n });\n }\n // these stubs are not implemented, but are required by the RunestoneBase class\n checkLocalStorage() {}\n setLocalStorage() {}\n restoreAnswers() {}\n disableInteraction() {}\n}\n\nfunction basicParseJwt(token) {\n var base64Url = token.split(\".\")[1];\n var base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n var jsonPayload = decodeURIComponent(\n window\n .atob(base64)\n .split(\"\")\n .map(function (c) {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join(\"\")\n );\n return JSON.parse(jsonPayload);\n}\n","// ***********************************************************************************\n// |docname| - A framework allowing a Runestone component to load only the JS it needs\n// ***********************************************************************************\n// The JavaScript required by all Runestone components is quite large and results in slow page loads. This approach enables a Runestone component to load only the JavaScript it needs, rather than loading JavaScript for all the components regardless of which are actually used.\n//\n// To accomplish this, webpack's split-chunks ability analyzes all JS, starting from this file. The dynamic imports below are transformed by webpack into the dynamic fetches of just the JS required by each file and all its dependencies. (If using static imports, webpack will assume that all files are already statically loaded via script tags, defeating the purpose of this framework.)\n//\n// However, this approach leads to complexity:\n//\n// - The ``data-component`` attribute of each component must be kept in sync with the keys of the ``module_map`` below.\n// - The values in the ``module_map`` must be kept in sync with the JavaScript files which implement each of the components.\n\n// Static imports\n// ==============\n// These imports are (we assume) needed by all pages. However, it would be much better to load these in the modules that actually use them.\n//\n// These are static imports; code in `dynamically loaded components`_ deals with dynamic imports.\n//\n// jQuery-related imports.\nimport \"jquery-ui/jquery-ui.js\";\nimport \"jquery-ui/themes/base/jquery.ui.all.css\";\nimport \"./runestone/common/js/jquery.idle-timer.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.emitter.bidi.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.emitter.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.fallbacks.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.messagestore.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.parser.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.language.js\";\n\n// Bootstrap - not needed for pxx development\nimport \"bootstrap/dist/js/bootstrap.js\";\n\n// common styles come from here\nimport \"./ptxrs-bootstrap.less\";\nimport \"./runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/bootstrap-sphinx.js\";\n\n// Misc\nimport \"./runestone/common/js/bookfuncs.js\";\nimport \"./runestone/common/js/user-highlights.js\";\nimport \"./runestone/common/js/pretext.js\";\n\n// These belong in dynamic imports for the obvious component; however, these components don't include a ``data-component`` attribute.\nimport \"./runestone/matrixeq/css/matrixeq.css\";\nimport \"./runestone/webgldemo/css/webglinteractive.css\";\n\n// These are only needed for the Runestone book, but not in a library mode (such as pretext). I would prefer to dynamically load them. However, these scripts are so small I haven't bothered to do so.\nimport { getSwitch, switchTheme } from \"./runestone/common/js/theme.js\";\nimport \"./runestone/common/js/presenter_mode.js\";\nimport \"./runestone/common/css/presenter_mode.less\";\nimport { renderOneComponent } from \"./runestone/common/js/renderComponent.js\";\nimport RunestoneBase from \"./runestone/common/js/runestonebase.js\";\nimport { SpliceWrapper } from \"./runestone/splice/js/spliceWrapper.js\";\n\n// Dynamically loaded components\n// =============================\n// This provides a list of modules that components can dynamically import. Webpack will create a list of imports for each based on its analysis.\nconst module_map = {\n // Wrap each import in a function, so that it won't occur until the function is called. While something cleaner would be nice, webpack can't analyze things like ``import(expression)``.\n //\n // The keys must match the value of each component's ``data-component`` attribute -- the ``runestone_import`` and ``runestone_auto_import`` functions assume this.\n activecode: () => import(\"./runestone/activecode/js/acfactory.js\"),\n ble: () => import(\"./runestone/cellbotics/js/ble.js\"),\n // Always import the timed version of a component if available, since the timed components also define the component's factory and include the component as well. Note that ``acfactory`` imports the timed components of ActiveCode, so it follows this pattern.\n clickablearea: () =>\n import(\"./runestone/clickableArea/js/timedclickable.js\"),\n codelens: () => import(\"./runestone/codelens/js/codelens.js\"),\n datafile: () => import(\"./runestone/datafile/js/datafile.js\"),\n dragndrop: () => import(\"./runestone/dragndrop/js/timeddnd.js\"),\n fillintheblank: () => import(\"./runestone/fitb/js/timedfitb.js\"),\n groupsub: () => import(\"./runestone/groupsub/js/groupsub.js\"),\n khanex: () => import(\"./runestone/khanex/js/khanex.js\"),\n lp_build: () => import(\"./runestone/lp/js/lp.js\"),\n matching: () => import(\"./runestone/matching/js/matching.js\"),\n multiplechoice: () => import(\"./runestone/mchoice/js/timedmc.js\"),\n hparsons: () => import(\"./runestone/hparsons/js/hparsons.js\"),\n parsons: () => import(\"./runestone/parsons/js/timedparsons.js\"),\n poll: () => import(\"./runestone/poll/js/poll.js\"),\n quizly: () => import(\"./runestone/quizly/js/quizly.js\"),\n reveal: () => import(\"./runestone/reveal/js/reveal.js\"),\n selectquestion: () => import(\"./runestone/selectquestion/js/selectone.js\"),\n shortanswer: () =>\n import(\"./runestone/shortanswer/js/timed_shortanswer.js\"),\n showeval: () => import(\"./runestone/showeval/js/showEval.js\"),\n simple_sensor: () => import(\"./runestone/cellbotics/js/simple_sensor.js\"),\n spreadsheet: () => import(\"./runestone/spreadsheet/js/spreadsheet.js\"),\n tabbedStuff: () => import(\"./runestone/tabbedStuff/js/tabbedstuff.js\"),\n timedAssessment: () => import(\"./runestone/timed/js/timed.js\"),\n wavedrom: () => import(\"./runestone/wavedrom/js/wavedrom.js\"),\n // TODO: since this isn't in a ``data-component``, need to trigger an import of this code manually.\n webwork: () => import(\"./runestone/webwork/js/webwork.js\"),\n youtube: () => import(\"./runestone/video/js/runestonevideo.js\"),\n doenet: () => Promise.resolve(), // Doenet is loaded separately\n};\n\nconst module_map_cache = {};\nconst QUEUE_FLUSH_TIME_MS = 10;\nconst queue = [];\nlet queueLastFlush = 0;\n/**\n * Queue imports that are requested within `QUEUE_FLUSH_TIME_MS` of each other.\n * All such imports are imported at once, and then a promise is fired after all\n * the imports in the queue window have completed.\n */\nfunction queueImport(component_name) {\n let resolve = null;\n let reject = null;\n const retPromise = new Promise((r, rej) => {\n resolve = r;\n reject = rej;\n });\n const item = { component_name, resolve, reject };\n queue.push(item);\n window.setTimeout(flushQueue, QUEUE_FLUSH_TIME_MS + 1);\n\n return retPromise;\n}\nasync function flushQueue() {\n if (queue.length === 0) {\n return;\n }\n if (Date.now() - queueLastFlush < QUEUE_FLUSH_TIME_MS) {\n window.setTimeout(flushQueue, QUEUE_FLUSH_TIME_MS + 1);\n return;\n }\n // If we made it here, it has been at least QUEUE_FLUSH_TIME_MS since\n // the last time we flushed the queue. Therefore, we should start flushing.\n // We copy everything we flush and empty the array first.\n queueLastFlush = Date.now();\n const toFlush = [...queue];\n queue.length = 0;\n console.log(\n \"Webpack is starting the loading process for the following Runestone modules\",\n toFlush.map((item) => item.component_name)\n );\n const flushedPromise = toFlush.map(async (item) => {\n try {\n await module_map[item.component_name]();\n console.log(\n `Runestone component ${item.component_name} has been loaded`\n );\n return item;\n } catch (e) {\n item.reject(e);\n }\n });\n const flushed = await Promise.all(flushedPromise);\n try {\n flushed.forEach(function (item) {\n if (item) {\n item.resolve();\n }\n });\n } catch (e) {\n console.error(e);\n }\n}\n\n// .. _dynamic import machinery:\n//\n// Dynamic import machinery\n// ========================\n// Fulfill a promise when the Runestone pre-login complete event occurs.\nlet pre_login_complete_promise = new Promise((resolve) =>\n $(document).on(\"runestone:pre-login-complete\", resolve)\n);\nlet loadedComponents;\n// Provide a simple function to import the JS for all components on the page.\nexport function runestone_auto_import() {\n // Create a set of ``data-component`` values, to avoid duplication.\n const s = new Set(\n // All Runestone components have a ``data-component`` attribute.\n $(\"[data-component]\")\n .map(\n // Extract the value of the data-component attribute.\n (index, element) => $(element).attr(\"data-component\")\n // Switch from a jQuery object back to an array, passing that to the Set constructor.\n )\n .get()\n );\n // webwork questions are not wrapped in div with a data-component so we have to check a different way\n if (document.querySelector(\".webwork-button\")) {\n s.add(\"webwork\");\n }\n\n // Load JS for each of the components found.\n const a = [...s].map((value) => {\n let z;\n console.log(`Loading Runestone component: ${value}`);\n try {\n z = (module_map[value] || (() => Promise.resolve()))();\n } catch (e) {\n console.error(`Error loading ${value}:`, e);\n }\n z.error = (msg) => console.error(`Error in ${value}:`, msg);\n return z;\n });\n\n // Send the Runestone login complete event when all JS is loaded and the pre-login is also complete.\n Promise.all([pre_login_complete_promise, ...a]).then(function () {\n if (!document.body.dataset.reactInUse) {\n document.dispatchEvent(new CustomEvent(\"runestone:login-complete\"));\n }\n });\n}\n\npre_login_complete_promise.then(() => {\n console.log(\"Runestone pre-login complete\");\n});\n\n// Load component JS when the document is ready.\n$(document).ready(runestone_auto_import);\n\n// Provide a function to import one specific `Runestone` component.\n// the import function inside module_map is async -- runestone_import\n// should be awaited when necessary to ensure the import completes\nexport async function runestone_import(component_name) {\n if (module_map_cache[component_name]) {\n return module_map_cache[component_name];\n }\n console.log(\n `Runestone component ${component_name} is being queued for import`\n );\n const promise = queueImport(component_name);\n module_map_cache[component_name] = promise;\n return promise;\n}\n\nasync function popupScratchAC() {\n // load the activecode bundle\n await runestone_import(\"activecode\");\n // scratchDiv will be defined if we have already created a scratch\n // activecode. If its not defined then we need to get it ready to toggle\n if (!eBookConfig.scratchDiv) {\n window.ACFactory.createScratchActivecode();\n let divid = eBookConfig.scratchDiv;\n window.componentMap[divid] = ACFactory.createActiveCode(\n $(`#${divid}`)[0],\n eBookConfig.acDefaultLanguage\n );\n if (eBookConfig.isLoggedIn) {\n window.componentMap[divid].enableSaveLoad();\n }\n }\n setTimeout(() => {\n window.ACFactory.toggleScratchActivecode();\n }, 100);\n}\n\n// Set the directory containing this script as the `path `_ for all webpacked scripts.\nconst script_src = document.currentScript.src;\n__webpack_public_path__ = script_src.substring(\n 0,\n script_src.lastIndexOf(\"/\") + 1\n);\n\nvar splice = new SpliceWrapper();\n\n// Manual exports\n// ==============\n// Webpack's ``output.library`` setting doesn't seem to work with the split chunks plugin; do all exports manually through the ``window`` object instead.\n\nconst rc = {};\nrc.runestone_import = runestone_import;\nrc.runestone_auto_import = runestone_auto_import;\nrc.getSwitch = getSwitch;\nrc.switchTheme = switchTheme;\nrc.popupScratchAC = popupScratchAC;\nrc.renderOneComponent = renderOneComponent;\nwindow.componentMap = {};\nwindow.runestoneComponents = rc;\n","export function getSwitch() {\n const toggleSwitch = document.querySelector('.theme-switch input[type=\"checkbox\"]');\n const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;\n\n if (currentTheme) {\n document.documentElement.setAttribute('data-theme', currentTheme);\n\n if (currentTheme === 'dark') {\n toggleSwitch.checked = true;\n }\n }\n}\n\nexport function switchTheme() {\n\n\tvar checkBox = document.getElementById(\"checkbox\");\n if (checkBox.checked == true) {\n document.documentElement.setAttribute('data-theme', 'dark');\n localStorage.setItem('theme', 'dark'); //add this\n }\n else {\n document.documentElement.setAttribute('data-theme', 'light');\n localStorage.setItem('theme', 'light'); //add this\n }\n}\n","/* ********************************\n * |docname| - Runestone Base Class\n * ********************************\n * All runestone components should inherit from RunestoneBase. In addition all runestone components should do the following things:\n *\n * 1. Ensure that they are wrapped in a div with the class runestone\n * 2. Write their source AND their generated html to the database if the database is configured\n * 3. Properly save and restore their answers using the checkServer mechanism in this base class. Each component must provide an implementation of:\n *\n * - checkLocalStorage\n * - setLocalStorage\n * - restoreAnswers\n * - disableInteraction\n *\n * 4. provide a Selenium based unit test\n */\n\nimport { pageProgressTracker } from \"./bookfuncs.js\";\n//import \"./../styles/runestone-custom-sphinx-bootstrap.css\";\n\nvar NO_DECORATE = [\"parsonsMove\", \"showeval\", \"video\", \"poll\", \"view_toggle\",\n \"dashboard\", \"selectquestion\", \"codelens\", \"peer\", \"shortanswer\"]\nexport default class RunestoneBase {\n constructor(opts) {\n this.component_ready_promise = new Promise(\n (resolve) => (this._component_ready_resolve_fn = resolve)\n );\n this.optional = false;\n if (typeof window.allComponents === \"undefined\") {\n window.allComponents = [];\n }\n window.allComponents.push(this);\n if (opts) {\n this.sid = opts.sid;\n this.graderactive = opts.graderactive;\n this.showfeedback = true;\n if (opts.timed) {\n this.isTimed = true;\n }\n if (opts.enforceDeadline) {\n this.deadline = opts.deadline;\n }\n this.optional = this.parseBooleanAttribute(opts.orig, \"data-optional\");\n if (opts.selector_id) {\n this.selector_id = opts.selector_id;\n }\n if (typeof opts.assessmentTaken !== \"undefined\") {\n this.assessmentTaken = opts.assessmentTaken;\n } else {\n // default to true as this opt is only provided from a timedAssessment\n this.assessmentTaken = true;\n }\n // This is for the selectquestion points\n // If a selectquestion is part of a timed exam it will get\n // the timedWrapper options.\n if (typeof opts.timedWrapper !== \"undefined\") {\n this.timedWrapper = opts.timedWrapper;\n } else {\n // However sometimes selectquestions\n // are used in regular assignments. The hacky way to detect this\n // is to look for doAssignment in the URL and then grab\n // the assignment name from the heading.\n if (location.href.indexOf(\"doAssignment\") >= 0) {\n this.timedWrapper = $(\"h1#assignment_name\").text();\n } else {\n this.timedWrapper = null;\n }\n }\n if ($(opts.orig).data(\"question_label\")) {\n this.question_label = $(opts.orig).data(\"question_label\");\n }\n this.is_toggle = true ? opts.is_toggle : false;\n this.is_select = true ? opts.is_select : false;\n }\n this.mjelements = [];\n let self = this;\n this.mjReady = new Promise(function (resolve, reject) {\n self.mjresolver = resolve;\n });\n this.aQueue = new AutoQueue();\n if (opts && typeof opts.preamble !== \"undefined\") {\n this.preamble = opts.preamble;\n let y = document.createElement(\"div\");\n y.classList.add(\"hidden-content\");\n y.classList.add(\"process-math\");\n y.innerHTML = \"\\\\(\" + this.preamble + \"\\\\)\";\n // This is a hack to get the preamble into the DOM so that MathJax can process it.\n opts.orig.appendChild(y);\n y.id = \"ltx_preamble\";\n y.style.display = \"none\";\n // Add the preamble to the queue object so it can prepend it to\n // future MathJax processing\n this.aQueue.preamble = y\n }\n\n this.jsonHeaders = new Headers({\n \"Content-type\": \"application/json; charset=utf-8\",\n Accept: \"application/json\",\n });\n }\n\n // Helper for parsing boolean data-* attributes\n // Unset/\"false\"/\"no\" means false, anything else, including empty string means true\n parseBooleanAttribute(element, attributeName) {\n const attrValue = element.getAttribute(attributeName);\n if (attrValue === null) {\n return false;\n }\n const lowerValue = attrValue.toLowerCase();\n if (lowerValue === \"false\" || lowerValue === \"no\") {\n return false;\n }\n return true;\n }\n\n // _`logBookEvent`\n //----------------\n // This function sends the provided ``eventInfo`` to the `hsblog endpoint` of the server. Awaiting this function returns either ``undefined`` (if Runestone services are not available) or the data returned by the server as a JavaScript object (already JSON-decoded).\n async logBookEvent(eventInfo) {\n if (this.graderactive) {\n return;\n }\n let post_return;\n eventInfo.course_name = eBookConfig.course;\n eventInfo.clientLoginStatus = eBookConfig.isLoggedIn;\n eventInfo.timezoneoffset = new Date().getTimezoneOffset() / 60;\n // For selectquestions we need to log using the selector_id for real time scoring\n if (this.selector_id) {\n eventInfo.selector_id = this.selector_id;\n }\n if (typeof this.percent === \"number\") {\n eventInfo.percent = this.percent;\n }\n if (window.assignmentId) {\n eventInfo.assignment_id = window.assignmentId;\n }\n if (\n eBookConfig.isLoggedIn &&\n eBookConfig.useRunestoneServices &&\n eBookConfig.logLevel > 0\n ) {\n post_return = this.postLogMessage(eventInfo);\n }\n if (!this.isTimed || eBookConfig.debug) {\n let prefix = eBookConfig.isLoggedIn ? \"Save\" : \"Not\";\n console.log(`${prefix} logging event ` + JSON.stringify(eventInfo));\n }\n // When selectquestions are part of an assignment especially toggle questions\n // we need to count using the selector_id of the select question.\n // We also need to log an event for that selector so that we will know\n // that interaction has taken place. This is **independent** of how the\n // autograder will ultimately grade the question!\n if (this.selector_id) {\n eventInfo.div_id = this.selector_id.replace(\n \"-toggleSelectedQuestion\",\n \"\"\n );\n eventInfo.event = \"selectquestion\";\n eventInfo.act = \"interaction\";\n this.postLogMessage(eventInfo);\n }\n if (\n typeof pageProgressTracker.updateProgress === \"function\" &&\n eventInfo.act != \"edit\" &&\n this.optional == false\n ) {\n pageProgressTracker.updateProgress(eventInfo.div_id);\n }\n // if the event is in the NO_DECORATE list then don't decorate the status\n if (NO_DECORATE.indexOf(eventInfo.event) === -1) {\n this.decorateStatus();\n }\n return post_return;\n }\n\n async postLogMessage(eventInfo) {\n var post_return;\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/bookevent`,\n {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(eventInfo),\n }\n );\n try {\n var response = await fetch(request);\n if (!response.ok) {\n if (response.status === 422) {\n // Get details about why this is unprocesable.\n post_return = await response.json();\n console.log(JSON.stringify(post_return.detail, null, 4));\n throw new Error(\"Unprocessable Request\");\n } else if (response.status == 401) {\n post_return = await response.json();\n console.log(\n `Missing authentication token ${post_return.detail}`\n );\n throw new Error(\"Missing authentication token\");\n }\n throw new Error(`Failed to save the log entry\n Status: ${response.status}`);\n }\n post_return = await response.json();\n let scoreSpec = post_return.detail;\n let gradeBox = null;\n if (this.selector_id) {\n let selector_id = this.selector_id.replace(\n \"-toggleSelectedQuestion\",\n \"\"\n );\n gradeBox = document.getElementById(`${selector_id}_score`);\n } else {\n gradeBox = document.getElementById(`${this.divid}_score`);\n }\n if (gradeBox && !this.isTimed && scoreSpec.score) {\n this.updateScores(gradeBox, scoreSpec);\n }\n } catch (e) {\n let detail = \"none\";\n if (post_return && post_return.detail) {\n detail = post_return.detail;\n }\n if (eBookConfig.useRunestoneServices) {\n alert(`Error: Your action was not saved!\n The error was ${e}\n Status Code: ${response.status}\n Detail: ${JSON.stringify(detail, null, 4)}.\n Please report this error!`);\n }\n // send a request to save this error\n console.log(\n `Error: ${e} Detail: ${detail} Status Code: ${response.status}`\n );\n }\n return post_return;\n }\n // update the score for the question and the total score\n // the presence of the gradeBox is used to determine if we are on an assignment page.\n updateScores(gradeBox, scoreSpec) {\n if (!scoreSpec.assigned || scoreSpec.score === null) {\n document.getElementById(`${this.divid}_message`).innerHTML = \"Score not updated. Submissions are closed.\";\n return;\n }\n let scoreSpan = gradeBox.getElementsByClassName(\"qscore\")[0];\n if (scoreSpan) {\n scoreSpan.innerHTML = scoreSpec.score.toFixed(1);\n }\n let allScores = document.getElementsByClassName(\"qscore\");\n let allmax = document.getElementsByClassName(\"qmaxscore\");\n let total = 0;\n let max = 0;\n for (let i = 0; i < allScores.length; i++) {\n total += parseFloat(allScores[i].innerHTML);\n max += parseFloat(allmax[i].innerHTML);\n }\n let totalSpan = document.getElementById(\"total_score\");\n if (totalSpan) {\n totalSpan.innerHTML = total.toFixed(1);\n }\n let maxSpan = document.getElementById(\"total_max\");\n if (maxSpan) {\n maxSpan.innerHTML = max;\n }\n let percentSpan = document.getElementById(\"total_percent\");\n if (percentSpan) {\n percentSpan.innerHTML = ((total / max) * 100).toFixed(2);\n }\n }\n\n // .. _logRunEvent:\n //\n // logRunEvent\n // -----------\n // This function sends the provided ``eventInfo`` to the `runlog endpoint`. When awaited, this function returns the data (decoded from JSON) the server sent back.\n async logRunEvent(eventInfo) {\n let post_promise = \"done\";\n if (this.graderactive) {\n return;\n }\n eventInfo.course = eBookConfig.course;\n eventInfo.clientLoginStatus = eBookConfig.isLoggedIn;\n eventInfo.timezoneoffset = new Date().getTimezoneOffset() / 60;\n if (this.forceSave || \"to_save\" in eventInfo === false) {\n eventInfo.save_code = \"True\";\n }\n if (typeof eventInfo.errinfo !== \"undefined\") {\n eventInfo.errinfo = eventInfo.errinfo.toString();\n }\n if (\n eBookConfig.isLoggedIn &&\n eBookConfig.useRunestoneServices &&\n eBookConfig.logLevel > 0\n ) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/runlog`,\n {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(eventInfo),\n }\n );\n let response = await fetch(request);\n if (!response.ok) {\n post_promise = await response.json();\n if (eBookConfig.useRunestoneServices) {\n alert(`Failed to save your code\n Status is ${response.status}\n Detail: ${JSON.stringify(\n post_promise.detail,\n null,\n 4\n )}`);\n } else {\n console.log(\n `Did not save the code.\n Status: ${response.status}\n Detail: ${JSON.stringify(\n post_promise.detail,\n null,\n 4\n )}`\n );\n }\n } else {\n post_promise = await response.json();\n }\n }\n if (!this.isTimed || eBookConfig.debug) {\n console.log(\"running \" + JSON.stringify(eventInfo));\n }\n if (\n typeof pageProgressTracker.updateProgress === \"function\" &&\n this.optional == false\n ) {\n pageProgressTracker.updateProgress(eventInfo.div_id);\n }\n return post_promise;\n }\n /* Checking/loading from storage\n **WARNING:** DO NOT `await` this function!\n This function, although async, does not explicitly resolve its promise by returning a value. The reason for this is because it is called by the constructor for nearly every component. In Javascript constructors cannot be async!\n\n One of the recommended ways to handle the async requirements from within a constructor is to use an attribute as a promise and resolve that attribute at the appropriate time.\n */\n async checkServer(\n // A string specifying the event name to use for querying the :ref:`getAssessResults` endpoint.\n eventInfo,\n // If true, this function will invoke ``indicate_component_ready()`` just before it returns. This is provided since most components are ready after this function completes its work.\n //\n // TODO: This defaults to false, to avoid causing problems with any components that haven't been updated and tested. After all Runestone components have been updated, default this to true and remove the extra parameter from most calls to this function.\n will_be_ready = false\n ) {\n // Check if the server has stored answer\n let self = this;\n this.checkServerComplete = new Promise(function (resolve, reject) {\n self.csresolver = resolve;\n });\n if (\n eBookConfig.isLoggedIn &&\n (this.useRunestoneServices || this.graderactive)\n ) {\n let data = {};\n data.div_id = this.divid;\n data.course = eBookConfig.course;\n data.event = eventInfo;\n if (this.graderactive && this.deadline) {\n data.deadline = this.deadline;\n data.rawdeadline = this.rawdeadline;\n data.tzoff = this.tzoff;\n }\n if (this.sid) {\n data.sid = this.sid;\n }\n if (!(data.div_id && data.course && data.event)) {\n console.log(\n `A required field is missing data ${data.div_id}:${data.course}:${data.event}`\n );\n }\n // If we are NOT in practice mode and we are not in a peer exercise\n // and assessmentTaken is true\n if (\n !eBookConfig.practice_mode &&\n !eBookConfig.peer &&\n this.assessmentTaken\n ) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/results`,\n {\n method: \"POST\",\n body: JSON.stringify(data),\n headers: this.jsonHeaders,\n }\n );\n try {\n let response = await fetch(request);\n console.log(`Response from server: ${response.status}`);\n if (response.ok) {\n data = await response.json();\n data = data.detail;\n console.log(`Data from server: ${JSON.stringify(data)} calling repopulateFromStorage`);\n this.repopulateFromStorage(data);\n this.attempted = true;\n if (typeof data.correct !== \"undefined\") {\n this.correct = data.correct;\n } else {\n this.correct = null;\n }\n console.log(`resolving checkServer with server data`);\n this.csresolver(\"server\");\n } else {\n console.log(\n `HTTP Error getting results: ${response.statusText}`\n );\n this.checkLocalStorage(); // just go right to local storage\n console.log(`resolving checkServer with local data`);\n this.csresolver(\"local\");\n }\n } catch (err) {\n console.log(`Error getting results: ${err}`);\n try {\n this.checkLocalStorage();\n } catch (err) {\n console.log(err);\n }\n }\n } else {\n this.loadData({});\n console.log(`resolving checkServer no answer given`);\n this.csresolver(\"not taken\");\n }\n } else {\n this.checkLocalStorage(); // just go right to local storage\n console.log(`resolving checkServer with local data`);\n this.csresolver(\"local\");\n }\n\n if (will_be_ready) {\n this.indicate_component_ready();\n }\n }\n\n // This method assumes that ``this.componentDiv`` refers to the ``div`` containing the component, and that this component's ID is set.\n indicate_component_ready() {\n // Add a class to indicate the component is now ready.\n this.containerDiv.classList.add(\"runestone-component-ready\");\n // Resolve the ``this.component_ready_promise``.\n this._component_ready_resolve_fn();\n }\n\n loadData(data) {\n // for most classes, loadData doesn't do anything. But for Parsons, and perhaps others in the future,\n // initialization can happen even when there's no history to be loaded\n return null;\n }\n\n /**\n * repopulateFromStorage is called after a successful API call is made to ``getAssessResults`` in\n * the checkServer method in this class\n *\n * ``restoreAnswers,`` ``setLocalStorage`` and ``checkLocalStorage`` are defined in the child classes.\n *\n * @param {*} data - a JSON object representing the data needed to restore a previous answer for a component\n * @param {*} status - the http status\n * @param {*} whatever - ignored\n */\n repopulateFromStorage(data) {\n // decide whether to use the server's answer (if there is one) or to load from storage\n if (data !== null && data !== \"no data\" && this.shouldUseServer(data)) {\n this.restoreAnswers(data);\n this.setLocalStorage(data);\n } else {\n this.checkLocalStorage();\n }\n this.decorateStatus();\n }\n shouldUseServer(data) {\n // returns true if server data is more recent than local storage or if server storage is correct\n if (\n data.correct === \"T\" ||\n data.correct === true ||\n localStorage.length === 0 ||\n this.graderactive === true ||\n this.isTimed\n ) {\n return true;\n }\n let ex = localStorage.getItem(this.localStorageKey());\n if (ex === null) {\n return true;\n }\n let storedData;\n try {\n storedData = JSON.parse(ex);\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n // definitely don't want to use local storage here\n return true;\n }\n if (data.answer == storedData.answer) return true;\n let storageDate = new Date(storedData.timestamp);\n let serverDate = new Date(data.timestamp);\n return serverDate >= storageDate;\n }\n // Return the key which to be used when accessing local storage.\n localStorageKey() {\n return (\n eBookConfig.email +\n \":\" +\n eBookConfig.course +\n \":\" +\n this.divid +\n \"-given\"\n );\n }\n addCaption(elType) {\n //someElement.parentNode.insertBefore(newElement, someElement.nextSibling);\n if (!this.isTimed) {\n var capDiv = document.createElement(\"p\");\n if (this.question_label) {\n // Display caption based on whether Runestone services have been detected\n this.caption = eBookConfig.useRunestoneServices\n ? `Activity: ${this.question_label} ${this.caption} (${this.divid})`\n : `Activity: ${this.question_label} ${this.caption}`; // Without runestone\n $(capDiv).html(this.caption);\n $(capDiv).addClass(`${elType}_caption`);\n } else {\n // Display caption based on whether Runestone services have been detected\n $(capDiv).html(\n eBookConfig.useRunestoneServices\n ? this.caption + \" (\" + this.divid + \")\"\n : this.caption\n ); // Without runestone\n $(capDiv).addClass(`${elType}_caption`);\n $(capDiv).addClass(`${elType}_caption_text`);\n }\n this.capDiv = capDiv;\n //this.outerDiv.parentNode.insertBefore(capDiv, this.outerDiv.nextSibling);\n this.containerDiv.appendChild(capDiv);\n }\n }\n\n hasUserActivity() {\n return this.isAnswered;\n }\n\n checkCurrentAnswer() {\n console.log(\n \"Each component should provide an implementation of checkCurrentAnswer\"\n );\n }\n\n async logCurrentAnswer() {\n console.log(\n \"Each component should provide an implementation of logCurrentAnswer\"\n );\n }\n renderFeedback() {\n console.log(\n \"Each component should provide an implementation of renderFeedback\"\n );\n }\n disableInteraction() {\n console.log(\n \"Each component should provide an implementation of disableInteraction\"\n );\n }\n\n toString() {\n return `${this.constructor.name}: ${this.divid}`;\n }\n\n queueMathJax(component) {\n if (typeof MathJax === \"undefined\") {\n console.log(\"Error -- MathJax is not loaded\");\n return Promise.resolve(null);\n } else {\n // See - https://docs.mathjax.org/en/latest/advanced/typeset.html\n // Per the above we should keep track of the promises and only call this\n // a second time if all previous promises have resolved.\n // Create a queue of components\n // should wait until defaultPageReady is defined\n // If defaultPageReady is not defined then just enqueue the components.\n // Once defaultPageReady is defined\n // the window.runestoneMathReady promise will be fulfilled when the\n // initial typesetting is complete.\n if (MathJax.typesetPromise) {\n if (typeof window.runestoneMathReady !== \"undefined\") {\n return window.runestoneMathReady.then(() =>\n this.mjresolver(this.aQueue.enqueue(component))\n );\n } else {\n return this.mjresolver(this.aQueue.enqueue(component));\n }\n } else {\n console.log(`Waiting on MathJax!! ${MathJax.typesetPromise}`);\n setTimeout(() => this.queueMathJax(component), 200);\n console.log(`Returning mjready promise: ${this.mjReady}`);\n return this.mjReady;\n }\n }\n }\n\n decorateStatus() {\n if (this.isTimed || eBookConfig.peer) return;\n let rsDiv = $(this.containerDiv).closest(\"div.runestone\")[0];\n if (!rsDiv) return;\n rsDiv.classList.remove(\"notAnswered\");\n rsDiv.classList.remove(\"isInCorrect\");\n rsDiv.classList.remove(\"isCorrect\");\n if (this.correct) {\n rsDiv.classList.add(\"isCorrect\");\n } else {\n if (this.correct === null || typeof this.correct === \"undefined\") {\n rsDiv.classList.add(\"notAnswered\");\n } else {\n rsDiv.classList.add(\"isInCorrect\");\n }\n }\n }\n}\n\n// Inspiration and lots of code for this solution come from\n// https://stackoverflow.com/questions/53540348/js-async-await-tasks-queue\n// The idea here is that until MathJax is ready we can just enqueue things\n// once mathjax becomes ready then we can drain the queue and continue as usual.\n\nclass Queue {\n constructor() {\n this._items = [];\n }\n enqueue(item) {\n this._items.push(item);\n }\n dequeue() {\n return this._items.shift();\n }\n get size() {\n return this._items.length;\n }\n}\n\nclass AutoQueue extends Queue {\n constructor() {\n super();\n this._pendingPromise = false;\n }\n\n enqueue(component) {\n return new Promise((resolve, reject) => {\n super.enqueue({ component, resolve, reject });\n this.dequeue();\n });\n }\n\n async dequeue() {\n if (this._pendingPromise) return false;\n\n let item = super.dequeue();\n\n if (!item) return false;\n let qq = this;\n try {\n this._pendingPromise = true;\n\n let payload = await window.runestoneMathReady\n .then(async function () {\n console.log(\n `MathJax Ready -- dequeing a typesetting run for ${item.component.id} ${qq.preamble?.innerHTML}`\n );\n if (qq.preamble) {\n await MathJax.typesetPromise([qq.preamble])\n // Use insertAdjacentElement to preserve existing DOM elements and event listeners\n // instead of overwriting innerHTML which destroys event handlers\n let preambleDiv = document.createElement(\"div\");\n preambleDiv.innerHTML = qq.preamble.innerHTML;\n item.component.insertAdjacentElement(\"afterbegin\", preambleDiv);\n console.log(\n `MathJax typeset the preamble for ${item.component.id}`\n );\n return await MathJax.typesetPromise([item.component]);\n } else {\n return await MathJax.typesetPromise([item.component]);\n }\n });\n\n this._pendingPromise = false;\n item.resolve(payload);\n } catch (e) {\n this._pendingPromise = false;\n item.reject(e);\n } finally {\n // If there are more items in the queue, continue processing them\n this.dequeue();\n }\n\n return true;\n }\n}\n\nwindow.RunestoneBase = RunestoneBase;\n","/**\n *\n * User: bmiller\n * Original: 2011-04-20\n * Date: 2019-06-14\n * Time: 2:01 PM\n * This change marks the beginning of version 4.0 of the runestone components\n * Login/logout is no longer handled through javascript but rather server side.\n * Many of the components depend on the runestone:login event so we will keep that\n * for now to keep the churn fairly minimal.\n */\n\n/*\n\n Copyright (C) 2011 Brad Miller bonelake@gmail.com\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see .\n\n */\n\n//\n// Page decoration functions\n//\n/*\nMaybe something like this at the top:\n\nActive assignment: [Ch 15 reading] [Exit assignment link]\nOn page (3 of 7) [Select input showing current page, can select others] \nBecoming this if not on a page in assignment\n\nActive assignment: [Ch 15 reading] [Exit assignment link]\nThis page is not part of that assignment. Select a page to return to it:\n[Select input]\n*/\nfunction addReadingList() {\n let assignment_info_string = localStorage.getItem(\"currentAssignmentInfo\")\n \n if (assignment_info_string && eBookConfig.readings) {\n var top,bottom,active,page_name,exit_link,fst,snd, new_pos, path_parts, new_pos_link;\n let assignment_info = JSON.parse(assignment_info_string);\n let assignment_id = assignment_info.id;\n let assignment_name = assignment_info.name;\n let reading_names = assignment_info.readingNames;\n\n active = document.createElement(\"div\");\n active.textContent = \"Active assignment: \"\n\n page_name = document.createElement(\"a\");\n page_name.textContent = assignment_name;\n page_name.href = `/assignment/student/doAssignment?assignment_id=${assignment_id}`;\n \n active.append(page_name);\n\n exit_link = document.createElement(\"a\");\n exit_link.textContent = \"Exit Assignment\";\n exit_link.href=window.location.pathname;\n\n exit_link.addEventListener('click',function(event) {\n localStorage.removeItem(\"currentAssignmentInfo\");\n });\n\n //active.append(exit_link)\n\n let cur_path_parts = window.location.pathname.split(\"/\");\n let name =\n cur_path_parts[cur_path_parts.length - 2] +\n \"/\" +\n cur_path_parts[cur_path_parts.length - 1];\n // if body has pretext class, then strip the leading path parts from each of the strings in eBookConfig.readings\n let body = document.getElementsByTagName(\"body\")[0];\n let ptxbook = false;\n let endLop = 2;\n if (body.classList.contains(\"pretext\")) {\n ptxbook = true;\n eBookConfig.readings = eBookConfig.readings.map(r => r.split(\"/\").pop());\n name = name.split(\"/\").pop();\n endLop = 1;\n }\n\n let position = eBookConfig.readings.indexOf(name);\n let num_readings = eBookConfig.readings.length;\n // get prev name\n if (position > 0) {\n new_pos = eBookConfig.readings[position - 1];\n path_parts = cur_path_parts.slice(0, cur_path_parts.length - endLop);\n path_parts.push(new_pos);\n new_pos_link = path_parts.join(\"/\");\n fst = active.cloneNode(true);\n let txt = document.createElement(\"p\");\n txt.textContent = `Page ${position + 1} of ${num_readings}, `;\n var fst_lnk = document.createElement(\"a\");\n //fst_lnk.className = \"btn btn-lg reading-navigation prev-reading\";\n fst_lnk.href = new_pos_link;\n fst_lnk.textContent = `Back to page ${\n position\n } of ${num_readings}: ${reading_names[position-1]}.`;\n txt.append(fst_lnk);\n fst.append(txt);\n \n } else if (position == 0){\n fst = active.cloneNode(true);\n let txt = document.createElement(\"p\");\n txt.textContent = `Page 1 of ${num_readings}.`;\n fst.append(txt);\n } else {\n new_pos = eBookConfig.readings[0];\n path_parts = cur_path_parts.slice(0, cur_path_parts.length - endLop);\n path_parts.push(new_pos);\n new_pos_link = path_parts.join(\"/\");\n fst = active.cloneNode(true);\n let txt = document.createElement(\"p\");\n txt.textContent = \"Notice: this page is not part of the assignment. To remove this warning click \";\n txt.append(exit_link);\n fst.append(txt);\n }\n if (position == eBookConfig.readings.length - 1) {\n // no more readings\n snd = active;\n let txt = document.createElement(\"p\");\n txt.textContent = `Page ${num_readings} of ${num_readings}: ${reading_names[position]}`;\n snd.append(txt);\n } else if (position >= 0) {\n // get next name\n new_pos = eBookConfig.readings[position + 1];\n path_parts = cur_path_parts.slice(0, cur_path_parts.length - endLop);\n path_parts.push(new_pos);\n new_pos_link = path_parts.join(\"/\");\n snd = active;\n var snd_lnk = document.createElement(\"a\");\n //snd_lnk.className = \"btn btn-lg reading-navigation next-reading\";\n snd_lnk.href = new_pos_link;\n snd_lnk.textContent = `Continue to page ${\n position + 2\n } of ${num_readings}: ${reading_names[position+1]}`;\n let txt = document.createElement(\"p\");\n txt.append(snd_lnk);\n snd.append(txt);\n \n } else {\n snd = active.cloneNode(true);\n let txt = document.createElement(\"p\");\n txt.textContent = \"Notice: this page is not part of the assignment. To remove this warning click \";\n let exit_clone = exit_link.cloneNode(true);\n\n exit_clone.addEventListener('click',function(event) {\n localStorage.removeItem(\"currentAssignmentInfo\");\n });\n txt.append(exit_clone);\n snd.append(txt);\n \n\n }\n\n top = document.createElement(\"div\");\n top.className = \"ptx-runestone-container\"\n fst.className = \"runestone assignment-nav top-assignment-nav\"\n //top.style.backgroundColor = \"var(--componentBgColor)\"\n //top.style.borderColor = \"var(--componentBorderColor)\"\n //top.style.borderWidth = \"1px\"\n top.append(fst);\n //top.append(snd);\n\n bottom = document.createElement(\"div\");\n bottom.className = \"ptx-runestone-container\"\n snd.className = \"runestone assignment-nav bottom-assignment-nav\"\n //bottom.style.backgroundColor = \"var(--componentBgColor)\"\n //bottom.style.borderColor = \"var(--componentBorderColor)\"\n //bottom.style.borderWidth = \"1px\"\n \n //bottom.append(active.cloneNode(true));\n //bottom.append(fst.cloneNode(true));\n bottom.append(snd);\n\n\n // check the body tag to see if it has a pretext class (no jquery)\n if (ptxbook) {\n //append parts to the header and progress container\n let content = document.getElementById(\"ptx-content\");\n if (content) {\n content.insertBefore(top, content.firstChild);\n }\n let pc = document.getElementById(\"scprogresscontainer\");\n if (pc) {\n pc.style.marginBottom = \"20px\";\n pc.appendChild(bottom);\n }\n return;\n }\n const mainContent = document.getElementById(\"main-content\");\n if (mainContent && snd) {\n mainContent.insertBefore(top,mainContent.firstChild)\n mainContent.appendChild(bottom);\n \n }\n }\n}\n\nfunction timedRefresh() {\n var timeoutPeriod = 900000; // 75 minutes\n let idleTimeoutId;\n\n function onIdle() {\n // After timeout period send the user back to the index. This will force a login\n // if needed when they want to go to a particular page. This may not be perfect\n // but its an easy way to make sure laptop users are properly logged in when they\n // take quizzes and save stuff.\n if (location.href.indexOf(\"index.html\") < 0) {\n console.log(\"Idle timer - \" + location.pathname);\n location.href =\n eBookConfig.app +\n \"/default/user/login?_next=\" +\n location.pathname +\n location.search;\n }\n }\n\n function resetIdleTimer() {\n if (idleTimeoutId) {\n clearTimeout(idleTimeoutId);\n }\n idleTimeoutId = setTimeout(onIdle, timeoutPeriod);\n }\n\n [\"mousemove\", \"keydown\", \"scroll\", \"click\", \"touchstart\", \"wheel\"].forEach(\n (eventName) => {\n window.addEventListener(eventName, resetIdleTimer, { passive: true });\n },\n );\n\n resetIdleTimer();\n}\n\nclass PageProgressBar {\n constructor(actDict) {\n this.possible = 0;\n this.total = 1;\n if (actDict && \"assignment_spec\" in actDict) {\n this.assignment_spec = actDict.assignment_spec;\n delete actDict.assignment_spec;\n }\n if (actDict && Object.keys(actDict).length > 0) {\n this.activities = actDict;\n } else {\n let activities = { page: 0 };\n document.querySelectorAll(\".runestone\").forEach(function (e) {\n activities[e.firstElementChild.id] = 0;\n });\n this.activities = activities;\n }\n this.calculateProgress();\n // Hide the progress bar on the index page.\n if (\n window.location.pathname.match(\n /.*\\/(index.html|toctree.html|Exercises.html|search.html)$/i,\n )\n ) {\n const scprogresscontainer = document.getElementById(\n \"scprogresscontainer\",\n );\n if (scprogresscontainer) scprogresscontainer.style.display = \"none\";\n }\n this.renderProgress();\n }\n\n calculateProgress() {\n for (let k in this.activities) {\n if (k !== undefined) {\n this.possible++;\n if (this.activities[k] > 0) {\n this.total++;\n }\n }\n }\n }\n\n renderProgress() {\n let value = 0;\n const scprogresstotal = document.getElementById(\"scprogresstotal\");\n if (scprogresstotal) scprogresstotal.textContent = this.total;\n const scprogressposs = document.getElementById(\"scprogressposs\");\n if (scprogressposs) scprogressposs.textContent = this.possible;\n try {\n value = (100 * this.total) / this.possible;\n } catch (e) {\n value = 0;\n }\n // Replace #subchapterprogress div with a native element if not already done\n let subchapterprogress = document.getElementById(\"subchapterprogress\");\n if (subchapterprogress && subchapterprogress.tagName !== \"PROGRESS\") {\n // Replace the div with a element\n const progressElem = document.createElement(\"progress\");\n progressElem.id = \"subchapterprogress\";\n progressElem.max = 100;\n progressElem.value = value;\n // Copy over any classes from the old div\n progressElem.className = subchapterprogress.className;\n subchapterprogress.replaceWith(progressElem);\n subchapterprogress = progressElem;\n } else if (subchapterprogress) {\n subchapterprogress.max = 100;\n subchapterprogress.value = value;\n }\n if (this.assignment_spec) {\n // If the user has completed all activities, send the reading score.\n // This handles the case where there are no activities on the page or\n // where the user completed activities on the assignment page and now\n // is viewing the reading page.\n let completeActivities = this.total - 1; // subtract 1 for the page reading which is in total but not an activity\n let requiredActivities =\n this.assignment_spec.activities_required || 0;\n if (completeActivities >= requiredActivities) {\n this.sendCompletedReadingScore().then(() => {\n console.log(\"Reading score sent for page\");\n // wait a tick then mark the page complete\n // this is needed to let the progress bar update before marking complete\n setTimeout(() => {\n let cb = document.getElementById(\"completionButton\");\n if (\n cb &&\n cb.textContent.toLowerCase() === \"mark as completed\"\n ) {\n cb.click();\n }\n }, 500);\n });\n }\n }\n if (!eBookConfig.isLoggedIn) {\n const subchapterDiv = document.getElementById(\"subchapterprogress\");\n if (subchapterDiv) subchapterDiv.classList.add(\"loggedout\");\n }\n }\n\n updateProgress(div_id) {\n this.activities[div_id]++;\n // Only update the progress bar on the first interaction with an object.\n if (this.activities[div_id] === 1) {\n this.total++;\n let val = (100 * this.total) / this.possible;\n const scprogresstotal2 = document.getElementById(\"scprogresstotal\");\n if (scprogresstotal2) scprogresstotal2.textContent = this.total;\n const scprogressposs2 = document.getElementById(\"scprogressposs\");\n if (scprogressposs2) scprogressposs2.textContent = this.possible;\n let subchapterprogress2 =\n document.getElementById(\"subchapterprogress\");\n if (\n subchapterprogress2 &&\n subchapterprogress2.tagName === \"PROGRESS\"\n ) {\n subchapterprogress2.value = val;\n }\n if (\n this.assignment_spec &&\n this.assignment_spec.activities_required !== null &&\n this.total >= this.assignment_spec.activities_required\n ) {\n console.log(\"Required activities completed\");\n this.sendCompletedReadingScore().then(() => {\n console.log(\"Reading score sent\");\n });\n }\n if (\n val == 100.0 &&\n (function () {\n const cb = document.getElementById(\"completionButton\");\n return (\n cb &&\n cb.textContent &&\n cb.textContent.toLowerCase() === \"mark as completed\"\n );\n })()\n ) {\n const cb = document.getElementById(\"completionButton\");\n if (cb && typeof cb.click === \"function\") {\n cb.click();\n }\n }\n }\n }\n\n async sendCompletedReadingScore() {\n let headers = new Headers({\n \"Content-type\": \"application/json; charset=utf-8\",\n Accept: \"application/json\",\n });\n let data = { ...this.assignment_spec };\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/update_reading_score`,\n {\n method: \"POST\",\n body: JSON.stringify(data),\n headers: headers,\n },\n );\n try {\n let response = await fetch(request);\n if (!response.ok) {\n console.error(\n `Failed to send reading score! ${response.statusText}`,\n );\n }\n data = await response.json();\n } catch (e) {\n console.error(`Error sending reading score ${e}`);\n }\n }\n}\n\nexport var pageProgressTracker = {};\n\nfunction getCookie(name) {\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop().split(\";\").shift();\n}\n\nasync function handlePageSetup() {\n var mess;\n if (eBookConfig.useRunestoneServices) {\n let headers = new Headers({\n \"Content-type\": \"application/json; charset=utf-8\",\n Accept: \"application/json\",\n });\n let data = {\n timezoneoffset: new Date().getTimezoneOffset() / 60,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n };\n let RS_info = getCookie(\"RS_info\");\n var tz_match = false;\n if (RS_info) {\n try {\n let cleaned = RS_info.replace(/\\\\054/g, \",\"); // handle octal comma encoding\n let info = JSON.parse(decodeURIComponent(cleaned));\n info = JSON.parse(decodeURIComponent(info));\n if (\n info.timezone === data.timezone &&\n info.tz_offset === data.timezoneoffset\n ) {\n console.log(\n \"Timezone cookie matches, not sending timezone to server\",\n );\n tz_match = true;\n }\n } catch (e) {\n console.error(\n \"Error parsing RS_info cookie, sending timezone to server\",\n );\n }\n }\n if (tz_match === false) {\n // Set a cookie so we don't have to do this again for a while.\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/set_tz_offset`,\n {\n method: \"POST\",\n body: JSON.stringify(data),\n headers: headers,\n },\n );\n try {\n let response = await fetch(request);\n if (!response.ok) {\n console.error(\n `Failed to set timezone! ${response.statusText}`,\n );\n }\n data = await response.json();\n } catch (e) {\n console.error(`Error setting timezone ${e}`);\n }\n }\n }\n console.log(`This page served by ${eBookConfig.served_by}`);\n if (eBookConfig.isLoggedIn) {\n mess = `username: ${eBookConfig.username}`;\n if (!eBookConfig.isInstructor) {\n const ipDropdown = document.getElementById(\"ip_dropdown_link\");\n if (ipDropdown && typeof ipDropdown.remove === \"function\") {\n ipDropdown.remove();\n }\n const instPeer = document.getElementById(\"inst_peer_link\");\n if (instPeer && typeof instPeer.remove === \"function\") {\n instPeer.remove();\n }\n }\n document.dispatchEvent(new Event(\"runestone:login\"));\n addReadingList();\n // Avoid the timedRefresh on the grading page.\n if (\n window.location.pathname.indexOf(\"/admin/grading\") == -1 &&\n window.location.pathname.indexOf(\"/peer/\") == -1\n ) {\n timedRefresh();\n }\n } else {\n mess = \"Not logged in\";\n document.dispatchEvent(new Event(\"runestone:logout\"));\n let bw = document.getElementById(\"browsing_warning\");\n if (bw) {\n bw.innerHTML =\n \"\";\n }\n let aw = document.getElementById(\"ad_warning\");\n if (aw) {\n aw.innerHTML =\n \"\";\n }\n }\n document.querySelectorAll(\".loggedinuser\").forEach((el) => {\n el.innerHTML = mess;\n });\n\n pageProgressTracker = new PageProgressBar(eBookConfig.activities);\n notifyRunestoneComponents();\n}\n\nfunction setupNavbarLoggedIn() {\n const profileLink = document.getElementById(\"profilelink\");\n if (profileLink) profileLink.style.removeProperty(\"display\");\n const passwordLink = document.getElementById(\"passwordlink\");\n if (passwordLink) passwordLink.style.removeProperty(\"display\");\n const registerLink = document.getElementById(\"registerlink\");\n if (registerLink) registerLink.style.display = \"none\";\n document.querySelectorAll(\"li.loginout\").forEach((el) => {\n el.innerHTML =\n 'Log Out';\n });\n}\ndocument.addEventListener(\"runestone:login\", setupNavbarLoggedIn);\n\nfunction setupNavbarLoggedOut() {\n if (eBookConfig.useRunestoneServices) {\n console.log(\"setup navbar for logged out\");\n const registerLink = document.getElementById(\"registerlink\");\n if (registerLink) registerLink.style.removeProperty(\"display\");\n const profileLink = document.getElementById(\"profilelink\");\n if (profileLink) profileLink.style.display = \"none\";\n const passwordLink = document.getElementById(\"passwordlink\");\n if (passwordLink) passwordLink.style.display = \"none\";\n const ipDropdown = document.getElementById(\"ip_dropdown_link\");\n if (ipDropdown) ipDropdown.style.display = \"none\";\n const instPeer = document.getElementById(\"inst_peer_link\");\n if (instPeer) instPeer.style.display = \"none\";\n document.querySelectorAll(\"li.loginout\").forEach((el) => {\n el.innerHTML =\n 'Login';\n });\n document.querySelectorAll(\".footer\").forEach((el) => {\n el.innerHTML = \"user not logged in\";\n });\n }\n}\ndocument.addEventListener(\"runestone:logout\", setupNavbarLoggedOut);\n\nfunction notifyRunestoneComponents() {\n // Runestone components wait until login process is over to load components because of storage issues. This triggers the `dynamic import machinery`, which then sends the login complete signal when this and all dynamic imports are finished.\n console.log(\"triggering runestone:pre-login-complete\");\n document.dispatchEvent(new Event(\"runestone:pre-login-complete\"));\n}\n\nfunction placeAdCopy() {\n if (typeof showAd !== \"undefined\" && showAd) {\n let adNum = Math.floor(Math.random() * 2) + 1;\n let adBlock = document.getElementById(`adcopy_${adNum}`);\n let rsElements = document.querySelectorAll(\".runestone\");\n if (rsElements.length > 0) {\n let randomIndex = Math.floor(Math.random() * rsElements.length);\n rsElements[randomIndex].after(adBlock);\n adBlock.style.display = \"block\";\n }\n }\n}\n\n// initialize stuff\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n if (eBookConfig) {\n handlePageSetup();\n placeAdCopy();\n } else {\n if (typeof eBookConfig === \"undefined\") {\n console.log(\n \"eBookConfig is not defined. This page must not be set up for Runestone\",\n );\n }\n }\n});\n\n// misc stuff\n// todo: This could be further distributed but making a video.js file just for one function seems dumb.\nwindow.addEventListener(\"load\", function () {\n // add the video play button overlay image\n document.querySelectorAll(\".video-play-overlay\").forEach(function (el) {\n el.style.backgroundImage =\n \"url('{{pathto('_static/play_overlay_icon.png', 1)}}')\";\n });\n\n // This function is needed to allow the dropdown search bar to work;\n // The default behaviour is that the dropdown menu closes when something in\n // it (like the search bar) is clicked\n document\n .querySelectorAll(\".dropdown input, .dropdown label\")\n .forEach(function (el) {\n el.addEventListener(\"click\", function (e) {\n e.stopPropagation();\n });\n });\n\n // re-write some urls\n // This is tricker than it looks and you have to obey the rules for # anchors\n // The #anchors must come after the query string as the server basically ignores any part\n // of a url that comes after # - like a comment...\n if (location.href.includes(\"mode=browsing\")) {\n let queryString = \"?mode=browsing\";\n document.querySelectorAll(\"a\").forEach((link) => {\n let anchorText = \"\";\n if (\n link.href.includes(\"books/published\") &&\n !link.href.includes(\"?mode=browsing\")\n ) {\n if (link.href.includes(\"#\")) {\n let aPoint = link.href.indexOf(\"#\");\n anchorText = link.href.substring(aPoint);\n link.href = link.href.substring(0, aPoint);\n }\n link.href = link.href.includes(\"?\")\n ? link.href + queryString.replace(\"?\", \"&\") + anchorText\n : link.href + queryString + anchorText;\n }\n });\n }\n});\n\n/**\n * Returns true if the string appears to contain LaTeX math.\n */\nexport function looksLikeLatexMath(text) {\n if (typeof text !== \"string\") return false;\n\n // Common LaTeX math delimiters\n const mathDelimiters = [\n /\\$\\$[\\s\\S]+?\\$\\$/, // $$ ... $$\n /\\$[^$\\n]+?\\$/, // $ ... $\n /\\\\\\[[\\s\\S]+?\\\\\\]/, // \\[ ... \\]\n /\\\\\\([\\s\\S]+?\\\\\\)/, // \\( ... \\)\n ];\n\n // Common math commands (avoid generic \\text or \\ref-only cases)\n const mathCommands =\n /\\\\(frac|sqrt|sum|prod|int|lim|sin|cos|tan|log|ln|alpha|beta|gamma|pi|theta|sigma|Delta|cdot|times|leq|geq|neq)\\b/;\n\n // Superscripts/subscripts like x^2 or a_i\n const superSubScript = /[a-zA-Z0-9]\\s*[\\^_]\\s*\\{?.+?\\}?/;\n\n return (\n mathDelimiters.some((re) => re.test(text)) ||\n mathCommands.test(text) ||\n superSubScript.test(text)\n );\n}\n","import { runestone_import } from \"../../../webpack.index.js\";\n\nexport async function renderRunestoneComponent(\n componentSrc,\n whereDiv,\n moreOpts\n) {\n /**\n * The easy part is adding the componentSrc to the existing div.\n * The tedious part is calling the right functions to turn the\n * source into the actual component.\n */\n if (!componentSrc) {\n jQuery(`#${whereDiv}`).html(\n `

    Sorry, no source is available for preview.

    `\n );\n return;\n }\n let patt = /..\\/_images/g;\n componentSrc = componentSrc.replace(\n patt,\n `${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`\n );\n jQuery(`#${whereDiv}`).html(componentSrc);\n\n if (typeof window.componentMap === \"undefined\") {\n window.componentMap = {};\n }\n\n let componentKind = $($(`#${whereDiv} [data-component]`)[0]).data(\n \"component\"\n );\n // Import the JavaScript for this component before proceeding.\n await runestone_import(componentKind);\n let opt = {};\n opt.orig = jQuery(`#${whereDiv} [data-component]`)[0];\n if (opt.orig) {\n opt.lang = $(opt.orig).data(\"lang\");\n opt.useRunestoneServices = true;\n opt.graderactive = false;\n opt.python3 = true;\n if (typeof moreOpts !== \"undefined\") {\n for (let key in moreOpts) {\n opt[key] = moreOpts[key];\n }\n }\n }\n\n if (typeof component_factory === \"undefined\") {\n alert(\"Error: Missing the component factory!\");\n } else {\n if (\n !window.component_factory[componentKind] &&\n !jQuery(`#${whereDiv}`).html()\n ) {\n jQuery(`#${whereDiv}`).html(\n `

    Preview not available for ${componentKind}

    `\n );\n } else {\n let res = window.component_factory[componentKind](opt);\n if (componentKind === \"activecode\") {\n if (moreOpts.multiGrader) {\n window.componentMap[\n `${moreOpts.gradingContainer} ${res.divid}`\n ] = res;\n } else {\n window.componentMap[res.divid] = res;\n }\n }\n }\n }\n}\n\nexport function createTimedComponent(componentSrc, moreOpts) {\n /* The important distinction is that the component does not really need to be rendered\n into the page, in fact, due to the async nature of getting the source the list of questions\n is made and the original html is replaced by the look of the exam.\n */\n\n let patt = /..\\/_images/g;\n componentSrc = componentSrc.replace(\n patt,\n `${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`\n );\n\n let componentKind = $($(componentSrc).find(\"[data-component]\")[0]).data(\n \"component\"\n );\n\n let origId = $(componentSrc).find(\"[data-component]\").first().attr(\"id\");\n\n // Double check -- if the component source is not in the DOM, then briefly add it\n // and call the constructor.\n let hdiv;\n if (!document.getElementById(origId)) {\n hdiv = $(\"
    \", {\n css: { display: \"none\" },\n }).appendTo(\"body\");\n hdiv.html(componentSrc);\n }\n // at this point hdiv is a jquery object\n\n let ret;\n let opts = {\n orig: document.getElementById(origId),\n timed: true,\n };\n if (typeof moreOpts !== \"undefined\") {\n for (let key in moreOpts) {\n opts[key] = moreOpts[key];\n }\n }\n\n if (componentKind in window.component_factory) {\n ret = window.component_factory[componentKind](opts);\n }\n\n let rdict = {};\n rdict.question = ret;\n return rdict;\n}\n\n// For integration with the React overhault of Pretext\n// 1. Disable the automatic instantiation at the end of each component.js\n// 2. react will search for all \".runestone\" and will call this function for each of them.\nexport async function renderOneComponent(rsDiv) {\n // Find the actual component inside the runestone component.\n let component = rsDiv.querySelector(\"[data-component]\");\n if (component == null) {\n console.log(\"Render was called for a component, but now [data-component] attribute is present. This may mean the component has already been rendered.\")\n return;\n }\n let componentKind = component.dataset.component;\n await runestone_import(componentKind);\n if ($(this).closest(\"[data-component=timedAssessment]\").length == 0) {\n // If this element exists within a timed component, don't render it here\n try {\n let divid = component.id;\n window.componentMap[divid] = window.component_factory[\n componentKind\n ]({\n orig: component,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n });\n } catch (err) {\n console.log(`Error rendering ${componentKind} Problem ${this.id}\n Details: ${err}`);\n }\n }\n}\n"],"names":["$","patchToc","$ul","minLevel","findA","$elem","level","find","each","index","item","$item","tag","tagName","toLowerCase","$childrenLi","children","$parentLi","parent","length","addClass","first","attr","patchTables","removeClass","navHeight","height","shiftWindow","scrollBy","location","hash","window","addEventListener","this","remove","not","$parent","$kids","detach","replaceWith","after","$localLi","dropdown","i","e","hasClass","text","jQuery","codeExercises","presentModeInitialized","presentToggle","dataComponent","closest","css","wrapAll","wrap","before","presentModeSetup","bod","presentClass","fullHeightClass","bottomClass","localStorage","setItem","presenterCssLink","disabled","activateExercise","getActiveExercise","active","filter","nextExercise","nextIndex","prevExercise","prevIndex","document","on","eBookConfig","isInstructor","prepend","change","i18n","extend","fallbacks","ab","ace","aln","als","an","anp","arn","arz","av","ay","ba","bar","bcc","bh","bjn","bm","bpy","bqi","bug","ce","crh","csb","cv","dsb","dtp","egl","eml","ff","fit","frc","frp","frr","fur","gag","gan","gl","glk","gn","gsw","hif","hsb","ht","ii","inh","iu","jut","jv","kaa","kbd","khw","kiu","kk","kl","koi","krc","ks","ksh","ku","kv","lad","lb","lbe","lez","li","lij","liv","lmo","ln","ltg","lzz","mai","mg","mhr","min","mo","mrj","mwl","myv","mzn","nah","nap","nds","no","os","pcd","pdc","pdt","pfl","pms","pt","qu","qug","rgn","rmy","rue","ruq","sa","sah","scn","sg","sgs","sli","sr","srn","stq","su","szl","tcy","tg","tt","ty","udm","ug","uk","vec","vep","vls","vmf","vot","vro","wa","wo","wuu","xal","xmf","yi","za","zea","zh","language","pluralRules","ak","one","am","ar","zero","two","few","many","ars","as","be","bn","br","bs","cs","cy","da","fa","fil","fr","ga","gd","gu","guw","gv","he","hi","hr","hy","is","iw","kab","kn","kw","lag","lt","lv","mk","mr","mt","naq","nso","pa","pl","prg","ro","ru","se","sh","shi","si","sk","sl","sma","smi","smj","smn","sms","ti","tl","tzm","zu","convertPlural","count","forms","pluralFormIndex","form","explicitPluralPattern","RegExp","test","parseInt","slice","indexOf","undefined","map","locale","getPluralForm","Math","number","pluralForms","pluralRuleParser","convertNumber","num","integer","tmp","transformTable","numberString","convertedNumber","digitTransformTable","String","parseFloat","convertGrammar","word","gender","push","tables","ml","lo","or","kh","my","ta","te","th","bo","split","languages","strongDirRegExp","parser","emitter","bidi","nodes","m","dir","match","module","exports","MessageParserEmitter","prototype","constructor","emit","node","replacements","ret","subnodes","operation","messageParserEmitter","n","Error","concat","result","replace","plural","grammar","MessageParser","options","defaults","simpleParse","message","parameters","str","parse","ast","pipe","colon","backslash","anyCharacter","dollar","digits","regularLiteral","regularLiteralWithoutBar","escapedOrLiteralWithoutBar","escapedOrRegularLiteral","templateContents","templateName","openTemplate","closeTemplate","expression","paramExpression","p","fn","pos","choice","parserSyntax","sequence","res","originalPos","nOrMore","parsed","makeStringParser","s","len","makeRegexParser","regex","matches","escapedLiteral","replacement","templateParam","expr","templateWithReplacement","templateWithOutReplacement","template","toString","join","start","MessageStore","messages","sources","load","source","url","deferred","key","deferreds","messageStore","log","Deferred","getJSON","done","resolve","fail","jqxhr","settings","exception","promise","localization","set","Object","hasOwnProperty","call","when","apply","get","messageKey","I18N","nav","Array","localize","localeParts","localePartIndex","fallbackIndex","tryingLocale","fallbackLocale","destroy","removeData","fallbackLocales","locIndex","sourceMap","pop","param1","data","arguments","lBracket","rBracket","type","$this","html","debug","console","navigator","userLanguage","idleTimer","newTimeout","elem","opts","startImmediately","idle","enabled","timeout","events","toggleIdleState","myelem","obj","elapsed","Date","olddate","clearTimeout","tId","setTimeout","event","Event","trigger","off","stop","trim","isPreTeXt","querySelector","processPageState","completionFlag","pageLoad","markingComplete","markingIncomplete","currentPathname","pathname","substring","lastIndexOf","isPtxBook","lastPageUrl","lastPageScrollLocation","round","scrollTop","course","ajaxError","jqhxr","ajax","new_server_prefix","contentType","dataType","JSON","stringify","method","async","lastPositionVal","href","completionClass","completionMsg","detail","completionStatus","scp","classList","add","append","getCompletions","getUrlVar","animate","navLinkBgRightHalfOpen","navLinkBgRightHiddenPosition","outerWidth","relationsNextIconInitialPosition","relationsNextIconNewPosition","show","navBgShown","scroll","right","left","addNavigationAndCompletionButtons","subChapterList","allSubChapterURLs","chapterName","subChapterName","parentElement","endDate","hover","next","hide","lastPageData","lastPageChapter","lastPageSubchapter","decorateTableOfContents","getUrlVars","vars","hashes","search","name","rb","querySelectorAll","forEach","el","div_id","getAttribute","logBookEvent","act","open","id","btn","container","codeInput","textContent","warn","style","display","setupPTXEvents","getElementById","overflow","SpliceWrapper","super","initSplice","base64","jsonPayload","sourceIframe","sendingIframe","subject","handleScoreAndState","handleSpliceEvent","handleGetState","origin","msgdata","jwt","decodeURIComponent","atob","c","charCodeAt","frame_id","score","getUniqueID","frame","rsDiv","activity_id","src","error","state","percent","correct","answer","f","getElementsByTagName","contentWindow","getSavedState","response","fetch","headers","body","ok","status","json","postMessage","message_id","checkLocalStorage","setLocalStorage","restoreAnswers","disableInteraction","module_map","activecode","ble","clickablearea","codelens","datafile","dragndrop","fillintheblank","groupsub","khanex","lp_build","matching","multiplechoice","hparsons","parsons","poll","quizly","reveal","selectquestion","shortanswer","showeval","simple_sensor","spreadsheet","tabbedStuff","timedAssessment","wavedrom","webwork","youtube","doenet","Promise","module_map_cache","QUEUE_FLUSH_TIME_MS","queue","queueLastFlush","flushQueue","now","toFlush","component_name","flushedPromise","reject","flushed","all","pre_login_complete_promise","runestone_auto_import","Set","element","a","value","z","msg","then","dataset","reactInUse","dispatchEvent","CustomEvent","runestone_import","retPromise","r","rej","queueImport","ready","script_src","currentScript","rc","getSwitch","toggleSwitch","currentTheme","getItem","documentElement","setAttribute","checked","switchTheme","popupScratchAC","scratchDiv","ACFactory","createScratchActivecode","divid","componentMap","createActiveCode","acDefaultLanguage","isLoggedIn","enableSaveLoad","toggleScratchActivecode","renderOneComponent","runestoneComponents","NO_DECORATE","RunestoneBase","component_ready_promise","_component_ready_resolve_fn","optional","allComponents","sid","graderactive","showfeedback","timed","isTimed","enforceDeadline","deadline","parseBooleanAttribute","orig","selector_id","assessmentTaken","timedWrapper","question_label","is_toggle","is_select","mjelements","self","mjReady","mjresolver","aQueue","AutoQueue","preamble","y","createElement","innerHTML","appendChild","jsonHeaders","Headers","Accept","attributeName","attrValue","lowerValue","eventInfo","post_return","course_name","clientLoginStatus","timezoneoffset","getTimezoneOffset","assignmentId","assignment_id","useRunestoneServices","logLevel","postLogMessage","prefix","updateProgress","decorateStatus","request","Request","scoreSpec","gradeBox","updateScores","alert","assigned","scoreSpan","getElementsByClassName","toFixed","allScores","allmax","total","max","totalSpan","maxSpan","percentSpan","logRunEvent","post_promise","forceSave","save_code","errinfo","checkServer","will_be_ready","checkServerComplete","csresolver","rawdeadline","tzoff","practice_mode","peer","loadData","repopulateFromStorage","attempted","statusText","err","indicate_component_ready","containerDiv","shouldUseServer","storedData","ex","localStorageKey","removeItem","storageDate","timestamp","email","addCaption","elType","capDiv","caption","hasUserActivity","isAnswered","checkCurrentAnswer","logCurrentAnswer","renderFeedback","queueMathJax","component","MathJax","typesetPromise","runestoneMathReady","enqueue","Queue","_items","dequeue","shift","size","_pendingPromise","qq","payload","preambleDiv","insertAdjacentElement","PageProgressBar","actDict","possible","assignment_spec","keys","activities","page","firstElementChild","calculateProgress","scprogresscontainer","renderProgress","k","scprogresstotal","scprogressposs","subchapterprogress","progressElem","className","activities_required","sendCompletedReadingScore","cb","click","subchapterDiv","val","scprogresstotal2","scprogressposs2","subchapterprogress2","pageProgressTracker","looksLikeLatexMath","some","re","profileLink","removeProperty","passwordLink","registerLink","app","ipDropdown","instPeer","mess","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","RS_info","parts","cookie","getCookie","tz_match","cleaned","info","tz_offset","served_by","username","assignment_info_string","readings","top","bottom","page_name","exit_link","fst","snd","new_pos","path_parts","new_pos_link","assignment_info","assignment_name","reading_names","readingNames","cur_path_parts","ptxbook","endLop","contains","position","num_readings","cloneNode","txt","fst_lnk","snd_lnk","exit_clone","content","insertBefore","firstChild","pc","marginBottom","mainContent","addReadingList","idleTimeoutId","onIdle","resetIdleTimer","eventName","passive","timedRefresh","bw","aw","handlePageSetup","showAd","adNum","floor","random","adBlock","rsElements","placeAdCopy","backgroundImage","stopPropagation","includes","queryString","link","anchorText","aPoint","renderRunestoneComponent","componentSrc","whereDiv","moreOpts","basecourse","componentKind","opt","lang","python3","component_factory","multiGrader","gradingContainer","createTimedComponent","hdiv","origId","appendTo","rdict","question"],"sourceRoot":""} \ No newline at end of file diff --git a/course/_static/prefix-runestone.1c010553c35c544c.bundle.js.map.gz b/course/_static/prefix-runestone.1c010553c35c544c.bundle.js.map.gz deleted file mode 100755 index fc924fcdb8b353f9c96ba248c9dc358942b36057..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70241 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ª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ν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 Tm1|pTYd8N3fl$^|pvMCMil|?{ diff --git a/course/_static/prefix-runestone.677a75a9120449ff.css.map b/course/_static/prefix-runestone.677a75a9120449ff.css.map deleted file mode 100755 index fcf11e3..0000000 --- a/course/_static/prefix-runestone.677a75a9120449ff.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"prefix-runestone.677a75a9120449ff.css","mappings":"AAAA;EAEE;;;;EAIA;EACA,2EAA2E;EAC3E,oFAAoF,CA6LtF,CArMA,qDCQE,yBAA0B,CAC1B,6BAA8B,CAF9B,sBDoMF,CA3MA,qDCYE,QDmMF,CA/MA,quBC2BE,aDgNF,CA3OA,oOCiCE,oBAAqB,CACrB,uBDoNF,CAtPA,uFCqCE,YAAa,CACb,QDqNF,CA3PA,0HC0CE,YDuNF,CAjQA,+CC6CE,4BDwNF,CArQA,wHCiDE,SD0NF,CA3QA,mECoDE,kBAAmB,CACnB,yBAA0B,CAC1B,wCAAyC,CACzC,qCAAsC,CACtC,gCD2NF,CAnRA,wGC4DE,eD6NF,CAzRA,mDC+DE,iBD8NF,CA7RA,iDCkEE,aAAc,CACd,cD+NF,CAlSA,qDCsEE,eAAgB,CAChB,UDgOF,CAvSA,uDC0EE,aDiOF,CA3SA,sGC8EE,aAAc,CACd,aAAc,CACd,iBAAkB,CAClB,uBDmOF,CApTA,mDCoFE,SDoOF,CAxTA,mDCuFE,aDqOF,CA5TA,mDC0FE,QDsOF,CAhUA,yEC6FE,eDuOF,CApUA,yDCgGE,eDwOF,CAxUA,iDCmGE,8BAA+B,CAC/B,2BAA4B,CAC5B,sBAAuB,CACvB,QDyOF,CA/UA,mDCyGE,aD0OF,CAnVA,gNC+GE,+BAAiC,CACjC,aD8OF,CA9VA,mSCuHE,aAAc,CACd,YAAa,CACb,QDmPF,CA5WA,yDC4HE,gBDoPF,CAhXA,kHCgIE,mBDsPF,CAtXA,oTCsIE,yBAA0B,CAC1B,cD0PF,CAjYA,kKC2IE,cD4PF,CAvYA,wLC+IE,QAAS,CACT,SD8PF,CA9YA,uDCmJE,kBD+PF,CAlZA,oKCuJE,6BAA8B,CAC9B,0BAA2B,CAC3B,qBAAsB,CACtB,SDiQF,CA3ZA,8QC8JE,WDmQF,CAjaA,iFCiKE,4BAA6B,CAC7B,8BAA+B,CAC/B,2BAA4B,CAC5B,sBDoQF,CAxaA,oRCwKE,uBDsQF,CA9aA,6DC2KE,uBAAyB,CACzB,YAAa,CACb,0BDuQF,CApbA,6DCoLE,aDyQF,CA7bA,6DCuLE,eD0QF,CAjcA,uDC0LE,wBAAyB,CACzB,gBD2QF,CAtcA,kGC+LE,SD6QF,CC1QA,gLAMI,gCAAkC,CAClC,iCAAmC,CACnC,yBAA2B,CAJ3B,oBAAsB,CACtB,0BDkRF,CCvRF,8GAYI,yBDiRF,CC7RF,uEAeI,2BDkRF,CCjSF,+EAkBI,4BDmRF,CCrSF,sLAsBI,UDqRF,CC3SF,oHA0BI,qBAAsB,CACtB,uBDuRF,CClTF,uDA8BI,0BDwRF,CCtTF,oGAkCI,uBD0RF,CC5TF,mDAqCI,wBD2RF,CChUF,iJA0CI,SAAU,CACV,QD8RF,CCzUF,kGA+CI,sBDgSF,CC/UF,2DAkDI,YDiSF,CCnVF,sJAsDI,+BDmSF,CCzVF,yDAyDI,qBDoSF,CC7VF,yDA4DI,kCDqSF,CCjWF,8HAgEI,+BDuSF,CCvWF,kKAoEI,+BDySF,CACF,CCvSA,WACE,gCAAmC,CACnC,8BACA,uQDySF,CArjBA,iECsRE,kCAAmC,CACnC,iCAAkC,CANlC,oBAAqB,CACrB,gCAAmC,CACnC,iBAAkB,CAClB,eAAgB,CAChB,aAAc,CANd,iBAAkB,CAClB,ODiTF,CAjkBA,iGC0RE,eD2SF,CArkBA,yFC6RE,eD4SF,CAzkBA,gLCiSE,eD8SF,CA/kBA,2FCoSE,eD+SF,CAnlBA,2FCuSE,eDgTF,CAvlBA,iGC0SE,eDiTF,CA3lBA,6FC6SE,eDkTF,CA/lBA,2FCgTE,eDmTF,CAnmBA,2FCmTE,eDoTF,CAvmBA,6FCsTE,eDqTF,CA3mBA,2FCyTE,eDsTF,CA/mBA,yFC4TE,eDuTF,CAnnBA,qGC+TE,eDwTF,CAvnBA,yFCkUE,eDyTF,CA3nBA,yFCqUE,eD0TF,CA/nBA,iGCwUE,eD2TF,CAnoBA,qFC2UE,eD4TF,CAvoBA,+FC8UE,eD6TF,CA3oBA,qFCiVE,eD8TF,CA/oBA,6FCoVE,eD+TF,CAnpBA,+FCuVE,eDgUF,CAvpBA,iGC0VE,eDiUF,CA3pBA,uFC6VE,eDkUF,CA/pBA,6FCgWE,eDmUF,CAnqBA,uFCmWE,eDoUF,CAvqBA,2FCsWE,eDqUF,CA3qBA,yFCyWE,eDsUF,CA/qBA,yFC4WE,eDuUF,CAnrBA,yFC+WE,eDwUF,CAvrBA,yFCkXE,eDyUF,CA3rBA,yGCqXE,eD0UF,CA/rBA,iGCwXE,eD2UF,CAnsBA,6FC2XE,eD4UF,CAvsBA,2FC8XE,eD6UF,CA3sBA,uGCiYE,eD8UF,CA/sBA,6FCoYE,eD+UF,CAntBA,+FCuYE,eDgVF,CAvtBA,iGC0YE,eDiVF,CA3tBA,yFC6YE,eDkVF,CA/tBA,yFCgZE,eDmVF,CAnuBA,qGCmZE,eDoVF,CAvuBA,qGCsZE,eDqVF,CA3uBA,uGCyZE,eDsVF,CA/uBA,mGC4ZE,eDuVF,CAnvBA,6FC+ZE,eDwVF,CAvvBA,+FCkaE,eDyVF,CA3vBA,uFCqaE,eD0VF,CA/vBA,yFCwaE,eD2VF,CAnwBA,yFC2aE,eD4VF,CAvwBA,iGC8aE,eD6VF,CA3wBA,2FCibE,eD8VF,CA/wBA,6FCobE,eD+VF,CAnxBA,yFCubE,eDgWF,CAvxBA,yFC0bE,eDiWF,CA3xBA,6FC6bE,eDkWF,CA/xBA,uGCgcE,eDmWF,CAnyBA,qGCmcE,eDoWF,CAvyBA,qGCscE,eDqWF,CA3yBA,yGCycE,eDsWF,CA/yBA,uGC4cE,eDuWF,CAnzBA,2GC+cE,eDwWF,CAvzBA,yFCkdE,eDyWF,CA3zBA,uGCqdE,eD0WF,CA/zBA,yGCwdE,eD2WF,CAn0BA,6GC2dE,eD4WF,CAv0BA,+FC8dE,eD6WF,CA30BA,qGCieE,eD8WF,CA/0BA,6FCoeE,eD+WF,CAn1BA,yFCueE,eDgXF,CAv1BA,yFC0eE,eDiXF,CA31BA,2FC6eE,eDkXF,CA/1BA,2FCgfE,eDmXF,CAn2BA,yFCmfE,eDoXF,CAv2BA,2GCsfE,eDqXF,CA32BA,2GCyfE,eDsXF,CA/2BA,iGC4fE,eDuXF,CAn3BA,yFC+fE,eDwXF,CAv3BA,2FCkgBE,eDyXF,CA33BA,yFCqgBE,eD0XF,CA/3BA,+FCwgBE,eD2XF,CAn4BA,yGC2gBE,eD4XF,CAv4BA,yGC8gBE,eD6XF,CA34BA,2FCihBE,eD8XF,CA/4BA,yGCohBE,eD+XF,CAn5BA,2GCuhBE,eDgYF,CAv5BA,mGC0hBE,eDiYF,CA35BA,qGC6hBE,eDkYF,CA/5BA,uGCgiBE,eDmYF,CAn6BA,+FCmiBE,eDoYF,CAv6BA,2GCsiBE,eDqYF,CA36BA,mGCyiBE,eDsYF,CA/6BA,qGC4iBE,eDuYF,CAn7BA,2GC+iBE,eDwYF,CAv7BA,mGCkjBE,eDyYF,CA37BA,qGCqjBE,eD0YF,CA/7BA,qGCwjBE,eD2YF,CAn8BA,uGC2jBE,eD4YF,CAv8BA,iGC8jBE,eD6YF,CA38BA,qGCikBE,eD8YF,CA/8BA,mGCokBE,eD+YF,CAn9BA,uGCukBE,eDgZF,CAv9BA,yGC0kBE,eDiZF,CA39BA,iHC6kBE,eDkZF,CA/9BA,yFCglBE,eDmZF,CAn+BA,yFCmlBE,eDoZF,CAv+BA,yFCslBE,eDqZF,CA3+BA,iGCylBE,eDsZF,CA/+BA,mGC4lBE,eDuZF,CAn/BA,yGC+lBE,eDwZF,CAv/BA,2FCkmBE,eDyZF,CA3/BA,iGCqmBE,eD0ZF,CA//BA,6FCwmBE,eD2ZF,CAngCA,+FC2mBE,eD4ZF,CAvgCA,6FC8mBE,eD6ZF,CA3gCA,qGCinBE,eD8ZF,CA/gCA,yGConBE,eD+ZF,CAnhCA,+FCunBE,eDgaF,CAvhCA,2GC0nBE,eDiaF,CA3hCA,yGC6nBE,eDkaF,CA/hCA,uGCgoBE,eDmaF,CAniCA,+GCmoBE,eDoaF,CAviCA,mHCsoBE,eDqaF,CA3iCA,uFCyoBE,eDsaF,CA/iCA,iGC4oBE,eDuaF,CAnjCA,yFC+oBE,eDwaF,CAvjCA,uGCkpBE,eDyaF,CA3jCA,mGCqpBE,eD0aF,CA/jCA,uGCwpBE,eD2aF,CAnkCA,qGC2pBE,eD4aF,CAvkCA,mGC8pBE,eD6aF,CA3kCA,+FCiqBE,eD8aF,CA/kCA,mGCoqBE,eD+aF,CAnlCA,qHCuqBE,eDgbF,CAvlCA,mHC0qBE,eDibF,CA3lCA,+GC6qBE,eDkbF,CA/lCA,mHCgrBE,eDmbF,CAnmCA,2FCmrBE,eDobF,CAvmCA,6FCsrBE,eDqbF,CA3mCA,2FCyrBE,eDsbF,CA/mCA,6FC4rBE,eDubF,CAnnCA,mGC+rBE,eDwbF,CAvnCA,qGCksBE,eDybF,CA3nCA,mGCqsBE,eD0bF,CA/nCA,mGCwsBE,eD2bF,CAnoCA,uGC2sBE,eD4bF,CAvoCA,yFC8sBE,eD6bF,CA3oCA,2FCitBE,eD8bF,CA/oCA,+FCotBE,eD+bF,CAnpCA,uFCutBE,eDgcF,CAvpCA,uFC0tBE,eDicF,CA3pCA,yFC6tBE,eDkcF,CA/pCA,iHCguBE,eDmcF,CAnqCA,yHCmuBE,eDocF,CAvqCA,2GCsuBE,eDqcF,CA3qCA,mHCyuBE,eDscF,CA/qCA,qHC4uBE,eDucF,CAnrCA,6HC+uBE,eDwcF,CAvrCA,mGCkvBE,eDycF,CA3rCA,6FCqvBE,eD0cF,CA/rCA,2GCwvBE,eD2cF,CAnsCA,uGC2vBE,eD4cF,CAvsCA,6FC8vBE,eD6cF,CA3sCA,2FCiwBE,eD8cF,CA/sCA,+FCowBE,eD+cF,CAntCA,qGCuwBE,eDgdF,CAvtCA,6FC0wBE,eDidF,CA3tCA,yFC6wBE,eDkdF,CA/tCA,yFCgxBE,eDmdF,CAnuCA,2FCmxBE,eDodF,CAvuCA,6FCsxBE,eDqdF,CA3uCA,6FCyxBE,eDsdF,CA/uCA,yFC4xBE,eDudF,CAnvCA,uGC+xBE,eDwdF,CAvvCA,yGCkyBE,eDydF,CA3vCA,2GCqyBE,eD0dF,CA/vCA,uGCwyBE,eD2dF,CAnwCA,uGC2yBE,eD4dF,CAvwCA,uGC8yBE,eD6dF,CA3wCA,iGCizBE,eD8dF,CA/wCA,+FCozBE,eD+dF,CAnxCA,6FCuzBE,eDgeF,CAvxCA,qGC0zBE,eDieF,CA3xCA,iGC6zBE,eDkeF,CA/xCA,mGCg0BE,eDmeF,CAnyCA,2FCm0BE,eDoeF,CAvyCA,2FCs0BE,eDqeF,CA3yCA,iGCy0BE,eDseF,CA/yCA,iGC40BE,eDueF,CAnzCA,mGC+0BE,eDweF,CAvzCA,yGCk1BE,eDyeF,CA3zCA,uGCq1BE,eD0eF,CA/zCA,mGCw1BE,eD2eF,CAn0CA,mGC21BE,eD4eF,CAv0CA,mGC81BE,eD6eF,CA30CA,6GCi2BE,eD8eF,CA/0CA,mHCo2BE,eD+eF,CAn1CA,6GCu2BE,eDgfF,CAv1CA,yGC02BE,eDifF,CA31CA,yGC62BE,eDkfF,CA/1CA,6GCg3BE,eDmfF,CAn2CA,qFCm3BE,eDofF,CAv2CA,mGCs3BE,eDqfF,CA32CA,mGCy3BE,eDsfF,CA/2CA,iGC43BE,eDufF,CAn3CA,yFC+3BE,eDwfF,CAv3CA,2FCk4BE,eDyfF,CA33CA,2FCq4BE,eD0fF,CA/3CA,mGCw4BE,eD2fF,CAn4CA,yFC24BE,eD4fF,CAv4CA,2FC84BE,eD6fF,CA34CA,yFCi5BE,eD8fF,CA/4CA,6FCo5BE,eD+fF,CAn5CA,6FCu5BE,eDggBF,CAv5CA,yGC05BE,eDigBF,CA35CA,yFC65BE,eDkgBF,CA/5CA,qGCg6BE,eDmgBF,CAn6CA,uFCm6BE,eDogBF,CAv6CA,2FCs6BE,eDqgBF,CA36CA,2FCy6BE,eDsgBF,CA/6CA,mGC46BE,eDugBF,CAn7CA,yFC+6BE,eDwgBF,CAv7CA,mGCk7BE,eDygBF,CA37CA,qGCq7BE,eD0gBF,CA/7CA,iGCw7BE,eD2gBF,CAn8CA,6QCi8BE,eD8gBF,CA/8CA,8KCu8BE,eDghBF,CAv9CA,kLC68BE,eDkhBF,CA/9CA,2FCg9BE,eDmhBF,CAn+CA,mGCm9BE,eDohBF,CAv+CA,iHCs9BE,eDqhBF,CA3+CA,mGCy9BE,eDshBF,CA/+CA,mHC49BE,eDuhBF,CAn/CA,+GC+9BE,eDwhBF,CAv/CA,6GCk+BE,eDyhBF,CA3/CA,yGCq+BE,eD0hBF,CA//CA,uFCw+BE,eD2hBF,CAngDA,2FC2+BE,eD4hBF,CAvgDA,qGC8+BE,eD6hBF,CA3gDA,mGCi/BE,eD8hBF,CA/gDA,qGCo/BE,eD+hBF,CAnhDA,+GCu/BE,eDgiBF,CAvhDA,iHC0/BE,eDiiBF,CA3hDA,uHC6/BE,eDkiBF,CA/hDA,+HCggCE,eDmiBF,CAniDA,mHCmgCE,eDoiBF,CAviDA,2HCsgCE,eDqiBF,CA3iDA,qHCygCE,eDsiBF,CA/iDA,6GC4gCE,eDuiBF,CAnjDA,2GC+gCE,eDwiBF,CAvjDA,+GCkhCE,eDyiBF,CA3jDA,yGCqhCE,eD0iBF,CA/jDA,+FCwhCE,eD2iBF,CAnkDA,uGC2hCE,eD4iBF,CAvkDA,mGC8hCE,eD6iBF,CA3kDA,mGCiiCE,eD8iBF,CA/kDA,qGCoiCE,eD+iBF,CAnlDA,mGCuiCE,eDgjBF,CAvlDA,+FC0iCE,eDijBF,CA3lDA,mKCmjCE,6BAA8B,CAC9B,0BAA2B,CAC3B,qBDojBF,CAzmDA,qDCyjCE,yCAA6C,CAD7C,cDsjBF,CA9mDA,qDCgkCE,qBAAsB,CADtB,UAAc,CAHd,qDAA2D,CAC3D,cAAe,CACf,sBDwjBF,CAtnDA,sOCskCE,mBAAoB,CACpB,iBAAkB,CAClB,mBD0jBF,CAloDA,+CC2kCE,aAAc,CACd,oBD2jBF,CAvoDA,sHCglCE,aAAc,CACd,yBD6jBF,CA9oDA,2DColCE,yCAA0C,CAC1C,mBD8jBF,CAnpDA,yDCwlCE,QD+jBF,CAvpDA,mDC2lCE,qBDgkBF,CA3pDA,maCkmCE,aAAc,CAEd,WAAY,CADZ,cDskBF,CAzqDA,qECumCE,iBDskBF,CA7qDA,yEC4mCE,qBAAsB,CACtB,qBAAsB,CACtB,iBAAkB,CAIlB,oBAAqB,CAErB,WAAY,CATZ,sBAAuB,CAQvB,cAAe,CATf,WAAY,CAKZ,sCAAwC,CACxC,iCAAmC,CACnC,8BD0kBF,CA3rDA,mECunCE,iBDwkBF,CA/rDA,iDC4nCE,QAAS,CACT,yBAA6B,CAF7B,kBAAmB,CADnB,eD4kBF,CAtsDA,6DCsoCE,kBAAsB,CACtB,QAAS,CALT,UAAW,CAEX,WAAY,CACZ,eAAgB,CAFhB,SAAU,CAHV,iBAAkB,CAClB,SDglBF,CAjtDA,4LCgpCE,SAAU,CAHV,WAAY,CACZ,QAAS,CACT,gBAAiB,CAJjB,eAAgB,CAChB,UDglBF,CA5tDA,uECmpCE,cD6kBF,CAhuDA,wlBCoqCE,aAAc,CAHd,mBAAoB,CACpB,eAAgB,CAChB,eD0lBF,CA7vDA,w+CCgsCE,UAAc,CAFd,eAAgB,CAChB,aDknBF,CAjzDA,4SCysCE,kBAAmB,CADnB,eDwnBF,CAh0DA,ovBCutCE,aDmoBF,CA11DA,4SCguCE,kBAAmB,CADnB,eD0oBF,CAz2DA,ovBC8uCE,aDqpBF,CAn4DA,oGCkvCE,cDupBF,CAz4DA,oGCsvCE,cDypBF,CA/4DA,oGC0vCE,cD2pBF,CAr5DA,oGC8vCE,cD6pBF,CA35DA,oGCkwCE,cD+pBF,CAj6DA,oGCswCE,cDiqBF,CAv6DA,+CCywCE,eDkqBF,CA36DA,uDC6wCE,cAAe,CACf,eAAgB,CAChB,eAAgB,CAHhB,kBDsqBF,CCjqBA,gFAEI,cDoqBF,CACF,CAx7DA,gHCwxCE,aDsqBF,CA97DA,4GC6xCE,wBAAyB,CADzB,YDyqBF,CAr8DA,iECgyCE,eDyqBF,CAz8DA,mECmyCE,gBD0qBF,CA78DA,qECsyCE,iBD2qBF,CAj9DA,uECyyCE,kBD4qBF,CAr9DA,qEC4yCE,kBD6qBF,CAz9DA,2EC+yCE,wBD8qBF,CA79DA,2ECkzCE,wBD+qBF,CAj+DA,6ECqzCE,yBDgrBF,CAr+DA,mECwzCE,UDirBF,CAz+DA,uEC2zCE,aDkrBF,CA7+DA,0KC+zCE,aDorBF,CAn/DA,uECk0CE,aDqrBF,CAv/DA,0KCs0CE,aDurBF,CA7/DA,iECy0CE,aDwrBF,CAjgEA,8JC60CE,aD0rBF,CAvgEA,uECg1CE,aD2rBF,CA3gEA,0KCo1CE,aD6rBF,CAjhEA,qECu1CE,aD8rBF,CArhEA,sKC21CE,aDgsBF,CA3hEA,mEC+1CE,wBAAyB,CADzB,UDksBF,CAhiEA,kKCm2CE,wBDmsBF,CAtiEA,mECs2CE,wBDosBF,CA1iEA,kKC02CE,wBDssBF,CAhjEA,6DC62CE,wBDusBF,CApjEA,sJCi3CE,wBDysBF,CA1jEA,mECo3CE,wBD0sBF,CA9jEA,kKCw3CE,wBD4sBF,CApkEA,iEC23CE,wBD6sBF,CAxkEA,8JC+3CE,wBD+sBF,CA9kEA,qECo4CE,4BAAgC,CADhC,kBAAmB,CADnB,kBDktBF,CAplEA,kGCy4CE,kBAAmB,CADnB,YDmtBF,CA3lEA,4NC+4CE,eDstBF,CArmEA,yECm5CE,eAAgB,CADhB,cDwtBF,CA1mEA,qECu5CE,eAAgB,CAChB,gBAAiB,CAFjB,cD0tBF,CAhnEA,2EC25CE,oBAAqB,CAErB,gBAAiB,CADjB,iBD0tBF,CAtnEA,iDCi6CE,kBAAmB,CADnB,YD2tBF,CA3nEA,kGCq6CE,sBD4tBF,CAjoEA,iDCw6CE,eD6tBF,CAroEA,iDC26CE,aD8tBF,CC5tBA,wGAII,UAAW,CAFX,UAAW,CAIX,eAAgB,CADhB,gBAAiB,CAEjB,sBAAuB,CACvB,kBAAmB,CALnB,WDouBF,CCvuBF,+EAWI,iBDguBF,CACF,CAzpEA,kKC67CE,WDkuBF,CA/pEA,mECg8CE,aAAc,CACd,wBDmuBF,CApqEA,iECu8CE,0BAA8B,CAD9B,gBAAiB,CADjB,eAAgB,CADhB,iBDuuBF,CA3qEA,qRC48CE,eDuuBF,CAnrEA,2OCo9CE,UAAc,CAHd,aAAc,CACd,aAAc,CACd,sBD2uBF,CA9rEA,qRCy9CE,qBD6uBF,CAtsEA,0KCi+CE,aAAc,CADd,2BAA+B,CAF/B,cAAe,CADf,kBAAmB,CAEnB,gBDivBF,CAhtEA,kqBCy+CE,UDqvBF,CA9tEA,spBCi/CE,qBD2vBF,CA5uEA,2DCq/CE,iBAAkB,CAClB,sBAAuB,CAFvB,kBD8vBF,CAlvEA,gNC4/CE,uDDgwBF,CA5vEA,qDCkgDE,wBAAyB,CACzB,iBAAkB,CAFlB,aAAc,CADd,aAAc,CADd,eDqwBF,CApwEA,mDCygDE,qBAAsB,CACtB,iBAAkB,CAClB,iDAAsD,CACtD,yCAA8C,CAJ9C,UAAW,CADX,aAAc,CADd,eDwwBF,CA9wEA,2DCkhDE,uBAAwB,CACxB,eAAgB,CAHhB,cAAe,CACf,eAAgB,CAFhB,SDuwBF,CAtxEA,mDC6hDE,oBAAqB,CACrB,wBAAyB,CACzB,qBAAsB,CACtB,iBAAkB,CALlB,UAAc,CALd,aAAc,CAGd,cAAe,CACf,sBAAuB,CAFvB,eAAgB,CADhB,aAAc,CAKd,oBDwwBF,CApyEA,6DCuiDE,4BAA6B,CAC7B,eAAgB,CAHhB,aAAc,CADd,iBAAkB,CADlB,SAAU,CAGV,oBDuwBF,CA7yEA,2EC2iDE,gBAAiB,CACjB,iBDswBF,CAlzEA,iECkjDE,gBAAiB,CADjB,iBAAkB,CADlB,iBAAkB,CADlB,kBD0wBF,CCrwBA,0FAEI,WDwwBF,CACF,CCtwBA,0FAEI,WDywBF,CACF,CCvwBA,2FAEI,YD0wBF,CACF,CA30EA,6ECukDE,gBAAiB,CADjB,iBAAkB,CADlB,iBAAkB,CADlB,kBD8wBF,CAl1EA,qDC2kDE,iBAAkB,CADlB,kBD6wBF,CAv1EA,2EC+kDE,aAAc,CADd,cD8wBF,CA51EA,uGCmlDE,cAAe,CADf,eD+wBF,CAj2EA,w+FCsoDE,cAAe,CAEf,iBAAkB,CADlB,kBAAmB,CAFnB,iBDi0BF,CAt8EA,0vBCspDE,UD00BF,CAh+EA,iECypDE,UD20BF,CAp+EA,iEC4pDE,kBD40BF,CAx+EA,iEC+pDE,kBD60BF,CA5+EA,+DCkqDE,SD80BF,CAh/EA,+DCqqDE,kBD+0BF,CAp/EA,+DCwqDE,kBDg1BF,CAx/EA,+DC2qDE,SDi1BF,CA5/EA,+DC8qDE,kBDk1BF,CAhgFA,+DCirDE,kBDm1BF,CApgFA,+DCorDE,SDo1BF,CAxgFA,+DCurDE,kBDq1BF,CA5gFA,+DC0rDE,iBDs1BF,CAhhFA,2EC6rDE,UDu1BF,CAphFA,2ECgsDE,kBDw1BF,CAxhFA,2ECmsDE,kBDy1BF,CA5hFA,yECssDE,SD01BF,CAhiFA,yECysDE,kBD21BF,CApiFA,yEC4sDE,kBD41BF,CAxiFA,yEC+sDE,SD61BF,CA5iFA,yECktDE,kBD81BF,CAhjFA,yECqtDE,kBD+1BF,CApjFA,yECwtDE,SDg2BF,CAxjFA,yEC2tDE,kBDi2BF,CA5jFA,yEC8tDE,iBDk2BF,CAhkFA,yECiuDE,UDm2BF,CApkFA,2ECouDE,SDo2BF,CAxkFA,2ECuuDE,iBDq2BF,CA5kFA,2EC0uDE,iBDs2BF,CAhlFA,yEC6uDE,QDu2BF,CAplFA,yECgvDE,iBDw2BF,CAxlFA,yECmvDE,iBDy2BF,CA5lFA,yECsvDE,QD02BF,CAhmFA,yECyvDE,iBD22BF,CApmFA,yEC4vDE,iBD42BF,CAxmFA,yEC+vDE,QD62BF,CA5mFA,yECkwDE,iBD82BF,CAhnFA,yECqwDE,gBD+2BF,CApnFA,yECwwDE,SDg3BF,CAxnFA,+EC2wDE,gBDi3BF,CA5nFA,+EC8wDE,wBDk3BF,CAhoFA,+ECixDE,wBDm3BF,CApoFA,6ECoxDE,eDo3BF,CAxoFA,6ECuxDE,wBDq3BF,CA5oFA,6EC0xDE,wBDs3BF,CAhpFA,6EC6xDE,eDu3BF,CAppFA,6ECgyDE,wBDw3BF,CAxpFA,6ECmyDE,wBDy3BF,CA5pFA,6ECsyDE,eD03BF,CAhqFA,6ECyyDE,wBD23BF,CApqFA,6EC4yDE,uBD43BF,CAxqFA,6EC+yDE,aD63BF,CC33BA,mxBAaI,UDy4BF,CCt5BF,iEAgBI,UD04BF,CC15BF,iEAmBI,kBD24BF,CC95BF,iEAsBI,kBD44BF,CCl6BF,+DAyBI,SD64BF,CCt6BF,+DA4BI,kBD84BF,CC16BF,+DA+BI,kBD+4BF,CC96BF,+DAkCI,SDg5BF,CCl7BF,+DAqCI,kBDi5BF,CCt7BF,+DAwCI,kBDk5BF,CC17BF,+DA2CI,SDm5BF,CC97BF,+DA8CI,kBDo5BF,CCl8BF,+DAiDI,iBDq5BF,CCt8BF,2EAoDI,UDs5BF,CC18BF,2EAuDI,kBDu5BF,CC98BF,2EA0DI,kBDw5BF,CCl9BF,yEA6DI,SDy5BF,CCt9BF,yEAgEI,kBD05BF,CC19BF,yEAmEI,kBD25BF,CC99BF,yEAsEI,SD45BF,CCl+BF,yEAyEI,kBD65BF,CCt+BF,yEA4EI,kBD85BF,CC1+BF,yEA+EI,SD+5BF,CC9+BF,yEAkFI,kBDg6BF,CCl/BF,yEAqFI,iBDi6BF,CCt/BF,yEAwFI,UDk6BF,CC1/BF,2EA2FI,SDm6BF,CC9/BF,2EA8FI,iBDo6BF,CClgCF,2EAiGI,iBDq6BF,CCtgCF,yEAoGI,QDs6BF,CC1gCF,yEAuGI,iBDu6BF,CC9gCF,yEA0GI,iBDw6BF,CClhCF,yEA6GI,QDy6BF,CCthCF,yEAgHI,iBD06BF,CC1hCF,yEAmHI,iBD26BF,CC9hCF,yEAsHI,QD46BF,CCliCF,yEAyHI,iBD66BF,CCtiCF,yEA4HI,gBD86BF,CC1iCF,yEA+HI,SD+6BF,CC9iCF,+EAkII,gBDg7BF,CCljCF,+EAqII,wBDi7BF,CCtjCF,+EAwII,wBDk7BF,CC1jCF,6EA2II,eDm7BF,CC9jCF,6EA8II,wBDo7BF,CClkCF,6EAiJI,wBDq7BF,CCtkCF,6EAoJI,eDs7BF,CC1kCF,6EAuJI,wBDu7BF,CC9kCF,6EA0JI,wBDw7BF,CCllCF,6EA6JI,eDy7BF,CCtlCF,6EAgKI,wBD07BF,CC1lCF,6EAmKI,uBD27BF,CC9lCF,6EAsKI,aD47BF,CACF,CC17BA,mxBAaI,UDw8BF,CCr9BF,iEAgBI,UDy8BF,CCz9BF,iEAmBI,kBD08BF,CC79BF,iEAsBI,kBD28BF,CCj+BF,+DAyBI,SD48BF,CCr+BF,+DA4BI,kBD68BF,CCz+BF,+DA+BI,kBD88BF,CC7+BF,+DAkCI,SD+8BF,CCj/BF,+DAqCI,kBDg9BF,CCr/BF,+DAwCI,kBDi9BF,CCz/BF,+DA2CI,SDk9BF,CC7/BF,+DA8CI,kBDm9BF,CCjgCF,+DAiDI,iBDo9BF,CCrgCF,2EAoDI,UDq9BF,CCzgCF,2EAuDI,kBDs9BF,CC7gCF,2EA0DI,kBDu9BF,CCjhCF,yEA6DI,SDw9BF,CCrhCF,yEAgEI,kBDy9BF,CCzhCF,yEAmEI,kBD09BF,CC7hCF,yEAsEI,SD29BF,CCjiCF,yEAyEI,kBD49BF,CCriCF,yEA4EI,kBD69BF,CCziCF,yEA+EI,SD89BF,CC7iCF,yEAkFI,kBD+9BF,CCjjCF,yEAqFI,iBDg+BF,CCrjCF,yEAwFI,UDi+BF,CCzjCF,2EA2FI,SDk+BF,CC7jCF,2EA8FI,iBDm+BF,CCjkCF,2EAiGI,iBDo+BF,CCrkCF,yEAoGI,QDq+BF,CCzkCF,yEAuGI,iBDs+BF,CC7kCF,yEA0GI,iBDu+BF,CCjlCF,yEA6GI,QDw+BF,CCrlCF,yEAgHI,iBDy+BF,CCzlCF,yEAmHI,iBD0+BF,CC7lCF,yEAsHI,QD2+BF,CCjmCF,yEAyHI,iBD4+BF,CCrmCF,yEA4HI,gBD6+BF,CCzmCF,yEA+HI,SD8+BF,CC7mCF,+EAkII,gBD++BF,CCjnCF,+EAqII,wBDg/BF,CCrnCF,+EAwII,wBDi/BF,CCznCF,6EA2II,eDk/BF,CC7nCF,6EA8II,wBDm/BF,CCjoCF,6EAiJI,wBDo/BF,CCroCF,6EAoJI,eDq/BF,CCzoCF,6EAuJI,wBDs/BF,CC7oCF,6EA0JI,wBDu/BF,CCjpCF,6EA6JI,eDw/BF,CCrpCF,6EAgKI,wBDy/BF,CCzpCF,6EAmKI,uBD0/BF,CC7pCF,6EAsKI,aD2/BF,CACF,CCz/BA,oxBAaI,UDugCF,CCphCF,iEAgBI,UDwgCF,CCxhCF,iEAmBI,kBDygCF,CC5hCF,iEAsBI,kBD0gCF,CChiCF,+DAyBI,SD2gCF,CCpiCF,+DA4BI,kBD4gCF,CCxiCF,+DA+BI,kBD6gCF,CC5iCF,+DAkCI,SD8gCF,CChjCF,+DAqCI,kBD+gCF,CCpjCF,+DAwCI,kBDghCF,CCxjCF,+DA2CI,SDihCF,CC5jCF,+DA8CI,kBDkhCF,CChkCF,+DAiDI,iBDmhCF,CCpkCF,2EAoDI,UDohCF,CCxkCF,2EAuDI,kBDqhCF,CC5kCF,2EA0DI,kBDshCF,CChlCF,yEA6DI,SDuhCF,CCplCF,yEAgEI,kBDwhCF,CCxlCF,yEAmEI,kBDyhCF,CC5lCF,yEAsEI,SD0hCF,CChmCF,yEAyEI,kBD2hCF,CCpmCF,yEA4EI,kBD4hCF,CCxmCF,yEA+EI,SD6hCF,CC5mCF,yEAkFI,kBD8hCF,CChnCF,yEAqFI,iBD+hCF,CCpnCF,yEAwFI,UDgiCF,CCxnCF,2EA2FI,SDiiCF,CC5nCF,2EA8FI,iBDkiCF,CChoCF,2EAiGI,iBDmiCF,CCpoCF,yEAoGI,QDoiCF,CCxoCF,yEAuGI,iBDqiCF,CC5oCF,yEA0GI,iBDsiCF,CChpCF,yEA6GI,QDuiCF,CCppCF,yEAgHI,iBDwiCF,CCxpCF,yEAmHI,iBDyiCF,CC5pCF,yEAsHI,QD0iCF,CChqCF,yEAyHI,iBD2iCF,CCpqCF,yEA4HI,gBD4iCF,CCxqCF,yEA+HI,SD6iCF,CC5qCF,+EAkII,gBD8iCF,CChrCF,+EAqII,wBD+iCF,CCprCF,+EAwII,wBDgjCF,CCxrCF,6EA2II,eDijCF,CC5rCF,6EA8II,wBDkjCF,CChsCF,6EAiJI,wBDmjCF,CCpsCF,6EAoJI,eDojCF,CCxsCF,6EAuJI,wBDqjCF,CC5sCF,6EA0JI,wBDsjCF,CChtCF,6EA6JI,eDujCF,CCptCF,6EAgKI,wBDwjCF,CCxtCF,6EAmKI,uBDyjCF,CC5tCF,6EAsKI,aD0jCF,CACF,CAp2GA,uDC6yEE,4BD2jCF,CAx2GA,yFCizEE,oBAAqB,CACrB,UAAW,CAFX,eD8jCF,CA92GA,8KCuzEE,kBAAmB,CACnB,UAAW,CAFX,eDgkCF,CAt3GA,2DC6zEE,UAAc,CADd,kBAAmB,CADnB,eAAgB,CAGhB,eD+jCF,CA73GA,iDCi0EE,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,kBD6/EF,CC7gFF,+EAoBI,QAAS,CACT,mBAAoB,CAFpB,SDggFF,CCnhFF,qFAwBI,WD+/EF,CACF,CAt4RA,woFC06ME,WAAY,CADZ,aDgiFF,CAz8RA,ozCC47ME,UD+iFF,CA3+RA,uEC+7ME,aAAc,CAEd,gBAAiB,CADjB,iBDijFF,CAj/RA,mECo8ME,qBDijFF,CAr/RA,iECu8ME,oBDkjFF,CAz/RA,uDC08ME,sBDmjFF,CA7/RA,uDC68ME,uBDojFF,CAjgSA,iECg9ME,iBDqjFF,CArgSA,iECs9ME,4BAA6B,CAC7B,QAAS,CAHT,iBAAkB,CADlB,UAAW,CAEX,gBDwjFF,CA7gSA,2DC09ME,sBDujFF,CAjhSA,yDC69ME,cDwjFF,CCtjFA,cACE,kBDwjFF,CAxhSA,gwCCo/ME,sBDwkFF,CCtkFA,4FAEI,uBDykFF,CC3kFF,6EAKI,uBD0kFF,CC/kFF,uEAQI,2BD2kFF,CCnlFF,8IAYI,4BD6kFF,CC1kFF,+EAEI,uBD8kFF,CC3kFF,iFAEI,wBD+kFF,CC5kFF,6FAEI,8BDglFF,CAjBF,CC5jFA,kHAEI,uBDilFF,CCnlFF,6EAKI,uBDklFF,CCvlFF,uEAQI,2BDmlFF,CC3lFF,8IAYI,4BDqlFF,CCllFF,+EAEI,uBDslFF,CCnlFF,iFAEI,wBDulFF,CCplFF,6FAEI,8BDwlFF,CAjBF,CCpkFA,mHAEI,uBDylFF,CC3lFF,6EAKI,uBD0lFF,CC/lFF,uEAQI,2BD2lFF,CCnmFF,8IAYI,4BD6lFF,CC1lFF,+EAEI,uBD8lFF,CC3lFF,iFAEI,wBD+lFF,CC5lFF,6FAEI,8BDgmFF,CAjBF,CC5kFA,6FAEI,uBDimFF,CCnmFF,6EAKI,uBDkmFF,CCvmFF,uEAQI,2BDmmFF,CC3mFF,8IAYI,4BDqmFF,CClmFF,+EAEI,uBDsmFF,CCnmFF,iFAEI,wBDumFF,CCpmFF,6FAEI,8BDwmFF,CAjBF,CCplFA,0FAEI,sBDymFF,CACF,CCvmFA,gHAEI,sBD0mFF,CACF,CCxmFA,iHAEI,sBD2mFF,CACF,CCzmFA,2FAEI,sBD4mFF,CACF,CA5uSA,yECmoNE,sBD6mFF,CC3mFA,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","sources":["webpack://WebComponents/./ptxrs-bootstrap.less","webpack://WebComponents/./node_modules/bootstrap/dist/css/bootstrap.css","webpack://WebComponents/./runestone/common/css/runestone-custom-sphinx-bootstrap.css","webpack://WebComponents/./runestone/accessibility/css/accessibility.css","webpack://WebComponents/./runestone/common/css/user-highlights.css","webpack://WebComponents/./runestone/matrixeq/css/matrixeq.css","webpack://WebComponents/./runestone/webgldemo/css/webglinteractive.css","webpack://WebComponents/./runestone/common/css/presenter_mode.less","webpack://WebComponents/./runestone/common/css/presenter_mode.css"],"sourcesContent":[".ptx-runestone-container,\n.runestone-sphinx {\n @import (less) url(\"./node_modules/bootstrap/dist/css/bootstrap.css\");\n @import (less) url(\"./runestone/common/css/runestone-custom-sphinx-bootstrap.css\");\n @import (less) url(\"./runestone/accessibility/css/accessibility.css\");\n}\n\n:root {\n --background: #ffffff;\n --outerBackground: #eeeeee;\n --links: #0645ad;\n --bodyFont: var(--body-text-color, #000000);\n --tooltip: #ffffff;\n --grayToWhite: #333333;\n --navbar: #f8f8f8;\n --navbarFont: #707070;\n --navbarFontHover: #000000;\n --alerts: #d9edf7;\n --completionButton: #f19711;\n --completionButtonHover: #ff9f19;\n --completionButtonText: #000000;\n --admonition: #fcf8e3;\n --admonitionBorder: #fbeed5;\n --codeButtons: #474949;\n --codeButtonsBorder: #474949;\n --dangerAlerts: #f2dede;\n --successAlerts: #dff0d8;\n --contentWidthRegular: 660px;\n --contentWidthWide: 1060px;\n --componentBgColor: #f0f8ff;\n --componentBorderColor: #000000;\n --questionBgColor: #e1efff;\n --parsonsBgColor: #ffa;\n --parsonsBorderColor: #ee0;\n --parsonsCorrectBgColor: #dff0d8;\n --parsonsCorrectBorderColor: #ade595;\n --parsonsIncorrectBgColor: #f2dede;\n --parsonsIncorrectBorderColor: #f2b6b6;\n}\n\n:root.dark-mode {\n --background: #2c2f33;\n --outerBackground: #23272a;\n --links: #7289da;\n --bodyFont: var(--body-text-color, #99aab5);\n --tooltip: #000000;\n --grayToWhite: #aaa;\n --navbar: #3d3d3d;\n --navbarFont: #ffffff;\n --navbarFontHover: #d6d6d6;\n --alerts: #714082;\n --completionButton: #650087;\n --completionButtonHover: #560073;\n --completionButtonText: #ffffff;\n --admonition: #3d3d3d;\n --admonitionBorder: #262626;\n --codeButtons: #67739d;\n --codeButtonsBorder: #ffffff;\n --dangerAlerts: #8c2626;\n --successAlerts: #217300;\n --componentBgColor: var(--rs-component-bg, var(--knowl-background, #07467d));\n --componentBorderColor: var(--rs-component-border, var(--knowl-border-color, #939090));\n --questionBgColor: var(--rs-component-bg, var(--knowl-nested-1-background, #0f5a9b));\n --parsonsBgColor: rgb(232, 232, 178);\n --parsonsBorderColor: rgb(168, 168, 45);\n --parsonsCorrectBgColor: #a3c097;\n --parsonsCorrectBorderColor: #60904c;\n --parsonsIncorrectBgColor: #ae9090;\n --parsonsIncorrectBorderColor: #c16b6b;\n}\n\n[data-theme=\"dark\"] {\n --background: #2c2f33;\n --outerBackground: #23272a;\n --links: #7289da;\n --bodyFont: #99aab5;\n --tooltip: #000000;\n --grayToWhite: #ffffff;\n --navbar: #3d3d3d;\n --navbarFont: #ffffff;\n --navbarFontHover: #d6d6d6;\n --alerts: #714082;\n --completionButton: #650087;\n --completionButtonHover: #560073;\n --completionButtonText: #ffffff;\n --admonition: #3d3d3d;\n --admonitionBorder: #262626;\n --codeButtons: #7289da;\n --codeButtonsBorder: #ffffff;\n --dangerAlerts: #8c2626;\n --successAlerts: #217300;\n --componentBgColor: #07467d;\n --componentBorderColor: #939090;\n --questionBgColor: rgb(23, 85, 93);\n}\n\n#scprogresscontainer {\n width: 100%;\n max-width: 500px;\n margin: 10px auto;\n}\n\n#subchapterprogress {\n width: 100%;\n background-color: var(--alerts);\n border: 1px solid var(--grayToWhite);\n border-radius: 5px;\n height: 20px;\n position: relative;\n}\n\n\n.exercise-statement {\n display: block;\n margin-bottom: 1em;\n}\n","/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: none;\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n -moz-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important;\n text-shadow: none !important;\n background: transparent !important;\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: 400;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: \"\\00A0 \\2014\";\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n color: #333333;\n word-break: break-all;\n word-wrap: break-word;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1,\n .col-sm-2,\n .col-sm-3,\n .col-sm-4,\n .col-sm-5,\n .col-sm-6,\n .col-sm-7,\n .col-sm-8,\n .col-sm-9,\n .col-sm-10,\n .col-sm-11,\n .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1,\n .col-md-2,\n .col-md-3,\n .col-md-4,\n .col-md-5,\n .col-md-6,\n .col-md-7,\n .col-md-8,\n .col-md-9,\n .col-md-10,\n .col-md-11,\n .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1,\n .col-lg-2,\n .col-lg-3,\n .col-lg-4,\n .col-lg-5,\n .col-lg-6,\n .col-lg-7,\n .col-lg-8,\n .col-lg-9,\n .col-lg-10,\n .col-lg-11,\n .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n position: static;\n display: table-column;\n float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n display: table-cell;\n float: none;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n min-height: 0.01%;\n overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: 700;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-top: 4px \\9;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n vertical-align: middle;\n cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\n.form-control-static {\n min-height: 34px;\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-right: 0;\n padding-left: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n background-color: #f2dede;\n border-color: #a94442;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n padding-top: 7px;\n margin-top: 0;\n margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n padding-top: 7px;\n margin-bottom: 0;\n text-align: right;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n filter: alpha(opacity=65);\n opacity: 0.65;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n background-image: none;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n background-image: none;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n background-image: none;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n background-image: none;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n background-image: none;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n background-image: none;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n font-weight: 400;\n color: #337ab7;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n -o-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n -o-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n -o-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n background-color: #337ab7;\n outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n content: \"\";\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .navbar-right .dropdown-menu-left {\n right: auto;\n left: 0;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n cursor: default;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n padding-right: 15px;\n padding-left: 15px;\n overflow-x: visible;\n border-top: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-right: 0;\n padding-left: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-brand {\n float: left;\n height: 50px;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-right: 15px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n padding: 10px 15px;\n margin-right: -15px;\n margin-left: -15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-right: 15px;\n margin-left: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n color: #fff;\n background-color: #080808;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n padding: 0 5px;\n color: #ccc;\n content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n margin-left: -1px;\n line-height: 1.42857143;\n color: #337ab7;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n cursor: default;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n text-align: center;\n list-style: none;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n}\n.label {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n padding-right: 15px;\n padding-left: 15px;\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-right: 60px;\n padding-left: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-right: auto;\n margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@-o-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n height: 20px;\n margin-bottom: 20px;\n overflow: hidden;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n -webkit-background-size: 40px 40px;\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n padding-left: 0;\n margin-bottom: 20px;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #eeeeee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n color: #555;\n text-decoration: none;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-right: 15px;\n padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n margin-bottom: 0;\n border: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n filter: alpha(opacity=20);\n opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: -webkit-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.modal-backdrop.in {\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-bottom: 0;\n margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 12px;\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.tooltip.in {\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.tooltip.top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.tooltip.right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.tooltip.bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.tooltip.left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n right: 5px;\n bottom: 0;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow:after {\n content: \"\";\n border-width: 10px;\n}\n.popover.top > .arrow {\n bottom: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n bottom: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-color: #fff;\n border-bottom-width: 0;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n border-left-width: 0;\n}\n.popover.right > .arrow:after {\n bottom: -10px;\n left: 1px;\n content: \" \";\n border-right-color: #fff;\n border-left-width: 0;\n}\n.popover.bottom > .arrow {\n top: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.bottom > .arrow:after {\n top: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n right: 1px;\n bottom: -10px;\n content: \" \";\n border-right-width: 0;\n border-left-color: #fff;\n}\n.popover-title {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner > .item {\n position: relative;\n display: none;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: -webkit-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 15%;\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control.right {\n right: 0;\n left: auto;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n}\n.carousel-control .icon-prev:before {\n content: \"\\2039\";\n}\n.carousel-control .icon-next:before {\n content: \"\\203a\";\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n border: 1px solid #fff;\n border-radius: 10px;\n}\n.carousel-indicators .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n display: table;\n content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/* Variables holding theme colors */\n:root {\n --background: #ffffff;\n --outerBackground: #eeeeee;\n --links: #0645ad;\n --bodyFont: #000000;\n --tooltip: #ffffff;\n --grayToWhite: #333333;\n --navbar: #f8f8f8;\n --navbarFont: #707070;\n --navbarFontHover: #000000;\n --alerts: #d9edf7;\n --completionButton: #f19711;\n --completionButtonHover: #ff9f19;\n --admonition: #fcf8e3;\n --admonitionBorder: #fbeed5;\n --codeButtons: #474949;\n --codeButtonsBorder: #474949;\n --dangerAlerts: #f2dede;\n --successAlerts: #dff0d8;\n --contentWidthRegular: 660px;\n --contentWidthWide: 1060px;\n --componentBgColor: #f0f8ff;\n --componentBorderColor: #000000;\n --questionBgColor: #e1efff;\n}\n\n/* @media (prefers-color-scheme: dark) {\n :root {\n --background: #2c2f33;\n --outerBackground: #23272a;\n --links: #7289da;\n --bodyFont: #99aab5;\n --tooltip: #000000;\n --grayToWhite: #ffffff;\n --navbar: #3d3d3d;\n --navbarFont: #ffffff;\n --navbarFontHover: #d6d6d6;\n --alerts: #714082;\n --completionButton: #650087;\n --completionButtonHover: #560073;\n --admonition: #3d3d3d;\n --admonitionBorder: #262626;\n --codeButtons: #7289da;\n --codeButtonsBorder: #ffffff;\n --dangerAlerts: #8c2626;\n --successAlerts: #217300;\n --componentBgColor: #07467d;\n --componentBorderColor: #939090;\n --questionBgColor: rgb(23, 85, 93);\n }\n}\n\nNeeded??? */\n[data-theme=\"dark\"] {\n --background: #2c2f33;\n --outerBackground: #23272a;\n --links: #7289da;\n --bodyFont: #99aab5;\n --tooltip: #000000;\n --grayToWhite: #ffffff;\n --navbar: #3d3d3d;\n --navbarFont: #ffffff;\n --navbarFontHover: #d6d6d6;\n --alerts: #714082;\n --completionButton: #650087;\n --completionButtonHover: #560073;\n --admonition: #3d3d3d;\n --admonitionBorder: #262626;\n --codeButtons: #7289da;\n --codeButtonsBorder: #ffffff;\n --dangerAlerts: #8c2626;\n --successAlerts: #217300;\n --componentBgColor: #07467d;\n --componentBorderColor: #939090;\n --questionBgColor: rgb(23, 85, 93);\n}\n\n/* for assignment navigation */\ndiv.assignment-nav {\n background-color: var(--componentBgColor);\n border-style: solid;\n border-color: var(--componentBorderColor);\n border-width: 1px;\n padding-bottom: 5px;\n padding-top: 5px;\n\n}\n\n/* custom modification of basic.css for color-contrast (AA compliant) */\ntd.linenos pre {\n color: #6b6b6b;\n}\n\n/* custom modification of prettify.css for color-contrast (AA compliant) */\n.str {\n color: #006b00;\n}\n\n/* custom modification of parsons.css for color-contrast (AA compliant) */\n.parsons .block {\n background-color: #fafafa;\n}\n\n/* custom modification of pygments.css for color-contrast (AA compliant) */\n.highlight .c1 {\n color: #376a7b;\n}\n\n.highlight .nn {\n color: #0f6c95;\n}\n\n.highlight .gp {\n color: #a14c08;\n}\n\n.highlight .si {\n color: #3c773d;\n}\n\n.highlight .nc {\n color: #0b719d;\n}\n\n/* `Search` functionality's result custom modification for color-contrast (AA compliant) */\nul.search li div.context {\n color: #6b6b6b;\n}\n\nspan.highlighted {\n color: #4d4d4d;\n}\n\n/* ActiveCode gutter custom modification for color-contrast (AA compliant) */\n\n.CodeMirror-linenumber {\n color: #6b6b6b;\n}\n\n.alert-warning {\n background-color: var(--admonition);\n border-color: var(--admonitionBorder);\n}\n\n/* Python code output custom modification for color-contrast (AA compliant) */\ndiv.ExecutionVisualizer table#pyCodeOutput .lineNo {\n color: #6b6b6b;\n}\n\n/* Runestone custom modifications */\n\nbody {\n counter-reset: rscomponent;\n padding-top: 60px;\n background-color: var(--outerBackground);\n}\n\nh5 {\n font-weight: bold;\n padding: 10px 0;\n}\n\n/* table-of-contents related styles for color-contrast (AA compliant) */\n#table-of-contents a {\n color: var(--links);\n}\n\n#table-of-contents a:hover {\n color: var(--links);\n text-decoration: underline;\n}\n\n#table-of-contents.section {\n font-size: 16px;\n}\n\n/* navbar-brand color contrast (AA compliant) */\n.navbar-default {\n background-color: var(--navbar);\n}\n\n.navbar-default .navbar-nav > li {\n color: var(--navbarFont);\n}\n\n.navbar-default .navbar-nav > li > a {\n color: var(--navbarFont);\n}\n\n.navbar-default .navbar-nav > li > a:hover {\n color: var(--navbarFontHover);\n}\n\n.navbar-default .navbar-brand {\n color: var(--navbarFont);\n}\n\n/* acknowledgement related styles for color-contrast (AA compliant) */\n.toctree-wrapper {\n font-size: 16px;\n}\n\n.toctree-wrapper a {\n color: var(--links);\n}\n\n.toctree-wrapper a:hover {\n color: var(--links);\n text-decoration: underline;\n}\n\n/* index and search related styles for color-contrast (AA compliant) */\n#index-and-search.section {\n font-size: 16px;\n}\n\n#index-and-search.section a {\n color: var(--links);\n}\n\n#index-and-search.section a:hover {\n color: var(--links);\n text-decoration: underline;\n}\n\n/* custom style for `a` tag for color-contrast (AA compliant) */\n\na {\n color: var(--links);\n}\n\n/* navbar and menu related styles */\n@media (max-width: 768px) {\n /* Remove top padding when top navbar goes collapsed in narrow viewports */\n body {\n padding-top: 0;\n }\n\n .navbar-fixed-top {\n position: static;\n }\n}\n\n@media (min-width: 768px) {\n /* when navbar is collapsed we don't want any vertical dividers taking up space */\n .navbar .divider-vertical {\n margin: 0 3px;\n border-left: 1px solid #f2f2f2;\n }\n\n .navbar-fixed-top .container {\n padding: 0;\n }\n}\n\ndiv.container {\n background-color: var(--background);\n}\n\n.container {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.runestone {\n clear: both;\n background-color: var(--componentBgColor);\n padding: 15px;\n border-style: solid;\n border-color: var(--componentBorderColor);\n border-radius: 10px;\n margin-bottom: 20px;\n margin-top: 20px;\n }\n\n/* Sets width of content \"column\" */\n#main-content section > *:not(section) {\n max-width: var(--contentWidthRegular);\n margin-left: auto;\n margin-right: auto;\n\n}\n\n/* Handle content in nested sections by allowing them to grow*/\n#main-content section > section,\n/* And then make sure a few items are wider by default */\n#main-content section > .runestone.ac_section,\n#main-content section > .runestone.codelens,\n#main-content section > .question,\n#main-content section > .runestone.parsons-container,\n#main-content section > .runestone.parsons-problems,\n#main-content section > .codelens,\n#main-content section > .timedAssessment,\n#main-content section > .jupyterlite_sphinx_iframe_container\n{\n max-width: var(--contentWidthWide);\n margin-left: auto;\n margin-right: auto;\n}\n\n/* Allow individual elements to request being larger */\n#main-content section > .full-width {\n max-width: var(--contentWidthWide);\n}\n\n.container section > img {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.container-fluid > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container > .navbar-header {\n margin-left: 0;\n margin-right: 0;\n}\n\n.navbar > .container .navbar-brand {\n margin-left: 0;\n}\n\n.navbar > .container {\n background-color: var(--navbar);\n}\n\n.navbar-toggle {\n margin-right: 0px;\n}\n\n.footer > .container {\n background-color: var(--outerBackground);\n}\n\n.footer > .container p > a {\n color: var(--links);\n}\n\n.brand-logo {\n float: left;\n display: block;\n margin-top: 4px;\n}\n\n.brand-logo img {\n height: 40px;\n}\n\n.social-menu {\n width: 220px;\n padding: 10px 10px 15px 20px;\n}\n\n.fb-like {\n margin-top: 7px;\n}\n\n.fb_iframe_widget span,\n.fb_iframe_widget iframe {\n height: 20px !important;\n width: 82px !important;\n}\n\n.twitter-follow-button {\n margin-top: 10px;\n}\n\n.gittip {\n margin-top: 8px;\n}\n\n.gittip-button {\n margin-bottom: -6px;\n}\n\n.dropdown-menu > li > span,\n.dropdown-menu > li > div,\n.dropdown-menu > li > label {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: bold;\n line-height: 20px;\n color: var(--grayToWhite);\n white-space: nowrap;\n}\n\n.dropdown-menu > li > label:hover, .dropdown-menu > li > label:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n\n.dropdown-menu > li > a {\n color: var(--grayToWhite);\n}\n\n.loggedinuser {\n font-weight: bold;\n}\n\n/* end navbar and menu related styles */\n.CodeMirror {\n margin: 0 0 1em 0;\n background-color: var(--background);\n clear: both;\n}\n\n.ac_section .CodeMirror pre {\n -moz-border-radius: 0;\n -webkit-border-radius: 0;\n -o-border-radius: 0;\n border-radius: 0;\n border-width: 0;\n margin: 0;\n padding: 0;\n background: transparent;\n font-family: Menlo, Monaco, Consolas,\"Courier New\", monospace;\n font-size: inherit;\n padding: 0;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n}\n\nbutton.btn,\nbtn.btn-sm,\ninput[type=\"submit\"].btn.btn-sm,\ninput[type=\"button\"].btn.btn-sm {\n font-size: 1em;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n\n/* Fix search menu button */\n.dropdown-menu .input-group .input-group-btn button.btn {\n font-size: 14px;\n}\n\n.btn {\n margin: 5px;\n}\n\n.btn.disabled {\n /* needed in Bootstrap 3 to allow tooltips on disabled buttons */\n pointer-events: auto;\n}\n\n.btn-default,\n.btn-default.disabled,\n.btn-default[disabled],\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover {\n color: #ffffff;\n background-color: var(--codeButtons);\n border-color: var(codeButtonsBorder);\n}\n\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active {\n background-color: #3a3c3c;\n border-color: #2e2f2f;\n color: #ffffff;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin-right: 5px;\n}\n\n.tooltip {\n z-index: 2000 !important;\n}\n\n.tooltip.in {\n opacity: 0.8;\n filter: alpha(opacity=80);\n}\n\nh2 {\n margin-top: 20px;\n}\n\n.alert form {\n margin-bottom: 0;\n}\n\n/* default bookstrap alert color is hard to read (low contrast). */\n.alert {\n color: var(--grayToWhite);\n padding: 10px;\n}\n\n.alert-info {\n background-color: var(--alerts);\n}\n\n.alert-danger {\n background-color: var(--dangerAlerts);\n}\n\n.alert-success {\n background-color: var(--successAlerts);\n}\n\n/* override the color styles applied by Skulpt to the unittest results divs */\n.unittest-results.alert-danger {\n background-color: var(--dangerAlerts) !important;\n}\n\n.unittest-results.alert-success {\n background-color: var(--successAlerts) !important;\n}\n\n.alert label {\n font-weight: normal;\n}\n\n.navbar_message {\n margin-top: 15px;\n font-weight: bold;\n}\n/*\nMissing brackets\n================\nThe default styling from Sphinx's ``basic.css`` doesn't style multiple references to the same reference with brackets. Here's the relevant snippet of CSS:\n\n.. code-block:: CSS\n :number-lines:\n\n a.brackets:before,\n span.brackets > a:before{\n content: \"[\";\n }\n\n a.brackets:after,\n span.brackets > a:after {\n content: \"]\";\n }\n\nThe HTML for a footnote reference is:\n\n.. code-block:: HTML\n :number-lines:\n\n 2\n\nThe HTML for a typical footnote is:\n\n.. code-block:: HTML\n :number-lines:\n\n
    \n
    \n \n 1\n \n
    \n
    Omitted this...
    \n
    \n\nThe HTML for a footnote referenced multiple times is:\n\n.. code-block:: HTML\n :number-lines:\n\n
    \n
    \n 1\n \n (1,2,3)\n \n
    \n
    Omitted this...
    \n
    \n\nHowever, there's no (current) CSS selector that will add a ``content`` to the multiply-referenced footnote without adding an additional ``content`` to the typical footnote: we want to select ``dt.label > span.brackets > text-only content`` or ``dt.label > span.brackets > :not(:has a)`` (see the unsupported `:has selector `_. So, I see no solution for this (outside JS).\n\n\nIncorrect color\n===============\nSecond, the Bootstrap theme (v3.4.1) contains the following CSS, from ``node_modules/bootstrap/dist/css/less/labels.less``:\n\n.. code-block:: CSS\n :number-lines:\n\n .label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n ...more here omitted...\n }\n\nALL this therefore gets applied to footnotes, since they have the ``label`` class. Because the ``@label-color`` is white, this CSS makes the reference invisible against the default (light mode) white background. I like the rest of the styling changes (even though they differ from the standard Sphinx settings), so only the color is changed.\n*/\ndt.label > span.brackets:not(span.brackets > a),\ndt.label > span.fn-backref:not(span.fn-backref > a) {\n color: black;\n}\n\n/* These admonition styles styles are copied from the Bootstrap .alert classes.\n Most of the !important declarations are to override the Sphinx basic.css styles */\n.admonition {\n padding: 8px 35px 8px 14px !important;\n margin-bottom: 20px !important;\n margin-top: 20px !important;\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n background-color: var(--admonition);\n border: 1px solid #fbeed5;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n}\n\n/* .alert-danger */\n.admonition.caution {\n color: #a33f3e;\n background-color: #f2dede;\n border-color: #eed3d7;\n}\n\n/* .alert-info */\n.admonition.tip,\n.admonition.note {\n color: #333;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n\n/* from web2py.css */\ndiv.flash {\n font-weight: bold;\n position: fixed;\n padding: 10px;\n top: 55px;\n right: 45px;\n opacity: 0.95;\n margin: 0 0 10px 10px;\n vertical-align: middle;\n cursor: pointer;\n color: #ffffff;\n background-color: #000;\n border: 2px solid #fff;\n border-radius: 8px;\n -moz-border-radius: 8px;\n -webkit-border-radius: 8px;\n background-image: -webkit-linear-gradient(top, #222, #000);\n background-image: -o-linear-gradient(top, #222, #000);\n background-image: -moz-linear-gradient(90deg, #222, #000);\n background-image: linear-gradient(top, #222, #000);\n background-repeat: repeat-x;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n z-index: 2000;\n}\n\n/* Styles for the login, registration, and Janrain forms */\n#web2py_user_form {\n margin-top: 10px;\n}\n\n#web2py_user_form form {\n float: left;\n margin-right: 150px;\n padding-top: 3px;\n}\n\n#web2py_user_form td {\n padding-bottom: 15px;\n}\n\n#web2py_user_form td.w2p_fw {\n width: 299px;\n}\n\n#auth-actions {\n margin-top: 50px;\n}\n\n#sign_in_text td {\n font-size: 17px;\n color: #333;\n font-family: \"lucida grande\", Verdana, sans-serif;\n padding-bottom: 13px;\n}\n\n#auth_user_remember {\n margin-top: -20px;\n}\n\n/* End login, registration, Janrain styles */\n\n/* end-of-chapter exercises styles */\n#exercises > ol > li,\n#programming-exercises > ol > li {\n margin-bottom: 30px;\n}\n\n#exercises > ol > li:nth-child(even),\n#programming-exercises > ol > li:nth-child(even) {\n padding: 1.2em 1.4em;\n background: #faf7df;\n border: 1px solid #fbeed5;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n}\n\n/* End chapter exercises styles */\n\n/* Modal dialog styles (scratch activecode, compare me, etc) */\n.scratch-ac-modal {\n width: 90%;\n max-height: 90%;\n overflow-y: scroll;\n}\n\n.compare-modal .progress {\n margin-bottom: 0;\n}\n\n.compare-me-progress {\n width: 100%;\n}\n\n.compare-me-progress .progress-bar,\n.unittest-results-progress .progress-bar {\n color: #333;\n}\n\n\n.unittest-results-progress {\n width: 25%;\n}\n\n.compare-modal {\n width: 350px;\n}\n\n.compare-modal table {\n border-collapse: separate;\n border-spacing: 10px 5px;\n}\n\n.codelens-modal {\n /* we set some custom position styles so that the modal doesn't obscure the codelens visualizer */\n top: 20%;\n right: 20%;\n left: auto;\n bottom: auto;\n}\n\n@media (max-width: 768px) {\n /* remove any custom position styles when the screen is small (mobile devices)\n to prevent the modal from being partially off the screen */\n .codelens-modal {\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: 0 !important;\n }\n}\n\n.codelens-modal > .modal-dialog {\n width: 400px;\n}\n\n/* End modal dialog styles */\n\n.footnote.table {\n width: auto;\n margin-bottom: 10px;\n}\n\n.footnote.table td.label {\n padding: 2px 5px 2px 5px;\n background-color: #d9edf7;\n}\n\n.ac-canvas {\n background-color: white;\n display: inline-block;\n}\n\n.video-play-overlay {\n position: relative;\n top: -150px;\n left: 44%;\n height: 85px;\n width: 130px;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n.video_popup video {\n width: var(--contentWidthRegular);\n cursor: pointer;\n}\n\n.ui-sortable-helper {\n height: auto !important;\n width: auto !important;\n}\n\n.navLink {\n z-index: 2;\n display: inline;\n bottom: 65px;\n position: fixed;\n opacity: 0.4;\n}\n\n.navLink:hover {\n opacity: 1;\n}\n\n.navLink a {\n display: inline-block;\n background-color: white;\n border-style: solid;\n border-color: lightgrey;\n border-width: 2px;\n width: 100px;\n height: 50px;\n}\n\n#relations-next {\n right: 35px;\n}\n\n#relations-prev {\n left: 35px;\n}\n\n.nextprev-list {\n margin: 10px;\n padding-left: 0;\n height: 50px;\n}\n\n@media (max-width: 600px) {\n .navLink {\n display: inline-block;\n bottom: auto;\n position: absolute;\n }\n\n #relations-next,\n #relations-prev {\n width: 25%;\n padding: 0 20px;\n display: inline;\n }\n}\n\n#completionButton {\n margin-top: 25px;\n margin-bottom: 15px;\n padding-left: 70px;\n padding-right: 70px;\n color: var(--completionButtonText);\n font-weight: bold;\n}\n\n.buttonAskCompletion {\n background-color: var(--completionButton);\n border-color: var(--completionButtonHover);\n font-weight: bold;\n}\n\n.buttonAskCompletion:hover {\n background-color: var(--completionButtonHover);\n border-color: var(--completionButtonHover);\n}\n\n.buttonConfirmCompletion {\n background-color: #377e22;\n border-color: #3dc682;\n color: #ffffff !important;\n}\n\n.buttonConfirmCompletion:hover {\n background-color: #3dc682;\n border-color: #3dc682;\n}\n\n.navLinkBg {\n height: 40px;\n background-color: #ffffff;\n z-index: 1;\n position: fixed;\n bottom: 55px;\n color: #999;\n font-weight: bold;\n -webkit-box-shadow: 0px 0px 3px rgba(50, 50, 50, 0.5);\n -moz-box-shadow: 0px 0px 3px rgba(50, 50, 50, 0.5);\n box-shadow: 0px 0px 3px rgba(50, 50, 50, 0.5);\n}\n\n.navLinkBg:hover {\n color: #999;\n}\n\n#navLinkBgRight {\n right: -1000px;\n padding: 10px 15px 0 65px;\n}\n\n#navLinkBgLeft {\n left: -65px;\n padding-left: 15px;\n padding-right: 50px;\n}\n\n.activehtml {\n width: 100%;\n height: 400px;\n background-color: #ffffff;\n}\n\n.container section > div.sidebar {\n margin: 0 0 0.5em 1em;\n}\n\na.disqus_thread_link {\n display: block;\n}\n\n.reveal_button {\n display: block;\n margin-left: 0;\n}\n\niframe[seamless] {\n display: block;\n}\n\n@media (min-width: 768px) {\n .container section > div.sidebar {\n margin: 0 3em 0.5em 1em;\n }\n}\n\n@media (min-width: 992px) {\n .container section > div.sidebar {\n margin: 0 11em 0.5em 1em;\n }\n}\n\n@media (min-width: 1200px) {\n .container section > div.sidebar {\n margin: 0 18em 0.5em 1em;\n }\n}\n\ndiv.ExecutionVisualizer table.visualizer {\n width: auto;\n margin-left: auto;\n margin-right: auto;\n background-color: #ffffff;\n}\n\n.sltooltip {\n position: absolute;\n z-index: 1020;\n display: block;\n padding-bottom: 5px;\n font-size: 11px;\n visibility: visible;\n margin-top: -2px;\n bottom: 120%;\n margin-left: -2em;\n}\n\n.sltooltip .sltooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-top: 5px solid #000000;\n border-right: 5px solid transparent;\n border-left: 5px solid transparent;\n position: absolute;\n width: 0;\n height: 0;\n}\n\n.sltooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: var(--tooltip);\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n}\n\nul.dropdown-menu.globaltoc {\n max-height: 700px;\n overflow: auto;\n}\n\n.globaltoc span.caption-text {\n display: inline-block;\n font-weight: bold;\n font-size: large;\n}\n\n/* Style lp textareas. */\ntextarea.lp-result {\n width: 100%;\n height: 10em;\n font-family: monospace;\n}\n\n/*\n * Hide only visually, but have it available for screen readers:\n * https://snook.ca/archives/html_and_css/hiding-content-for-accessibility\n *\n * 1. For long content, line feeds are not interpreted as spaces and small width\n * causes content to wrap 1 word per line:\n * https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe\n */\n\n.visuallyhidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n white-space: nowrap;\n /* 1 */\n}\n\n/*\n * Extends the .visuallyhidden class to allow the element\n * to be focusable when navigated to via the keyboard:\n * https://www.drupal.org/node/897638\n */\n\n.visuallyhidden.focusable:active,\n.visuallyhidden.focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n white-space: inherit;\n}\n\n.blockquote {\n text-align: center;\n font-size: large;\n font-style: italic;\n padding-left: 2em;\n padding-right: 2em;\n}\n\n\n#subchapterprogress.ui-progressbar .ui-progressbar-value {\n margin: 0;\n border-radius: 0px;\n}\n\n#subchapterprogress > div {\n background: green;\n}\n\n#subchapterprogress > div.loggedout {\n background: lightgray;\n}\n\n.runestone_caption {\n text-align: center;\n}\n\n.runestone_caption_divid {\n opacity: 50%;\n}\n\n#questions .runestone_caption:before {\n counter-increment: rscomponent;\n content: \"Problem: \" counter(rscomponent) \" -- \";\n}\n\nbody {\n color: var(--bodyFont);\n}\n\n.jupyter_container .output {\n margin-top: 10px;\n}\n\n.jupyter_container .output td {\n padding-left: 5px;\n padding-right: 5px;\n}\n\n.jupyter_container .output th {\n padding-left: 5px;\n padding-right: 5px;\n}\n\n/*Theme toggle*/\n.dropdown-menu > li > label.theme-switch {\n display: flex;\n align-items: center;\n font-weight: normal;\n cursor: pointer;\n}\n\n.theme-switch input {\n display: none;\n}\n\n.theme-switch .slider {\nbackground-color: #ccc;\nheight: 1.25em;\nwidth: 2em;\ntransition: 0.4s;\nposition: relative;\nmargin-right: 3px;\n}\n\n.theme-switch .slider:before {\n background-color: #fff;\n bottom: 2px;\n content: \"\";\n height: calc(1.25em - 4px);\n left: 2px;\n position: absolute;\n transition: 0.4s;\n width: calc(1.25em - 4px);\n}\n\n.theme-switch input:checked + .slider {\n background-color: #66bb6a;\n}\n\n.theme-switch input:checked + .slider:before {\n transform: translateX( calc(0.75em - 1px) );\n}\n\n.theme-switch .slider.round {\n border-radius: 1.25em;\n}\n\n.theme-switch .slider.round:before {\n border-radius: 1.25em;\n}\n/*End theme toggle*/\n\n/* for ads */\n.adcopy {\n width: 60%;\n background-color: #f2e0c3;\n padding: 10px;\n margin-left: auto;\n margin-right: auto;\n margin-top: 10px;\n border: solid black 2px;\n border-radius: 10px;\n}\n\n.adcopy .donateb {\n\n margin-left: 30%;\n}\n\n.isCorrect:before {\n /*content: url(https://em-content.zobj.net/thumbs/240/apple/325/check-mark_2714-fe0f.png);*/\n content: \"✅ \";\n float:right;\n padding-left: 4px;\n}\n\n.isInCorrect:before {\n /*content: url(https://em-content.zobj.net/thumbs/240/apple/325/check-mark_2714-fe0f.png);*/\n content: \"⚠️ \";\n float:right;\n padding-left: 4px;\n}\n\n/* ---------------------------------------------------------- */\n/* Redo some PreTeXt styles undone by Bootstrap */\npre {\n color: inherit;\n background: inherit;\n}\n\nsummary.ptx-footnote__number {\n display: inline;\n}\n\nsummary.knowl__link {\n display: list-item inline;\n}\n\ndetails.ptx-footnote {\n display: inline;\n}\n/* ---------------------------------------------------------- */\n\n.handsontable td, .handsontable th {\n background-color: var(--content-background, #fff);\n color: var(--bodyFont, #000);\n}\n\n\nlegend {\n /* allow darkmode to override legend color */\n color: var(--grayToWhite, #333);\n border-bottom-color: var(--grayToWhite, #333);\n}\n\n.autopermalink {\n display: none;\n}","/*\n**********************************************\n|docname| - a WCAG 2.0 AA compliant stylesheet\n**********************************************\n*/\n\n/* Variables holding theme colors */\n:root {\n\t--codebuttons: #474949;\n}\n[data-theme=\"dark\"] {\n\t--codebuttons: #2c0aa6;\n}\n/*Navigation Tabbing Styling*/\nli.dropdown.open a.dropdown-toggle, li.dropdown.open a.dropdown-toggle:focus {\n\tborder:0px !important;\n\t/*background-color: #346A6E!important;*/\n\tbackground-color: #2A5659 !important;\n\tcolor:#F8F8F8 !important;\n}\na.dropdown-toggle:focus {\n\t /*border:1px solid #5B9DD9 !important;\n\t color:#5B9DD9 !important;\n\t width:48px !important;*/\n\t background-color: #52A6AC!important;\n\t color:#F8F8F8 !important;\n}\n/* Border Manipulation */\nli.divider-vertical {\n\tmargin:0px !important;\n}\nli.dropdown a.dropdown-toggle {\n\tpadding:15px 18px !important;\n}\n\n/*\nBootstrap button styling\n*/\n\n/* Default Button */\n/* Passes WCAG 2.0 */\nbutton.btn.btn-default:active {\n\tcolor:#474949 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-default:focus {\n\tcolor:#474949 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-default{\n\tcolor:#FFFFFF !important;\n\tbackground-color: rgb(71, 73, 73) !important;\n}\nbutton.btn.btn-default.btn-sm.disabled:active {\n\tcolor:#474949 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-default.btn-sm.disabled:focus {\n\tcolor:#474949 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-default.btn-sm.disabled{\n\tcolor:#FFFFFF !important;\n\tbackground-color:#474949 !important;\n}\n/* Sucess Button */\n/* Failed WCAG 2.0, #255425 passes */\nbutton.btn.btn-success:active {\n\tcolor:#427e44 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-success:focus {\n\tcolor:#427e44!important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-success {\n\tcolor:#FFFFFF !important;\n\tbackground-color:#427e44!important;\n}\n\n/*Primary Button*/\n/* fails WCAG 2.0, #265986 passes */\nbutton.btn.btn-primary:active {\n\tcolor:#3379b6!important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-primary:focus {\n\tcolor:#3379b6 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-primary {\n\tcolor:#FFFFFF !important;\n\tbackground-color:#3379b6 !important;\n}\n\n\n/*Info Button */\n/* Fails, WCAG 2.0, #155569 passes*/\nbutton.btn.btn-info:active {\n\tcolor:#1a6a83!important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-info:focus {\n\tcolor:#1a6a83 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-info{\n\tcolor:#FFFFFF !important;\n\tbackground-color:#1a6a83 !important;\n}\n\n/*Warning Button*/\n/*Fails WCAG 2.0, #794b0b*/\nbutton.btn.btn-warning:active {\n\tcolor:#945c0e !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-warning:focus {\n\tcolor:#945c0e !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-warning {\n\tcolor:#FFFFFF !important;\n\tbackground-color:#945c0e !important;\n}\n\n/*Danger Button */\n/*Fails, #a62924 passes*/\nbutton.btn.btn-danger:active {\n\tcolor:#d33a35 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-danger:focus {\n\tcolor:#d33a35 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-danger{\n\tcolor:#FFFFFF !important;\n\tbackground-color:#d33a35 !important;\n}\n\n/*Link Button*/\n/*Fails AAA, passes with #265986*/\nbutton.btn.btn-link:active {\n\tcolor:#FFFFFF!important;\n\tbackground-color:#1a6a83 !important;\n}\nbutton.btn.btn-link:focus {\n\tcolor:#FFFFFF !important;\n\tbackground-color:#1a6a83 !important;\n}\nbutton.btn.btn-link {\n\tcolor:#1a6a83 !important;\n\tbackground-color:#FFFFFF !important;\n}","/* Variables holding theme colors */\n:root {\n\t--menu: #FFFFFF;\n}\n\n[data-theme=\"dark\"] {\n\t--menu: #000000;\n}\n\n.my-highlighted-text{\n\tbackground-color:#FFFF99;\n}\n.social-highlighted-text{\n\tbackground-color:#FFCCCC;\n}\n.highlight-option-box{\n\tposition:absolute;\n\ttop:0px;\n\tleft:0px;\n}\n.highlight-option-box li{ \n\theight:24px;\n}\n#continue-reading{\n\tpadding-top:20px;\n\tdisplay: none;\n}\n#continue-reading a{\n\tfloat:right;\n\tmargin-right:20px;\n}\nli.completed\n{\nlist-style-image: url('completed.png');\n}\nli.active\n{\nlist-style-image: url('active.png');\n}\n.infoTextCompleted{\n\tmargin-left:10px;\n\tfont-size:0.9em;\n\tcolor:#3dc682;\n\tdisplay:none;\n\tfont-style:italic;\n\topacity: 0.7;\n}\n.infoTextActive{\n\tmargin-left:10px;\n\tfont-size:0.9em;\n\tcolor:#ff9f19;\n\tdisplay:none;\n\tfont-style:italic;\n\topacity: 0.7;\n}\n.dropdown-menu{\n\tbackground-clip: padding-box;\n background-color: var(--menu);\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 5px 5px 5px 5px;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n display: none;\n list-style: none outside none;\n margin: 1px 0 0;\n min-width: 160px;\n padding: 4px 0;\n position: absolute;\n top: 100%;\n z-index: 1000;\n}\n.dropdown-menu ul {\n list-style: disc outside none;\n margin: 0 0 9px 25px;\n padding: 0;\n}\n\n.sidebar-highlights{\n background-color:#FFFF99;\n}\ndiv.documentwrapper {\n\tborder : 0 none;\n}\ndiv.bodywrapper {\n\tborder-right: 0 none;\n}\ndiv.sphinxsidebar {\n\tborder-left: 1px solid #CCCCCC;\n\tpadding-left: 10px;\n}\n.body>.section .section{\n\tpadding-top: 1px;\n}\n#jump-to-chapter{\n border: 1px solid #CCCCCC;\n letter-spacing: 0.015em;\n line-height: 120%;\n padding: 0.5em;\n\twidth: 80%;\n\tmargin-left: auto;\n\tmargin-right: auto;\n}\n#navigation-links{\n\tbackground-color: #F8F8F8;\n border: 1px solid #CCCCCC;\n\tpadding:10px;\n\tmargin:10px;\n}\n",".matrixeq_container {\n padding: 6px 6px 6px 6px;\n margin: 0px 0px 6px 0px;\n}\n\nspan.matrix_table {\n display: inline-table;\n background-color: inherit;\n border-width: 2px 2px;\n border-style: solid;\n border-color: black;\n text-align: center;\n padding: 0px 1px;\n margin: 0px 0px 4px 0px;\n overflow: visible;\n}\n\nspan.matrix_column {\n display: inline-table;\n background-color: inherit;\n padding: 2px 8px 2px 8px;\n margin: 0px 1px;\n border-width: 0px 0px 0px 0px;\n font-family: monospace;\n font-size: 12px;\n vertical-align: middle;\n}\n\nspan.matrix_column div {\n display: block;\n margin: 1px;\n padding: 2px;\n background-color: inherit;\n}\n\nspan.matrix_table .matrix_column {\n border-style: none;\n margin-left: 5px;\n margin-right: 5px;\n}\n\nspan.matrix_table:before {\n content: \" \";\n background-color: inherit;\n width: 85%;\n text-align: center;\n height: 2px;\n position: relative;\n top: -2px;\n z-index: 100;\n display: block;\n margin: 0px auto;\n}\n\nspan.matrix_table:after {\n content: \" \";\n background-color: inherit;\n width: 85%;\n text-align: center;\n height: 2px;\n position: relative;\n top: 2px;\n z-index: 100;\n display: block;\n margin: 0px auto;\n}\n\nspan.matrix_column:before {\n content: \" \";\n width: 85%;\n height: 2px;\n position: relative;\n top: -2px;\n z-index: 100;\n display: block;\n}\n\nspan.matrix_column:after {\n content: \" \";\n width: 85%;\n height: 2px;\n position: relative;\n top: 2px;\n z-index: 100;\n display: block;\n}\n\nspan.matrix_table span.matrix_column:before {\n height: 0px;\n}\n\nspan.matrix_table span.matrix_column:after {\n height: 0px;\n}\n\nspan.matrix_table input[type=\"text\"] {\n display: block;\n margin: 0;\n width: 50px;\n height: 24px;\n font-family: sans-serif;\n font-size: 12px;\n appearance: none;\n box-shadow: none;\n text-align: right;\n background-color: inherit;\n}\n\nspan.matrix_operator {\n display: inline-table;\n padding: 0px;\n margin: 0px 4px 0px 4px;\n font-family: monospace;\n font-size: 18px;\n vertical-align: middle;\n}\n\nspan.matrix_label {\n display: inline-table;\n padding: 0px 0px 0px 20px;\n margin: 0px 1px;\n font-family: sans-serif;\n font-size: 12px;\n vertical-align: middle;\n}\n\n/* Colors for matrix highlighting */\n\n.lightcyanColor {\n background-color: lightcyan;\n}\n\n.lightgreyColor {\n background-color: lightgrey;\n}\n\n.purpleColor {\n background-color: #DFB5E8;\n}\n\n.yellowColor {\n background-color: #FDFF9D;\n}\n\n\n\n","/********************* Colour reference chart****************\nelememt ********* property ********* colour ********\n\nwebgl_container background-color #fcf8e3\n\n*/\n\n/* Major sections */\n.webgl_container {\n background-color: #fcf8e3;\n box-sizing: border-box;\n width: 100%;\n display: block;\n margin-bottom: 1em;\n}\n\n.webgl_cmds {\n box-sizing: border-box;\n width: 100%;\n text-align: center;\n padding: 6px;\n}\n\n.webgl_row2 {\n box-sizing: border-box;\n width: 100%;\n padding: 0px 4px 0px 4px;\n display: block;\n height: 550px;\n}\n\n.webgl_editors {\n box-sizing: border-box;\n float: left;\n display: block;\n visibility: visible;\n width: 50%;\n}\n\n.webgl_canvas {\n box-sizing: border-box;\n float: left;\n display: block;\n visibility: visible;\n font-size: 12px;\n font-weight: normal;\n padding-left: 5px;\n width: 50%;\n}\n\n.webgl_output {\n box-sizing: border-box;\n width: 100%;\n padding: 4px;\n margin-top: 6px;\n float: left;\n}\n\n/* Details within each section */\n/* Tabbed titles, ul horizontal list */\n.webgl_nav_tabs {\n height: 31px;\n width: 100%;\n margin: 0px;\n padding: 6px 0px 0px 0px;\n background-color: #CFCCB8;\n border-color: #fbeed5;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n list-style-type: none;\n overflow: hidden;\n display: inline-flex;\n}\n\n.webgl_nav_tabs li {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n margin: 0px 0px 0px 4px;\n padding: 4px 1px 4px 4px;\n list-style-type: none;\n position: relative;\n float: left;\n background-color: #E6E2CC;\n font-size: 9pt;\n}\n\n.webgl_nav_tabs li > a {\n padding: 8px 8px 8px 8px;\n color: #555;\n text-decoration: none;\n}\n\n.webgl_nav_tabs > li > a:hover {\n border-color: #b4b19d;\n border-bottom-width: 0;\n}\n\n.webgl_nav_tabs li.active {\n background-color: #ffffff;\n list-style-type: none;\n list-style-image: none;\n}\n\n/* Webgl editors */\n.webgl_tab_content {\n width: 100%;\n position: absolute;\n clear: both;\n margin: 0px 0px 20px 0px;\n border: 0px;\n color: #c09853;\n background-color: #fcf8e3;\n z-index: 1;\n}\n\n.webgl_tab_content.active {\n z-index: 2;\n}\n\n.webgl_tab_content > * {\n margin-left: auto;\n margin-right: auto;\n /*\tposition:relative; */\n}\n\n.webgl_tab_content .clearfix {\n position: initial;\n}\n\n.webgl_tab_editor {\n width: 100%;\n position: absolute;\n clear: both;\n padding: 10px 4px 10px 4px;\n margin: 0px 0px 20px 0px;\n border: 0px;\n color: #c09853;\n background-color: #fcf8e3;\n}\n\n/* span that contains the tabbed text editors */\n.webgl_code {\n width: 100%;\n float: left;\n}\n\n.webgl_tab_contents_text {\n width: 100%;\n position: absolute;\n clear: both;\n padding: 10px 4px 10px 4px;\n margin: 0px 0px 20px 0px;\n border: 0px;\n color: #c09853;\n background-color: #fcf8e3;\n z-index: 1;\n}\n\n.webgl_errorMessages {\n color: red;\n}\n\n.webgl_warningMessages {\n color: rgb(170, 34, 164);\n}\n\n.webgl_infoMessages {\n color: rgb(24, 144, 64);\n}\n\n.webgl_output_div {\n width: 100%;\n margin: 2px;\n border: 1px solid lightgrey;\n padding-bottom: 4px;\n padding-top: 4px;\n padding-left: 4px;\n background-color: white;\n overflow: auto;\n height: 14em;\n font-size: 12px;\n font-weight: normal;\n}\n\n.webgl_editor_highlight {\n background-color: #EEEEEE; /* very light grey */\n}\n\n/* \nRemoved as these rules apply to entire browser window and not just webgl interactives\n::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 7px;\n}\n::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n*/\n\n.webgl_btn {\n display: inline-block;\n padding: 3px 6px;\n margin-bottom: 0;\n background-color: thistle;\n font-size: 12px;\n font-weight: normal;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n cursor: pointer;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n -o-user-select: none;\n user-select: none;\n}\n\n.webgl_checkbox {\n}\n\n.webgl_tabbed_editor {\n width: 100%;\n resize: none;\n font-family: monospace, sans-serif;\n font-size: 9pt;\n font-style: normal;\n}\n\n.canvas3D {\n width: 100%;\n height: 100%;\n}\n\n.CodeMirror.webgl-default {\n border: 1px solid #eee;\n font-family: monospace, sans-serif;\n font-size: 8pt;\n font-style: normal;\n}\n\nbutton.btn.webgl-default {\n font-size: 8pt;\n}\n\n\n",".runestone-sphinx {\n @import (less) url(\"./presenter_mode.css\");\n}\n",".hidden{\n display: none;\n}\n\n.view-toggle{\n padding: 0.85em;\n}\n\n.presentation-mode section *{\n display: none;\n}\n\n.presentation-mode section .runestone, .presentation-mode section .runestone *{\n display: initial;\n}\n\n.present{\n height: 100vh;\n}\n\n.full-height{\n height: 100vh;\n}\n\n.bottom{\n position: absolute;\n bottom: 0;\n}\n\n#codeDisplayDiv{\n width: auto!important;\n}\n\ndiv.ExecutionVisualizer #dataViz{\n margin: 0;\n}\n\ndiv.ExecutionVisualizer div#stackHeader {\n text-align: center;\n}\n\n#stackFrame{\n display: block!important;\n}\n\n#stackHeapTable {\n width: 100%;\n}\n\n#stackHeapTable tr {\n justify-content: space-around;\n}\n\ndiv.ExecutionVisualizer td#stack_td, div.ExecutionVisualizer td#heap_td {\n flex: 1;\n}\n\n.presentation-title {\n display: none;\n}\n\n.present .presentation-title {\n display: block;\n}\n\ndiv.ExecutionVisualizer div#heap {\n float: none;\n padding-left: 0;\n}\n\n#stack_td tr {\n display: table-row;\n}\n\n#heap_td tr {\n display: table-row;\n}\n\n#codeDisplayDiv{\n margin: 0 auto;\n}\n\n/* bnm -- comment this out for now as it breaks codelens indentation and arrows\n.visualizer tr{\n display: flex;\n}\n*/\n\n#vizLayoutTd{\n flex: 1;\n}\n\n#vizLayoutTdFirst {\n flex: 2;\n}\n\n#vizLayoutTdSecond {\n flex: 1;\n}\n\n#vizLayoutTdThird {\n flex: 2;\n}\n\n#progOutputs {\n display: block!important;\n margin: 0 20px;\n width: 60%;\n}\n\n#pyStdout {\n width: 100%!important;\n}\n\ndiv.ExecutionVisualizer #pyStdout {\n margin-bottom: 1em;\n}\n\ndiv.ExecutionVisualizer table.visualizer {\n width: 100%;\n}\n\n.present #vizLayoutTdThird{\n text-align: left;\n}\n\n.ac-block{\n display: flex;\n margin-bottom: 1em;\n}\n\n.row-mode .ac-block{\n display: block;\n margin-bottom: 0;\n}\n\n.row-mode .ac_output, .row-mode .ac_code_div{\n float: none;\n display: block;\n width: auto;\n max-width: none;\n}\n\n.row-mode .ac_code_div{\n margin-bottom: 1em;\n}\n\n.ac_section>* {\n max-width: 100%;\n}\n\n.ac_output{\n display: block;\n max-width: 100%;\n}\n\n.ac_output pre {\n visibility: visible!important;\n min-height: 60px;\n}\n\n.CodeMirror{\n margin: 0;\n max-width: 100%;\n border-radius: 3px;\n min-height: 60px;\n}\n\n.container section > runestone:not(.ac_section){\n max-width:none;\n margin: 0;\n}\n\n.presentation-options {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n}\n\n.layout-btn {\n background-color: #FBEED5;\n border: 2px solid #DFD4BE;\n border-radius: 2px;\n padding: .25rem;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 0 .5rem;\n transition: all .2s ease;\n}\n\n.layout-btn.active-layout, .layout-btn:focus {\n border: 2px solid #979797;\n outline: none;\n}\n\n.sketchpad-container {\n min-width: 50%;\n min-height: 300px;\n padding: 0 15px;\n}\n\n.card-mode .sketchpad-container {\n width: 50%;\n margin: 0;\n display: inline-block;\n /*margin: 0 -15px;*/\n vertical-align: top;\n}\n\n.row-mode .error {\n margin: 20px 15px;\n}\n\n.card-mode .error {\n margin: 28px 0 0;\n width: 50%;\n display: inline-block;\n padding: 0 15px;\n vertical-align: top;\n margin-top: 28px;\n}\n\n.sketchpad {\n background: white;\n border: 2px solid grey;\n border-radius: 3px;\n width: 100%;\n min-height: 300px;\n display: block;\n}\n\n.btn-presenter {\n padding: .5rem 1rem;\n border-radius: 3px;\n font-weight: 500;\n margin: 1.5rem 0 1.5rem 1.5rem;\n}\n\n.btn-grey-outline {\n border: 2px solid grey;\n color: grey;\n background: white;\n}\n\n.btn-grey-solid {\n border: 2px solid grey;\n color: white;\n background: grey;\n}\n\nbody.present .ac_section>* {\n max-width: none;\n}\nbody.present iframe {\n width: 100%;\n}\n\nbody.present {\n /* font-size: 2.0em; */\n}\n\nbody.present #relations-prev, body.present #relations-next, body.present .navLinkBg {\n display: none;\n}\n\nbody.present .btn-presenter {\n position: absolute;\n}\nbody.present .btn-presenter.prev-exercise { left: 0px; }\nbody.present .btn-presenter.next-exercise { right: 0px; }\n\n/* .col-md-12 {\n width: 58.333333333333336%;\n}\n\n.card-mode .col-md-7 {\n width: 50%;\n} */\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/course/_static/prefix-runestone.677a75a9120449ff.css.map.gz b/course/_static/prefix-runestone.677a75a9120449ff.css.map.gz deleted file mode 100755 index a71597ee0421bd8a080f5f205dd74d0e283850a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52921 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 I.caret,.ptx-runestone-container .dropup>.btn>.caret,.runestone-sphinx .btn>.caret,.runestone-sphinx .dropup>.btn>.caret{border-top-color:#000!important}.ptx-runestone-container .label,.runestone-sphinx .label{border:1px solid #000}.ptx-runestone-container .table,.runestone-sphinx .table{border-collapse:collapse!important}.ptx-runestone-container .table td,.ptx-runestone-container .table th,.runestone-sphinx .table td,.runestone-sphinx .table th{background-color:#fff!important}.ptx-runestone-container .table-bordered td,.ptx-runestone-container .table-bordered th,.runestone-sphinx .table-bordered td,.runestone-sphinx .table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:Glyphicons Halflings;src:url(7a0f4b092e86cb52.eot);src:url(7a0f4b092e86cb52.eot?#iefix) format("embedded-opentype"),url(b70781972ce7320b.woff2) format("woff2"),url(4ba85deaf3670942.woff) format("woff"),url(009b407a9881be10.ttf) format("truetype"),url(85f0466cb4ab3a4d.svg#glyphicons_halflingsregular) format("svg")}.ptx-runestone-container .glyphicon,.runestone-sphinx .glyphicon{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;position:relative;top:1px}.ptx-runestone-container .glyphicon-asterisk:before,.runestone-sphinx .glyphicon-asterisk:before{content:"\002a"}.ptx-runestone-container .glyphicon-plus:before,.runestone-sphinx .glyphicon-plus:before{content:"\002b"}.ptx-runestone-container .glyphicon-eur:before,.ptx-runestone-container .glyphicon-euro:before,.runestone-sphinx .glyphicon-eur:before,.runestone-sphinx .glyphicon-euro:before{content:"\20ac"}.ptx-runestone-container .glyphicon-minus:before,.runestone-sphinx .glyphicon-minus:before{content:"\2212"}.ptx-runestone-container .glyphicon-cloud:before,.runestone-sphinx .glyphicon-cloud:before{content:"\2601"}.ptx-runestone-container .glyphicon-envelope:before,.runestone-sphinx .glyphicon-envelope:before{content:"\2709"}.ptx-runestone-container .glyphicon-pencil:before,.runestone-sphinx .glyphicon-pencil:before{content:"\270f"}.ptx-runestone-container .glyphicon-glass:before,.runestone-sphinx .glyphicon-glass:before{content:"\e001"}.ptx-runestone-container .glyphicon-music:before,.runestone-sphinx .glyphicon-music:before{content:"\e002"}.ptx-runestone-container .glyphicon-search:before,.runestone-sphinx .glyphicon-search:before{content:"\e003"}.ptx-runestone-container .glyphicon-heart:before,.runestone-sphinx .glyphicon-heart:before{content:"\e005"}.ptx-runestone-container .glyphicon-star:before,.runestone-sphinx .glyphicon-star:before{content:"\e006"}.ptx-runestone-container .glyphicon-star-empty:before,.runestone-sphinx .glyphicon-star-empty:before{content:"\e007"}.ptx-runestone-container .glyphicon-user:before,.runestone-sphinx .glyphicon-user:before{content:"\e008"}.ptx-runestone-container .glyphicon-film:before,.runestone-sphinx .glyphicon-film:before{content:"\e009"}.ptx-runestone-container .glyphicon-th-large:before,.runestone-sphinx .glyphicon-th-large:before{content:"\e010"}.ptx-runestone-container .glyphicon-th:before,.runestone-sphinx .glyphicon-th:before{content:"\e011"}.ptx-runestone-container .glyphicon-th-list:before,.runestone-sphinx .glyphicon-th-list:before{content:"\e012"}.ptx-runestone-container .glyphicon-ok:before,.runestone-sphinx .glyphicon-ok:before{content:"\e013"}.ptx-runestone-container .glyphicon-remove:before,.runestone-sphinx .glyphicon-remove:before{content:"\e014"}.ptx-runestone-container .glyphicon-zoom-in:before,.runestone-sphinx .glyphicon-zoom-in:before{content:"\e015"}.ptx-runestone-container .glyphicon-zoom-out:before,.runestone-sphinx .glyphicon-zoom-out:before{content:"\e016"}.ptx-runestone-container .glyphicon-off:before,.runestone-sphinx .glyphicon-off:before{content:"\e017"}.ptx-runestone-container .glyphicon-signal:before,.runestone-sphinx .glyphicon-signal:before{content:"\e018"}.ptx-runestone-container .glyphicon-cog:before,.runestone-sphinx .glyphicon-cog:before{content:"\e019"}.ptx-runestone-container .glyphicon-trash:before,.runestone-sphinx .glyphicon-trash:before{content:"\e020"}.ptx-runestone-container .glyphicon-home:before,.runestone-sphinx .glyphicon-home:before{content:"\e021"}.ptx-runestone-container .glyphicon-file:before,.runestone-sphinx .glyphicon-file:before{content:"\e022"}.ptx-runestone-container .glyphicon-time:before,.runestone-sphinx .glyphicon-time:before{content:"\e023"}.ptx-runestone-container .glyphicon-road:before,.runestone-sphinx .glyphicon-road:before{content:"\e024"}.ptx-runestone-container .glyphicon-download-alt:before,.runestone-sphinx .glyphicon-download-alt:before{content:"\e025"}.ptx-runestone-container .glyphicon-download:before,.runestone-sphinx .glyphicon-download:before{content:"\e026"}.ptx-runestone-container .glyphicon-upload:before,.runestone-sphinx .glyphicon-upload:before{content:"\e027"}.ptx-runestone-container .glyphicon-inbox:before,.runestone-sphinx .glyphicon-inbox:before{content:"\e028"}.ptx-runestone-container .glyphicon-play-circle:before,.runestone-sphinx .glyphicon-play-circle:before{content:"\e029"}.ptx-runestone-container .glyphicon-repeat:before,.runestone-sphinx .glyphicon-repeat:before{content:"\e030"}.ptx-runestone-container .glyphicon-refresh:before,.runestone-sphinx .glyphicon-refresh:before{content:"\e031"}.ptx-runestone-container .glyphicon-list-alt:before,.runestone-sphinx .glyphicon-list-alt:before{content:"\e032"}.ptx-runestone-container .glyphicon-lock:before,.runestone-sphinx .glyphicon-lock:before{content:"\e033"}.ptx-runestone-container .glyphicon-flag:before,.runestone-sphinx .glyphicon-flag:before{content:"\e034"}.ptx-runestone-container .glyphicon-headphones:before,.runestone-sphinx .glyphicon-headphones:before{content:"\e035"}.ptx-runestone-container .glyphicon-volume-off:before,.runestone-sphinx .glyphicon-volume-off:before{content:"\e036"}.ptx-runestone-container .glyphicon-volume-down:before,.runestone-sphinx .glyphicon-volume-down:before{content:"\e037"}.ptx-runestone-container .glyphicon-volume-up:before,.runestone-sphinx .glyphicon-volume-up:before{content:"\e038"}.ptx-runestone-container .glyphicon-qrcode:before,.runestone-sphinx .glyphicon-qrcode:before{content:"\e039"}.ptx-runestone-container .glyphicon-barcode:before,.runestone-sphinx .glyphicon-barcode:before{content:"\e040"}.ptx-runestone-container .glyphicon-tag:before,.runestone-sphinx .glyphicon-tag:before{content:"\e041"}.ptx-runestone-container .glyphicon-tags:before,.runestone-sphinx .glyphicon-tags:before{content:"\e042"}.ptx-runestone-container .glyphicon-book:before,.runestone-sphinx .glyphicon-book:before{content:"\e043"}.ptx-runestone-container .glyphicon-bookmark:before,.runestone-sphinx .glyphicon-bookmark:before{content:"\e044"}.ptx-runestone-container .glyphicon-print:before,.runestone-sphinx .glyphicon-print:before{content:"\e045"}.ptx-runestone-container .glyphicon-camera:before,.runestone-sphinx .glyphicon-camera:before{content:"\e046"}.ptx-runestone-container .glyphicon-font:before,.runestone-sphinx .glyphicon-font:before{content:"\e047"}.ptx-runestone-container .glyphicon-bold:before,.runestone-sphinx .glyphicon-bold:before{content:"\e048"}.ptx-runestone-container .glyphicon-italic:before,.runestone-sphinx .glyphicon-italic:before{content:"\e049"}.ptx-runestone-container .glyphicon-text-height:before,.runestone-sphinx .glyphicon-text-height:before{content:"\e050"}.ptx-runestone-container .glyphicon-text-width:before,.runestone-sphinx .glyphicon-text-width:before{content:"\e051"}.ptx-runestone-container .glyphicon-align-left:before,.runestone-sphinx .glyphicon-align-left:before{content:"\e052"}.ptx-runestone-container .glyphicon-align-center:before,.runestone-sphinx .glyphicon-align-center:before{content:"\e053"}.ptx-runestone-container .glyphicon-align-right:before,.runestone-sphinx .glyphicon-align-right:before{content:"\e054"}.ptx-runestone-container .glyphicon-align-justify:before,.runestone-sphinx .glyphicon-align-justify:before{content:"\e055"}.ptx-runestone-container .glyphicon-list:before,.runestone-sphinx .glyphicon-list:before{content:"\e056"}.ptx-runestone-container .glyphicon-indent-left:before,.runestone-sphinx .glyphicon-indent-left:before{content:"\e057"}.ptx-runestone-container .glyphicon-indent-right:before,.runestone-sphinx .glyphicon-indent-right:before{content:"\e058"}.ptx-runestone-container .glyphicon-facetime-video:before,.runestone-sphinx .glyphicon-facetime-video:before{content:"\e059"}.ptx-runestone-container .glyphicon-picture:before,.runestone-sphinx .glyphicon-picture:before{content:"\e060"}.ptx-runestone-container .glyphicon-map-marker:before,.runestone-sphinx .glyphicon-map-marker:before{content:"\e062"}.ptx-runestone-container .glyphicon-adjust:before,.runestone-sphinx .glyphicon-adjust:before{content:"\e063"}.ptx-runestone-container .glyphicon-tint:before,.runestone-sphinx .glyphicon-tint:before{content:"\e064"}.ptx-runestone-container .glyphicon-edit:before,.runestone-sphinx .glyphicon-edit:before{content:"\e065"}.ptx-runestone-container .glyphicon-share:before,.runestone-sphinx .glyphicon-share:before{content:"\e066"}.ptx-runestone-container .glyphicon-check:before,.runestone-sphinx .glyphicon-check:before{content:"\e067"}.ptx-runestone-container .glyphicon-move:before,.runestone-sphinx .glyphicon-move:before{content:"\e068"}.ptx-runestone-container .glyphicon-step-backward:before,.runestone-sphinx .glyphicon-step-backward:before{content:"\e069"}.ptx-runestone-container .glyphicon-fast-backward:before,.runestone-sphinx .glyphicon-fast-backward:before{content:"\e070"}.ptx-runestone-container .glyphicon-backward:before,.runestone-sphinx .glyphicon-backward:before{content:"\e071"}.ptx-runestone-container .glyphicon-play:before,.runestone-sphinx .glyphicon-play:before{content:"\e072"}.ptx-runestone-container .glyphicon-pause:before,.runestone-sphinx .glyphicon-pause:before{content:"\e073"}.ptx-runestone-container .glyphicon-stop:before,.runestone-sphinx .glyphicon-stop:before{content:"\e074"}.ptx-runestone-container .glyphicon-forward:before,.runestone-sphinx .glyphicon-forward:before{content:"\e075"}.ptx-runestone-container .glyphicon-fast-forward:before,.runestone-sphinx .glyphicon-fast-forward:before{content:"\e076"}.ptx-runestone-container .glyphicon-step-forward:before,.runestone-sphinx .glyphicon-step-forward:before{content:"\e077"}.ptx-runestone-container .glyphicon-eject:before,.runestone-sphinx .glyphicon-eject:before{content:"\e078"}.ptx-runestone-container .glyphicon-chevron-left:before,.runestone-sphinx .glyphicon-chevron-left:before{content:"\e079"}.ptx-runestone-container .glyphicon-chevron-right:before,.runestone-sphinx .glyphicon-chevron-right:before{content:"\e080"}.ptx-runestone-container .glyphicon-plus-sign:before,.runestone-sphinx .glyphicon-plus-sign:before{content:"\e081"}.ptx-runestone-container .glyphicon-minus-sign:before,.runestone-sphinx .glyphicon-minus-sign:before{content:"\e082"}.ptx-runestone-container .glyphicon-remove-sign:before,.runestone-sphinx .glyphicon-remove-sign:before{content:"\e083"}.ptx-runestone-container .glyphicon-ok-sign:before,.runestone-sphinx .glyphicon-ok-sign:before{content:"\e084"}.ptx-runestone-container .glyphicon-question-sign:before,.runestone-sphinx .glyphicon-question-sign:before{content:"\e085"}.ptx-runestone-container .glyphicon-info-sign:before,.runestone-sphinx .glyphicon-info-sign:before{content:"\e086"}.ptx-runestone-container .glyphicon-screenshot:before,.runestone-sphinx .glyphicon-screenshot:before{content:"\e087"}.ptx-runestone-container .glyphicon-remove-circle:before,.runestone-sphinx .glyphicon-remove-circle:before{content:"\e088"}.ptx-runestone-container .glyphicon-ok-circle:before,.runestone-sphinx .glyphicon-ok-circle:before{content:"\e089"}.ptx-runestone-container .glyphicon-ban-circle:before,.runestone-sphinx .glyphicon-ban-circle:before{content:"\e090"}.ptx-runestone-container .glyphicon-arrow-left:before,.runestone-sphinx .glyphicon-arrow-left:before{content:"\e091"}.ptx-runestone-container .glyphicon-arrow-right:before,.runestone-sphinx .glyphicon-arrow-right:before{content:"\e092"}.ptx-runestone-container .glyphicon-arrow-up:before,.runestone-sphinx .glyphicon-arrow-up:before{content:"\e093"}.ptx-runestone-container .glyphicon-arrow-down:before,.runestone-sphinx .glyphicon-arrow-down:before{content:"\e094"}.ptx-runestone-container .glyphicon-share-alt:before,.runestone-sphinx .glyphicon-share-alt:before{content:"\e095"}.ptx-runestone-container .glyphicon-resize-full:before,.runestone-sphinx .glyphicon-resize-full:before{content:"\e096"}.ptx-runestone-container .glyphicon-resize-small:before,.runestone-sphinx .glyphicon-resize-small:before{content:"\e097"}.ptx-runestone-container .glyphicon-exclamation-sign:before,.runestone-sphinx .glyphicon-exclamation-sign:before{content:"\e101"}.ptx-runestone-container .glyphicon-gift:before,.runestone-sphinx .glyphicon-gift:before{content:"\e102"}.ptx-runestone-container .glyphicon-leaf:before,.runestone-sphinx .glyphicon-leaf:before{content:"\e103"}.ptx-runestone-container .glyphicon-fire:before,.runestone-sphinx .glyphicon-fire:before{content:"\e104"}.ptx-runestone-container .glyphicon-eye-open:before,.runestone-sphinx .glyphicon-eye-open:before{content:"\e105"}.ptx-runestone-container .glyphicon-eye-close:before,.runestone-sphinx .glyphicon-eye-close:before{content:"\e106"}.ptx-runestone-container .glyphicon-warning-sign:before,.runestone-sphinx .glyphicon-warning-sign:before{content:"\e107"}.ptx-runestone-container .glyphicon-plane:before,.runestone-sphinx .glyphicon-plane:before{content:"\e108"}.ptx-runestone-container .glyphicon-calendar:before,.runestone-sphinx .glyphicon-calendar:before{content:"\e109"}.ptx-runestone-container .glyphicon-random:before,.runestone-sphinx .glyphicon-random:before{content:"\e110"}.ptx-runestone-container .glyphicon-comment:before,.runestone-sphinx .glyphicon-comment:before{content:"\e111"}.ptx-runestone-container .glyphicon-magnet:before,.runestone-sphinx .glyphicon-magnet:before{content:"\e112"}.ptx-runestone-container .glyphicon-chevron-up:before,.runestone-sphinx .glyphicon-chevron-up:before{content:"\e113"}.ptx-runestone-container .glyphicon-chevron-down:before,.runestone-sphinx .glyphicon-chevron-down:before{content:"\e114"}.ptx-runestone-container .glyphicon-retweet:before,.runestone-sphinx .glyphicon-retweet:before{content:"\e115"}.ptx-runestone-container .glyphicon-shopping-cart:before,.runestone-sphinx .glyphicon-shopping-cart:before{content:"\e116"}.ptx-runestone-container .glyphicon-folder-close:before,.runestone-sphinx .glyphicon-folder-close:before{content:"\e117"}.ptx-runestone-container .glyphicon-folder-open:before,.runestone-sphinx .glyphicon-folder-open:before{content:"\e118"}.ptx-runestone-container .glyphicon-resize-vertical:before,.runestone-sphinx .glyphicon-resize-vertical:before{content:"\e119"}.ptx-runestone-container .glyphicon-resize-horizontal:before,.runestone-sphinx .glyphicon-resize-horizontal:before{content:"\e120"}.ptx-runestone-container .glyphicon-hdd:before,.runestone-sphinx .glyphicon-hdd:before{content:"\e121"}.ptx-runestone-container .glyphicon-bullhorn:before,.runestone-sphinx .glyphicon-bullhorn:before{content:"\e122"}.ptx-runestone-container .glyphicon-bell:before,.runestone-sphinx .glyphicon-bell:before{content:"\e123"}.ptx-runestone-container .glyphicon-certificate:before,.runestone-sphinx .glyphicon-certificate:before{content:"\e124"}.ptx-runestone-container .glyphicon-thumbs-up:before,.runestone-sphinx .glyphicon-thumbs-up:before{content:"\e125"}.ptx-runestone-container .glyphicon-thumbs-down:before,.runestone-sphinx .glyphicon-thumbs-down:before{content:"\e126"}.ptx-runestone-container .glyphicon-hand-right:before,.runestone-sphinx .glyphicon-hand-right:before{content:"\e127"}.ptx-runestone-container .glyphicon-hand-left:before,.runestone-sphinx .glyphicon-hand-left:before{content:"\e128"}.ptx-runestone-container .glyphicon-hand-up:before,.runestone-sphinx .glyphicon-hand-up:before{content:"\e129"}.ptx-runestone-container .glyphicon-hand-down:before,.runestone-sphinx .glyphicon-hand-down:before{content:"\e130"}.ptx-runestone-container .glyphicon-circle-arrow-right:before,.runestone-sphinx .glyphicon-circle-arrow-right:before{content:"\e131"}.ptx-runestone-container .glyphicon-circle-arrow-left:before,.runestone-sphinx .glyphicon-circle-arrow-left:before{content:"\e132"}.ptx-runestone-container .glyphicon-circle-arrow-up:before,.runestone-sphinx .glyphicon-circle-arrow-up:before{content:"\e133"}.ptx-runestone-container .glyphicon-circle-arrow-down:before,.runestone-sphinx .glyphicon-circle-arrow-down:before{content:"\e134"}.ptx-runestone-container .glyphicon-globe:before,.runestone-sphinx .glyphicon-globe:before{content:"\e135"}.ptx-runestone-container .glyphicon-wrench:before,.runestone-sphinx .glyphicon-wrench:before{content:"\e136"}.ptx-runestone-container .glyphicon-tasks:before,.runestone-sphinx .glyphicon-tasks:before{content:"\e137"}.ptx-runestone-container .glyphicon-filter:before,.runestone-sphinx .glyphicon-filter:before{content:"\e138"}.ptx-runestone-container .glyphicon-briefcase:before,.runestone-sphinx .glyphicon-briefcase:before{content:"\e139"}.ptx-runestone-container .glyphicon-fullscreen:before,.runestone-sphinx .glyphicon-fullscreen:before{content:"\e140"}.ptx-runestone-container .glyphicon-dashboard:before,.runestone-sphinx .glyphicon-dashboard:before{content:"\e141"}.ptx-runestone-container .glyphicon-paperclip:before,.runestone-sphinx .glyphicon-paperclip:before{content:"\e142"}.ptx-runestone-container .glyphicon-heart-empty:before,.runestone-sphinx .glyphicon-heart-empty:before{content:"\e143"}.ptx-runestone-container .glyphicon-link:before,.runestone-sphinx .glyphicon-link:before{content:"\e144"}.ptx-runestone-container .glyphicon-phone:before,.runestone-sphinx .glyphicon-phone:before{content:"\e145"}.ptx-runestone-container .glyphicon-pushpin:before,.runestone-sphinx .glyphicon-pushpin:before{content:"\e146"}.ptx-runestone-container .glyphicon-usd:before,.runestone-sphinx .glyphicon-usd:before{content:"\e148"}.ptx-runestone-container .glyphicon-gbp:before,.runestone-sphinx .glyphicon-gbp:before{content:"\e149"}.ptx-runestone-container .glyphicon-sort:before,.runestone-sphinx .glyphicon-sort:before{content:"\e150"}.ptx-runestone-container .glyphicon-sort-by-alphabet:before,.runestone-sphinx .glyphicon-sort-by-alphabet:before{content:"\e151"}.ptx-runestone-container .glyphicon-sort-by-alphabet-alt:before,.runestone-sphinx .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.ptx-runestone-container .glyphicon-sort-by-order:before,.runestone-sphinx .glyphicon-sort-by-order:before{content:"\e153"}.ptx-runestone-container .glyphicon-sort-by-order-alt:before,.runestone-sphinx .glyphicon-sort-by-order-alt:before{content:"\e154"}.ptx-runestone-container .glyphicon-sort-by-attributes:before,.runestone-sphinx .glyphicon-sort-by-attributes:before{content:"\e155"}.ptx-runestone-container .glyphicon-sort-by-attributes-alt:before,.runestone-sphinx .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.ptx-runestone-container .glyphicon-unchecked:before,.runestone-sphinx .glyphicon-unchecked:before{content:"\e157"}.ptx-runestone-container .glyphicon-expand:before,.runestone-sphinx .glyphicon-expand:before{content:"\e158"}.ptx-runestone-container .glyphicon-collapse-down:before,.runestone-sphinx .glyphicon-collapse-down:before{content:"\e159"}.ptx-runestone-container .glyphicon-collapse-up:before,.runestone-sphinx .glyphicon-collapse-up:before{content:"\e160"}.ptx-runestone-container .glyphicon-log-in:before,.runestone-sphinx .glyphicon-log-in:before{content:"\e161"}.ptx-runestone-container .glyphicon-flash:before,.runestone-sphinx .glyphicon-flash:before{content:"\e162"}.ptx-runestone-container .glyphicon-log-out:before,.runestone-sphinx .glyphicon-log-out:before{content:"\e163"}.ptx-runestone-container .glyphicon-new-window:before,.runestone-sphinx .glyphicon-new-window:before{content:"\e164"}.ptx-runestone-container .glyphicon-record:before,.runestone-sphinx .glyphicon-record:before{content:"\e165"}.ptx-runestone-container .glyphicon-save:before,.runestone-sphinx .glyphicon-save:before{content:"\e166"}.ptx-runestone-container .glyphicon-open:before,.runestone-sphinx .glyphicon-open:before{content:"\e167"}.ptx-runestone-container .glyphicon-saved:before,.runestone-sphinx .glyphicon-saved:before{content:"\e168"}.ptx-runestone-container .glyphicon-import:before,.runestone-sphinx .glyphicon-import:before{content:"\e169"}.ptx-runestone-container .glyphicon-export:before,.runestone-sphinx .glyphicon-export:before{content:"\e170"}.ptx-runestone-container .glyphicon-send:before,.runestone-sphinx .glyphicon-send:before{content:"\e171"}.ptx-runestone-container .glyphicon-floppy-disk:before,.runestone-sphinx .glyphicon-floppy-disk:before{content:"\e172"}.ptx-runestone-container .glyphicon-floppy-saved:before,.runestone-sphinx .glyphicon-floppy-saved:before{content:"\e173"}.ptx-runestone-container .glyphicon-floppy-remove:before,.runestone-sphinx .glyphicon-floppy-remove:before{content:"\e174"}.ptx-runestone-container .glyphicon-floppy-save:before,.runestone-sphinx .glyphicon-floppy-save:before{content:"\e175"}.ptx-runestone-container .glyphicon-floppy-open:before,.runestone-sphinx .glyphicon-floppy-open:before{content:"\e176"}.ptx-runestone-container .glyphicon-credit-card:before,.runestone-sphinx .glyphicon-credit-card:before{content:"\e177"}.ptx-runestone-container .glyphicon-transfer:before,.runestone-sphinx .glyphicon-transfer:before{content:"\e178"}.ptx-runestone-container .glyphicon-cutlery:before,.runestone-sphinx .glyphicon-cutlery:before{content:"\e179"}.ptx-runestone-container .glyphicon-header:before,.runestone-sphinx .glyphicon-header:before{content:"\e180"}.ptx-runestone-container .glyphicon-compressed:before,.runestone-sphinx .glyphicon-compressed:before{content:"\e181"}.ptx-runestone-container .glyphicon-earphone:before,.runestone-sphinx .glyphicon-earphone:before{content:"\e182"}.ptx-runestone-container .glyphicon-phone-alt:before,.runestone-sphinx .glyphicon-phone-alt:before{content:"\e183"}.ptx-runestone-container .glyphicon-tower:before,.runestone-sphinx .glyphicon-tower:before{content:"\e184"}.ptx-runestone-container .glyphicon-stats:before,.runestone-sphinx .glyphicon-stats:before{content:"\e185"}.ptx-runestone-container .glyphicon-sd-video:before,.runestone-sphinx .glyphicon-sd-video:before{content:"\e186"}.ptx-runestone-container .glyphicon-hd-video:before,.runestone-sphinx .glyphicon-hd-video:before{content:"\e187"}.ptx-runestone-container .glyphicon-subtitles:before,.runestone-sphinx .glyphicon-subtitles:before{content:"\e188"}.ptx-runestone-container .glyphicon-sound-stereo:before,.runestone-sphinx .glyphicon-sound-stereo:before{content:"\e189"}.ptx-runestone-container .glyphicon-sound-dolby:before,.runestone-sphinx .glyphicon-sound-dolby:before{content:"\e190"}.ptx-runestone-container .glyphicon-sound-5-1:before,.runestone-sphinx .glyphicon-sound-5-1:before{content:"\e191"}.ptx-runestone-container .glyphicon-sound-6-1:before,.runestone-sphinx .glyphicon-sound-6-1:before{content:"\e192"}.ptx-runestone-container .glyphicon-sound-7-1:before,.runestone-sphinx .glyphicon-sound-7-1:before{content:"\e193"}.ptx-runestone-container .glyphicon-copyright-mark:before,.runestone-sphinx .glyphicon-copyright-mark:before{content:"\e194"}.ptx-runestone-container .glyphicon-registration-mark:before,.runestone-sphinx .glyphicon-registration-mark:before{content:"\e195"}.ptx-runestone-container .glyphicon-cloud-download:before,.runestone-sphinx .glyphicon-cloud-download:before{content:"\e197"}.ptx-runestone-container .glyphicon-cloud-upload:before,.runestone-sphinx .glyphicon-cloud-upload:before{content:"\e198"}.ptx-runestone-container .glyphicon-tree-conifer:before,.runestone-sphinx .glyphicon-tree-conifer:before{content:"\e199"}.ptx-runestone-container .glyphicon-tree-deciduous:before,.runestone-sphinx .glyphicon-tree-deciduous:before{content:"\e200"}.ptx-runestone-container .glyphicon-cd:before,.runestone-sphinx .glyphicon-cd:before{content:"\e201"}.ptx-runestone-container .glyphicon-save-file:before,.runestone-sphinx .glyphicon-save-file:before{content:"\e202"}.ptx-runestone-container .glyphicon-open-file:before,.runestone-sphinx .glyphicon-open-file:before{content:"\e203"}.ptx-runestone-container .glyphicon-level-up:before,.runestone-sphinx .glyphicon-level-up:before{content:"\e204"}.ptx-runestone-container .glyphicon-copy:before,.runestone-sphinx .glyphicon-copy:before{content:"\e205"}.ptx-runestone-container .glyphicon-paste:before,.runestone-sphinx .glyphicon-paste:before{content:"\e206"}.ptx-runestone-container .glyphicon-alert:before,.runestone-sphinx .glyphicon-alert:before{content:"\e209"}.ptx-runestone-container .glyphicon-equalizer:before,.runestone-sphinx .glyphicon-equalizer:before{content:"\e210"}.ptx-runestone-container .glyphicon-king:before,.runestone-sphinx .glyphicon-king:before{content:"\e211"}.ptx-runestone-container .glyphicon-queen:before,.runestone-sphinx .glyphicon-queen:before{content:"\e212"}.ptx-runestone-container .glyphicon-pawn:before,.runestone-sphinx .glyphicon-pawn:before{content:"\e213"}.ptx-runestone-container .glyphicon-bishop:before,.runestone-sphinx .glyphicon-bishop:before{content:"\e214"}.ptx-runestone-container .glyphicon-knight:before,.runestone-sphinx .glyphicon-knight:before{content:"\e215"}.ptx-runestone-container .glyphicon-baby-formula:before,.runestone-sphinx .glyphicon-baby-formula:before{content:"\e216"}.ptx-runestone-container .glyphicon-tent:before,.runestone-sphinx .glyphicon-tent:before{content:"\26fa"}.ptx-runestone-container .glyphicon-blackboard:before,.runestone-sphinx .glyphicon-blackboard:before{content:"\e218"}.ptx-runestone-container .glyphicon-bed:before,.runestone-sphinx .glyphicon-bed:before{content:"\e219"}.ptx-runestone-container .glyphicon-apple:before,.runestone-sphinx .glyphicon-apple:before{content:"\f8ff"}.ptx-runestone-container .glyphicon-erase:before,.runestone-sphinx .glyphicon-erase:before{content:"\e221"}.ptx-runestone-container .glyphicon-hourglass:before,.runestone-sphinx .glyphicon-hourglass:before{content:"\231b"}.ptx-runestone-container .glyphicon-lamp:before,.runestone-sphinx .glyphicon-lamp:before{content:"\e223"}.ptx-runestone-container .glyphicon-duplicate:before,.runestone-sphinx .glyphicon-duplicate:before{content:"\e224"}.ptx-runestone-container .glyphicon-piggy-bank:before,.runestone-sphinx .glyphicon-piggy-bank:before{content:"\e225"}.ptx-runestone-container .glyphicon-scissors:before,.runestone-sphinx .glyphicon-scissors:before{content:"\e226"}.ptx-runestone-container .glyphicon-bitcoin:before,.ptx-runestone-container .glyphicon-btc:before,.ptx-runestone-container .glyphicon-xbt:before,.runestone-sphinx .glyphicon-bitcoin:before,.runestone-sphinx .glyphicon-btc:before,.runestone-sphinx .glyphicon-xbt:before{content:"\e227"}.ptx-runestone-container .glyphicon-jpy:before,.ptx-runestone-container .glyphicon-yen:before,.runestone-sphinx .glyphicon-jpy:before,.runestone-sphinx .glyphicon-yen:before{content:"\00a5"}.ptx-runestone-container .glyphicon-rub:before,.ptx-runestone-container .glyphicon-ruble:before,.runestone-sphinx .glyphicon-rub:before,.runestone-sphinx .glyphicon-ruble:before{content:"\20bd"}.ptx-runestone-container .glyphicon-scale:before,.runestone-sphinx .glyphicon-scale:before{content:"\e230"}.ptx-runestone-container .glyphicon-ice-lolly:before,.runestone-sphinx .glyphicon-ice-lolly:before{content:"\e231"}.ptx-runestone-container .glyphicon-ice-lolly-tasted:before,.runestone-sphinx .glyphicon-ice-lolly-tasted:before{content:"\e232"}.ptx-runestone-container .glyphicon-education:before,.runestone-sphinx .glyphicon-education:before{content:"\e233"}.ptx-runestone-container .glyphicon-option-horizontal:before,.runestone-sphinx .glyphicon-option-horizontal:before{content:"\e234"}.ptx-runestone-container .glyphicon-option-vertical:before,.runestone-sphinx .glyphicon-option-vertical:before{content:"\e235"}.ptx-runestone-container .glyphicon-menu-hamburger:before,.runestone-sphinx .glyphicon-menu-hamburger:before{content:"\e236"}.ptx-runestone-container .glyphicon-modal-window:before,.runestone-sphinx .glyphicon-modal-window:before{content:"\e237"}.ptx-runestone-container .glyphicon-oil:before,.runestone-sphinx .glyphicon-oil:before{content:"\e238"}.ptx-runestone-container .glyphicon-grain:before,.runestone-sphinx .glyphicon-grain:before{content:"\e239"}.ptx-runestone-container .glyphicon-sunglasses:before,.runestone-sphinx .glyphicon-sunglasses:before{content:"\e240"}.ptx-runestone-container .glyphicon-text-size:before,.runestone-sphinx .glyphicon-text-size:before{content:"\e241"}.ptx-runestone-container .glyphicon-text-color:before,.runestone-sphinx .glyphicon-text-color:before{content:"\e242"}.ptx-runestone-container .glyphicon-text-background:before,.runestone-sphinx .glyphicon-text-background:before{content:"\e243"}.ptx-runestone-container .glyphicon-object-align-top:before,.runestone-sphinx .glyphicon-object-align-top:before{content:"\e244"}.ptx-runestone-container .glyphicon-object-align-bottom:before,.runestone-sphinx .glyphicon-object-align-bottom:before{content:"\e245"}.ptx-runestone-container .glyphicon-object-align-horizontal:before,.runestone-sphinx .glyphicon-object-align-horizontal:before{content:"\e246"}.ptx-runestone-container .glyphicon-object-align-left:before,.runestone-sphinx .glyphicon-object-align-left:before{content:"\e247"}.ptx-runestone-container .glyphicon-object-align-vertical:before,.runestone-sphinx .glyphicon-object-align-vertical:before{content:"\e248"}.ptx-runestone-container .glyphicon-object-align-right:before,.runestone-sphinx .glyphicon-object-align-right:before{content:"\e249"}.ptx-runestone-container .glyphicon-triangle-right:before,.runestone-sphinx .glyphicon-triangle-right:before{content:"\e250"}.ptx-runestone-container .glyphicon-triangle-left:before,.runestone-sphinx .glyphicon-triangle-left:before{content:"\e251"}.ptx-runestone-container .glyphicon-triangle-bottom:before,.runestone-sphinx .glyphicon-triangle-bottom:before{content:"\e252"}.ptx-runestone-container .glyphicon-triangle-top:before,.runestone-sphinx .glyphicon-triangle-top:before{content:"\e253"}.ptx-runestone-container .glyphicon-console:before,.runestone-sphinx .glyphicon-console:before{content:"\e254"}.ptx-runestone-container .glyphicon-superscript:before,.runestone-sphinx .glyphicon-superscript:before{content:"\e255"}.ptx-runestone-container .glyphicon-subscript:before,.runestone-sphinx .glyphicon-subscript:before{content:"\e256"}.ptx-runestone-container .glyphicon-menu-left:before,.runestone-sphinx .glyphicon-menu-left:before{content:"\e257"}.ptx-runestone-container .glyphicon-menu-right:before,.runestone-sphinx .glyphicon-menu-right:before{content:"\e258"}.ptx-runestone-container .glyphicon-menu-down:before,.runestone-sphinx .glyphicon-menu-down:before{content:"\e259"}.ptx-runestone-container .glyphicon-menu-up:before,.runestone-sphinx .glyphicon-menu-up:before{content:"\e260"}.ptx-runestone-container *,.ptx-runestone-container :after,.ptx-runestone-container :before,.runestone-sphinx *,.runestone-sphinx :after,.runestone-sphinx :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ptx-runestone-container html,.runestone-sphinx html{-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:10px}.ptx-runestone-container body,.runestone-sphinx body{background-color:#fff;color:#333;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143}.ptx-runestone-container button,.ptx-runestone-container input,.ptx-runestone-container select,.ptx-runestone-container textarea,.runestone-sphinx button,.runestone-sphinx input,.runestone-sphinx select,.runestone-sphinx textarea{font-family:inherit;font-size:inherit;line-height:inherit}.ptx-runestone-container a,.runestone-sphinx a{color:#337ab7;text-decoration:none}.ptx-runestone-container a:focus,.ptx-runestone-container a:hover,.runestone-sphinx a:focus,.runestone-sphinx a:hover{color:#23527c;text-decoration:underline}.ptx-runestone-container a:focus,.runestone-sphinx a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ptx-runestone-container figure,.runestone-sphinx figure{margin:0}.ptx-runestone-container img,.runestone-sphinx img{vertical-align:middle}.ptx-runestone-container .carousel-inner>.item>a>img,.ptx-runestone-container .carousel-inner>.item>img,.ptx-runestone-container .img-responsive,.ptx-runestone-container .thumbnail a>img,.ptx-runestone-container .thumbnail>img,.runestone-sphinx .carousel-inner>.item>a>img,.runestone-sphinx .carousel-inner>.item>img,.runestone-sphinx .img-responsive,.runestone-sphinx .thumbnail a>img,.runestone-sphinx .thumbnail>img{display:block;height:auto;max-width:100%}.ptx-runestone-container .img-rounded,.runestone-sphinx .img-rounded{border-radius:6px}.ptx-runestone-container .img-thumbnail,.runestone-sphinx .img-thumbnail{background-color:#fff;border:1px solid #ddd;border-radius:4px;display:inline-block;height:auto;line-height:1.42857143;max-width:100%;padding:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ptx-runestone-container .img-circle,.runestone-sphinx .img-circle{border-radius:50%}.ptx-runestone-container hr,.runestone-sphinx hr{border:0;border-top:1px solid #eee;margin-bottom:20px;margin-top:20px}.ptx-runestone-container .sr-only,.runestone-sphinx .sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ptx-runestone-container .sr-only-focusable:active,.ptx-runestone-container .sr-only-focusable:focus,.runestone-sphinx .sr-only-focusable:active,.runestone-sphinx .sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.ptx-runestone-container [role=button],.runestone-sphinx [role=button]{cursor:pointer}.ptx-runestone-container .h1,.ptx-runestone-container .h2,.ptx-runestone-container .h3,.ptx-runestone-container .h4,.ptx-runestone-container .h5,.ptx-runestone-container .h6,.ptx-runestone-container h1,.ptx-runestone-container h2,.ptx-runestone-container h3,.ptx-runestone-container h4,.ptx-runestone-container h5,.ptx-runestone-container h6,.runestone-sphinx .h1,.runestone-sphinx .h2,.runestone-sphinx .h3,.runestone-sphinx .h4,.runestone-sphinx .h5,.runestone-sphinx .h6,.runestone-sphinx h1,.runestone-sphinx h2,.runestone-sphinx h3,.runestone-sphinx h4,.runestone-sphinx h5,.runestone-sphinx h6{color:inherit;font-family:inherit;font-weight:500;line-height:1.1}.ptx-runestone-container .h1 .small,.ptx-runestone-container .h1 small,.ptx-runestone-container .h2 .small,.ptx-runestone-container .h2 small,.ptx-runestone-container .h3 .small,.ptx-runestone-container .h3 small,.ptx-runestone-container .h4 .small,.ptx-runestone-container .h4 small,.ptx-runestone-container .h5 .small,.ptx-runestone-container .h5 small,.ptx-runestone-container .h6 .small,.ptx-runestone-container .h6 small,.ptx-runestone-container h1 .small,.ptx-runestone-container h1 small,.ptx-runestone-container h2 .small,.ptx-runestone-container h2 small,.ptx-runestone-container h3 .small,.ptx-runestone-container h3 small,.ptx-runestone-container h4 .small,.ptx-runestone-container h4 small,.ptx-runestone-container h5 .small,.ptx-runestone-container h5 small,.ptx-runestone-container h6 .small,.ptx-runestone-container h6 small,.runestone-sphinx .h1 .small,.runestone-sphinx .h1 small,.runestone-sphinx .h2 .small,.runestone-sphinx .h2 small,.runestone-sphinx .h3 .small,.runestone-sphinx .h3 small,.runestone-sphinx .h4 .small,.runestone-sphinx .h4 small,.runestone-sphinx .h5 .small,.runestone-sphinx .h5 small,.runestone-sphinx .h6 .small,.runestone-sphinx .h6 small,.runestone-sphinx h1 .small,.runestone-sphinx h1 small,.runestone-sphinx h2 .small,.runestone-sphinx h2 small,.runestone-sphinx h3 .small,.runestone-sphinx h3 small,.runestone-sphinx h4 .small,.runestone-sphinx h4 small,.runestone-sphinx h5 .small,.runestone-sphinx h5 small,.runestone-sphinx h6 .small,.runestone-sphinx h6 small{color:#777;font-weight:400;line-height:1}.ptx-runestone-container .h1,.ptx-runestone-container .h2,.ptx-runestone-container .h3,.ptx-runestone-container h1,.ptx-runestone-container h2,.ptx-runestone-container h3,.runestone-sphinx .h1,.runestone-sphinx .h2,.runestone-sphinx .h3,.runestone-sphinx h1,.runestone-sphinx h2,.runestone-sphinx h3{margin-bottom:10px;margin-top:20px}.ptx-runestone-container .h1 .small,.ptx-runestone-container .h1 small,.ptx-runestone-container .h2 .small,.ptx-runestone-container .h2 small,.ptx-runestone-container .h3 .small,.ptx-runestone-container .h3 small,.ptx-runestone-container h1 .small,.ptx-runestone-container h1 small,.ptx-runestone-container h2 .small,.ptx-runestone-container h2 small,.ptx-runestone-container h3 .small,.ptx-runestone-container h3 small,.runestone-sphinx .h1 .small,.runestone-sphinx .h1 small,.runestone-sphinx .h2 .small,.runestone-sphinx .h2 small,.runestone-sphinx .h3 .small,.runestone-sphinx .h3 small,.runestone-sphinx h1 .small,.runestone-sphinx h1 small,.runestone-sphinx h2 .small,.runestone-sphinx h2 small,.runestone-sphinx h3 .small,.runestone-sphinx h3 small{font-size:65%}.ptx-runestone-container .h4,.ptx-runestone-container .h5,.ptx-runestone-container .h6,.ptx-runestone-container h4,.ptx-runestone-container h5,.ptx-runestone-container h6,.runestone-sphinx .h4,.runestone-sphinx .h5,.runestone-sphinx .h6,.runestone-sphinx h4,.runestone-sphinx h5,.runestone-sphinx h6{margin-bottom:10px;margin-top:10px}.ptx-runestone-container .h4 .small,.ptx-runestone-container .h4 small,.ptx-runestone-container .h5 .small,.ptx-runestone-container .h5 small,.ptx-runestone-container .h6 .small,.ptx-runestone-container .h6 small,.ptx-runestone-container h4 .small,.ptx-runestone-container h4 small,.ptx-runestone-container h5 .small,.ptx-runestone-container h5 small,.ptx-runestone-container h6 .small,.ptx-runestone-container h6 small,.runestone-sphinx .h4 .small,.runestone-sphinx .h4 small,.runestone-sphinx .h5 .small,.runestone-sphinx .h5 small,.runestone-sphinx .h6 .small,.runestone-sphinx .h6 small,.runestone-sphinx h4 .small,.runestone-sphinx h4 small,.runestone-sphinx h5 .small,.runestone-sphinx h5 small,.runestone-sphinx h6 .small,.runestone-sphinx h6 small{font-size:75%}.ptx-runestone-container .h1,.ptx-runestone-container h1,.runestone-sphinx .h1,.runestone-sphinx h1{font-size:36px}.ptx-runestone-container .h2,.ptx-runestone-container h2,.runestone-sphinx .h2,.runestone-sphinx h2{font-size:30px}.ptx-runestone-container .h3,.ptx-runestone-container h3,.runestone-sphinx .h3,.runestone-sphinx h3{font-size:24px}.ptx-runestone-container .h4,.ptx-runestone-container h4,.runestone-sphinx .h4,.runestone-sphinx h4{font-size:18px}.ptx-runestone-container .h5,.ptx-runestone-container h5,.runestone-sphinx .h5,.runestone-sphinx h5{font-size:14px}.ptx-runestone-container .h6,.ptx-runestone-container h6,.runestone-sphinx .h6,.runestone-sphinx h6{font-size:12px}.ptx-runestone-container p,.runestone-sphinx p{margin:0 0 10px}.ptx-runestone-container .lead,.runestone-sphinx .lead{font-size:16px;font-weight:300;line-height:1.4;margin-bottom:20px}@media (min-width:768px){.ptx-runestone-container .lead,.runestone-sphinx .lead{font-size:21px}}.ptx-runestone-container .small,.ptx-runestone-container small,.runestone-sphinx .small,.runestone-sphinx small{font-size:85%}.ptx-runestone-container .mark,.ptx-runestone-container mark,.runestone-sphinx .mark,.runestone-sphinx mark{background-color:#fcf8e3;padding:.2em}.ptx-runestone-container .text-left,.runestone-sphinx .text-left{text-align:left}.ptx-runestone-container .text-right,.runestone-sphinx .text-right{text-align:right}.ptx-runestone-container .text-center,.runestone-sphinx .text-center{text-align:center}.ptx-runestone-container .text-justify,.runestone-sphinx .text-justify{text-align:justify}.ptx-runestone-container .text-nowrap,.runestone-sphinx .text-nowrap{white-space:nowrap}.ptx-runestone-container .text-lowercase,.runestone-sphinx .text-lowercase{text-transform:lowercase}.ptx-runestone-container .text-uppercase,.runestone-sphinx .text-uppercase{text-transform:uppercase}.ptx-runestone-container .text-capitalize,.runestone-sphinx .text-capitalize{text-transform:capitalize}.ptx-runestone-container .text-muted,.runestone-sphinx .text-muted{color:#777}.ptx-runestone-container .text-primary,.runestone-sphinx .text-primary{color:#337ab7}.ptx-runestone-container a.text-primary:focus,.ptx-runestone-container a.text-primary:hover,.runestone-sphinx a.text-primary:focus,.runestone-sphinx a.text-primary:hover{color:#286090}.ptx-runestone-container .text-success,.runestone-sphinx .text-success{color:#3c763d}.ptx-runestone-container a.text-success:focus,.ptx-runestone-container a.text-success:hover,.runestone-sphinx a.text-success:focus,.runestone-sphinx a.text-success:hover{color:#2b542c}.ptx-runestone-container .text-info,.runestone-sphinx .text-info{color:#31708f}.ptx-runestone-container a.text-info:focus,.ptx-runestone-container a.text-info:hover,.runestone-sphinx a.text-info:focus,.runestone-sphinx a.text-info:hover{color:#245269}.ptx-runestone-container .text-warning,.runestone-sphinx .text-warning{color:#8a6d3b}.ptx-runestone-container a.text-warning:focus,.ptx-runestone-container a.text-warning:hover,.runestone-sphinx a.text-warning:focus,.runestone-sphinx a.text-warning:hover{color:#66512c}.ptx-runestone-container .text-danger,.runestone-sphinx .text-danger{color:#a94442}.ptx-runestone-container a.text-danger:focus,.ptx-runestone-container a.text-danger:hover,.runestone-sphinx a.text-danger:focus,.runestone-sphinx a.text-danger:hover{color:#843534}.ptx-runestone-container .bg-primary,.runestone-sphinx .bg-primary{background-color:#337ab7;color:#fff}.ptx-runestone-container a.bg-primary:focus,.ptx-runestone-container a.bg-primary:hover,.runestone-sphinx a.bg-primary:focus,.runestone-sphinx a.bg-primary:hover{background-color:#286090}.ptx-runestone-container .bg-success,.runestone-sphinx .bg-success{background-color:#dff0d8}.ptx-runestone-container a.bg-success:focus,.ptx-runestone-container a.bg-success:hover,.runestone-sphinx a.bg-success:focus,.runestone-sphinx a.bg-success:hover{background-color:#c1e2b3}.ptx-runestone-container .bg-info,.runestone-sphinx .bg-info{background-color:#d9edf7}.ptx-runestone-container a.bg-info:focus,.ptx-runestone-container a.bg-info:hover,.runestone-sphinx a.bg-info:focus,.runestone-sphinx a.bg-info:hover{background-color:#afd9ee}.ptx-runestone-container .bg-warning,.runestone-sphinx .bg-warning{background-color:#fcf8e3}.ptx-runestone-container a.bg-warning:focus,.ptx-runestone-container a.bg-warning:hover,.runestone-sphinx a.bg-warning:focus,.runestone-sphinx a.bg-warning:hover{background-color:#f7ecb5}.ptx-runestone-container .bg-danger,.runestone-sphinx .bg-danger{background-color:#f2dede}.ptx-runestone-container a.bg-danger:focus,.ptx-runestone-container a.bg-danger:hover,.runestone-sphinx a.bg-danger:focus,.runestone-sphinx a.bg-danger:hover{background-color:#e4b9b9}.ptx-runestone-container .page-header,.runestone-sphinx .page-header{border-bottom:1px solid #eee;margin:40px 0 20px;padding-bottom:9px}.ptx-runestone-container ol,.ptx-runestone-container ul,.runestone-sphinx ol,.runestone-sphinx ul{margin-bottom:10px;margin-top:0}.ptx-runestone-container ol ol,.ptx-runestone-container ol ul,.ptx-runestone-container ul ol,.ptx-runestone-container ul ul,.runestone-sphinx ol ol,.runestone-sphinx ol ul,.runestone-sphinx ul ol,.runestone-sphinx ul ul{margin-bottom:0}.ptx-runestone-container .list-unstyled,.runestone-sphinx .list-unstyled{list-style:none;padding-left:0}.ptx-runestone-container .list-inline,.runestone-sphinx .list-inline{list-style:none;margin-left:-5px;padding-left:0}.ptx-runestone-container .list-inline>li,.runestone-sphinx .list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}.ptx-runestone-container dl,.runestone-sphinx dl{margin-bottom:20px;margin-top:0}.ptx-runestone-container dd,.ptx-runestone-container dt,.runestone-sphinx dd,.runestone-sphinx dt{line-height:1.42857143}.ptx-runestone-container dt,.runestone-sphinx dt{font-weight:700}.ptx-runestone-container dd,.runestone-sphinx dd{margin-left:0}@media (min-width:768px){.ptx-runestone-container .dl-horizontal dt,.runestone-sphinx .dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px}.ptx-runestone-container .dl-horizontal dd,.runestone-sphinx .dl-horizontal dd{margin-left:180px}}.ptx-runestone-container abbr[data-original-title],.ptx-runestone-container abbr[title],.runestone-sphinx abbr[data-original-title],.runestone-sphinx abbr[title]{cursor:help}.ptx-runestone-container .initialism,.runestone-sphinx .initialism{font-size:90%;text-transform:uppercase}.ptx-runestone-container blockquote,.runestone-sphinx blockquote{border-left:5px solid #eee;font-size:17.5px;margin:0 0 20px;padding:10px 20px}.ptx-runestone-container blockquote ol:last-child,.ptx-runestone-container blockquote p:last-child,.ptx-runestone-container blockquote ul:last-child,.runestone-sphinx blockquote ol:last-child,.runestone-sphinx blockquote p:last-child,.runestone-sphinx blockquote ul:last-child{margin-bottom:0}.ptx-runestone-container blockquote .small,.ptx-runestone-container blockquote footer,.ptx-runestone-container blockquote small,.runestone-sphinx blockquote .small,.runestone-sphinx blockquote footer,.runestone-sphinx blockquote small{color:#777;display:block;font-size:80%;line-height:1.42857143}.ptx-runestone-container blockquote .small:before,.ptx-runestone-container blockquote footer:before,.ptx-runestone-container blockquote small:before,.runestone-sphinx blockquote .small:before,.runestone-sphinx blockquote footer:before,.runestone-sphinx blockquote small:before{content:"\2014 \00A0"}.ptx-runestone-container .blockquote-reverse,.ptx-runestone-container blockquote.pull-right,.runestone-sphinx .blockquote-reverse,.runestone-sphinx blockquote.pull-right{border-left:0;border-right:5px solid #eee;padding-left:0;padding-right:15px;text-align:right}.ptx-runestone-container .blockquote-reverse .small:before,.ptx-runestone-container .blockquote-reverse footer:before,.ptx-runestone-container .blockquote-reverse small:before,.ptx-runestone-container blockquote.pull-right .small:before,.ptx-runestone-container blockquote.pull-right footer:before,.ptx-runestone-container blockquote.pull-right small:before,.runestone-sphinx .blockquote-reverse .small:before,.runestone-sphinx .blockquote-reverse footer:before,.runestone-sphinx .blockquote-reverse small:before,.runestone-sphinx blockquote.pull-right .small:before,.runestone-sphinx blockquote.pull-right footer:before,.runestone-sphinx blockquote.pull-right small:before{content:""}.ptx-runestone-container .blockquote-reverse .small:after,.ptx-runestone-container .blockquote-reverse footer:after,.ptx-runestone-container .blockquote-reverse small:after,.ptx-runestone-container blockquote.pull-right .small:after,.ptx-runestone-container blockquote.pull-right footer:after,.ptx-runestone-container blockquote.pull-right small:after,.runestone-sphinx .blockquote-reverse .small:after,.runestone-sphinx .blockquote-reverse footer:after,.runestone-sphinx .blockquote-reverse small:after,.runestone-sphinx blockquote.pull-right .small:after,.runestone-sphinx blockquote.pull-right footer:after,.runestone-sphinx blockquote.pull-right small:after{content:"\00A0 \2014"}.ptx-runestone-container address,.runestone-sphinx address{font-style:normal;line-height:1.42857143;margin-bottom:20px}.ptx-runestone-container code,.ptx-runestone-container kbd,.ptx-runestone-container pre,.ptx-runestone-container samp,.runestone-sphinx code,.runestone-sphinx kbd,.runestone-sphinx pre,.runestone-sphinx samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.ptx-runestone-container code,.runestone-sphinx code{background-color:#f9f2f4;border-radius:4px;color:#c7254e;font-size:90%;padding:2px 4px}.ptx-runestone-container kbd,.runestone-sphinx kbd{background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);color:#fff;font-size:90%;padding:2px 4px}.ptx-runestone-container kbd kbd,.runestone-sphinx kbd kbd{-webkit-box-shadow:none;box-shadow:none;font-size:100%;font-weight:700;padding:0}.ptx-runestone-container pre,.runestone-sphinx pre{word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px;color:#333;display:block;font-size:13px;line-height:1.42857143;margin:0 0 10px;padding:9.5px;word-break:break-all}.ptx-runestone-container pre code,.runestone-sphinx pre code{background-color:transparent;border-radius:0;color:inherit;font-size:inherit;padding:0;white-space:pre-wrap}.ptx-runestone-container .pre-scrollable,.runestone-sphinx .pre-scrollable{max-height:340px;overflow-y:scroll}.ptx-runestone-container .container,.runestone-sphinx .container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.ptx-runestone-container .container,.runestone-sphinx .container{width:750px}}@media (min-width:992px){.ptx-runestone-container .container,.runestone-sphinx .container{width:970px}}@media (min-width:1200px){.ptx-runestone-container .container,.runestone-sphinx .container{width:1170px}}.ptx-runestone-container .container-fluid,.runestone-sphinx .container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.ptx-runestone-container .row,.runestone-sphinx .row{margin-left:-15px;margin-right:-15px}.ptx-runestone-container .row-no-gutters,.runestone-sphinx .row-no-gutters{margin-left:0;margin-right:0}.ptx-runestone-container .row-no-gutters [class*=col-],.runestone-sphinx .row-no-gutters [class*=col-]{padding-left:0;padding-right:0}.ptx-runestone-container .col-lg-1,.ptx-runestone-container .col-lg-10,.ptx-runestone-container .col-lg-11,.ptx-runestone-container .col-lg-12,.ptx-runestone-container .col-lg-2,.ptx-runestone-container .col-lg-3,.ptx-runestone-container .col-lg-4,.ptx-runestone-container .col-lg-5,.ptx-runestone-container .col-lg-6,.ptx-runestone-container .col-lg-7,.ptx-runestone-container .col-lg-8,.ptx-runestone-container .col-lg-9,.ptx-runestone-container .col-md-1,.ptx-runestone-container .col-md-10,.ptx-runestone-container .col-md-11,.ptx-runestone-container .col-md-12,.ptx-runestone-container .col-md-2,.ptx-runestone-container .col-md-3,.ptx-runestone-container .col-md-4,.ptx-runestone-container .col-md-5,.ptx-runestone-container .col-md-6,.ptx-runestone-container .col-md-7,.ptx-runestone-container .col-md-8,.ptx-runestone-container .col-md-9,.ptx-runestone-container .col-sm-1,.ptx-runestone-container .col-sm-10,.ptx-runestone-container .col-sm-11,.ptx-runestone-container .col-sm-12,.ptx-runestone-container .col-sm-2,.ptx-runestone-container .col-sm-3,.ptx-runestone-container .col-sm-4,.ptx-runestone-container .col-sm-5,.ptx-runestone-container .col-sm-6,.ptx-runestone-container .col-sm-7,.ptx-runestone-container .col-sm-8,.ptx-runestone-container .col-sm-9,.ptx-runestone-container .col-xs-1,.ptx-runestone-container .col-xs-10,.ptx-runestone-container .col-xs-11,.ptx-runestone-container .col-xs-12,.ptx-runestone-container .col-xs-2,.ptx-runestone-container .col-xs-3,.ptx-runestone-container .col-xs-4,.ptx-runestone-container .col-xs-5,.ptx-runestone-container .col-xs-6,.ptx-runestone-container .col-xs-7,.ptx-runestone-container .col-xs-8,.ptx-runestone-container .col-xs-9,.runestone-sphinx .col-lg-1,.runestone-sphinx .col-lg-10,.runestone-sphinx .col-lg-11,.runestone-sphinx .col-lg-12,.runestone-sphinx .col-lg-2,.runestone-sphinx .col-lg-3,.runestone-sphinx .col-lg-4,.runestone-sphinx .col-lg-5,.runestone-sphinx .col-lg-6,.runestone-sphinx .col-lg-7,.runestone-sphinx .col-lg-8,.runestone-sphinx .col-lg-9,.runestone-sphinx .col-md-1,.runestone-sphinx .col-md-10,.runestone-sphinx .col-md-11,.runestone-sphinx .col-md-12,.runestone-sphinx .col-md-2,.runestone-sphinx .col-md-3,.runestone-sphinx .col-md-4,.runestone-sphinx .col-md-5,.runestone-sphinx .col-md-6,.runestone-sphinx .col-md-7,.runestone-sphinx .col-md-8,.runestone-sphinx .col-md-9,.runestone-sphinx .col-sm-1,.runestone-sphinx .col-sm-10,.runestone-sphinx .col-sm-11,.runestone-sphinx .col-sm-12,.runestone-sphinx .col-sm-2,.runestone-sphinx .col-sm-3,.runestone-sphinx .col-sm-4,.runestone-sphinx .col-sm-5,.runestone-sphinx .col-sm-6,.runestone-sphinx .col-sm-7,.runestone-sphinx .col-sm-8,.runestone-sphinx .col-sm-9,.runestone-sphinx .col-xs-1,.runestone-sphinx .col-xs-10,.runestone-sphinx .col-xs-11,.runestone-sphinx .col-xs-12,.runestone-sphinx .col-xs-2,.runestone-sphinx .col-xs-3,.runestone-sphinx .col-xs-4,.runestone-sphinx .col-xs-5,.runestone-sphinx .col-xs-6,.runestone-sphinx .col-xs-7,.runestone-sphinx .col-xs-8,.runestone-sphinx .col-xs-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.ptx-runestone-container .col-xs-1,.ptx-runestone-container .col-xs-10,.ptx-runestone-container .col-xs-11,.ptx-runestone-container .col-xs-12,.ptx-runestone-container .col-xs-2,.ptx-runestone-container .col-xs-3,.ptx-runestone-container .col-xs-4,.ptx-runestone-container .col-xs-5,.ptx-runestone-container .col-xs-6,.ptx-runestone-container .col-xs-7,.ptx-runestone-container .col-xs-8,.ptx-runestone-container .col-xs-9,.runestone-sphinx .col-xs-1,.runestone-sphinx .col-xs-10,.runestone-sphinx .col-xs-11,.runestone-sphinx .col-xs-12,.runestone-sphinx .col-xs-2,.runestone-sphinx .col-xs-3,.runestone-sphinx .col-xs-4,.runestone-sphinx .col-xs-5,.runestone-sphinx .col-xs-6,.runestone-sphinx .col-xs-7,.runestone-sphinx .col-xs-8,.runestone-sphinx .col-xs-9{float:left}.ptx-runestone-container .col-xs-12,.runestone-sphinx .col-xs-12{width:100%}.ptx-runestone-container .col-xs-11,.runestone-sphinx .col-xs-11{width:91.66666667%}.ptx-runestone-container .col-xs-10,.runestone-sphinx .col-xs-10{width:83.33333333%}.ptx-runestone-container .col-xs-9,.runestone-sphinx .col-xs-9{width:75%}.ptx-runestone-container .col-xs-8,.runestone-sphinx .col-xs-8{width:66.66666667%}.ptx-runestone-container .col-xs-7,.runestone-sphinx .col-xs-7{width:58.33333333%}.ptx-runestone-container .col-xs-6,.runestone-sphinx .col-xs-6{width:50%}.ptx-runestone-container .col-xs-5,.runestone-sphinx .col-xs-5{width:41.66666667%}.ptx-runestone-container .col-xs-4,.runestone-sphinx .col-xs-4{width:33.33333333%}.ptx-runestone-container .col-xs-3,.runestone-sphinx .col-xs-3{width:25%}.ptx-runestone-container .col-xs-2,.runestone-sphinx .col-xs-2{width:16.66666667%}.ptx-runestone-container .col-xs-1,.runestone-sphinx .col-xs-1{width:8.33333333%}.ptx-runestone-container .col-xs-pull-12,.runestone-sphinx .col-xs-pull-12{right:100%}.ptx-runestone-container .col-xs-pull-11,.runestone-sphinx .col-xs-pull-11{right:91.66666667%}.ptx-runestone-container .col-xs-pull-10,.runestone-sphinx .col-xs-pull-10{right:83.33333333%}.ptx-runestone-container .col-xs-pull-9,.runestone-sphinx .col-xs-pull-9{right:75%}.ptx-runestone-container .col-xs-pull-8,.runestone-sphinx .col-xs-pull-8{right:66.66666667%}.ptx-runestone-container .col-xs-pull-7,.runestone-sphinx .col-xs-pull-7{right:58.33333333%}.ptx-runestone-container .col-xs-pull-6,.runestone-sphinx .col-xs-pull-6{right:50%}.ptx-runestone-container .col-xs-pull-5,.runestone-sphinx .col-xs-pull-5{right:41.66666667%}.ptx-runestone-container .col-xs-pull-4,.runestone-sphinx .col-xs-pull-4{right:33.33333333%}.ptx-runestone-container .col-xs-pull-3,.runestone-sphinx .col-xs-pull-3{right:25%}.ptx-runestone-container .col-xs-pull-2,.runestone-sphinx .col-xs-pull-2{right:16.66666667%}.ptx-runestone-container .col-xs-pull-1,.runestone-sphinx .col-xs-pull-1{right:8.33333333%}.ptx-runestone-container .col-xs-pull-0,.runestone-sphinx .col-xs-pull-0{right:auto}.ptx-runestone-container .col-xs-push-12,.runestone-sphinx .col-xs-push-12{left:100%}.ptx-runestone-container .col-xs-push-11,.runestone-sphinx .col-xs-push-11{left:91.66666667%}.ptx-runestone-container .col-xs-push-10,.runestone-sphinx .col-xs-push-10{left:83.33333333%}.ptx-runestone-container .col-xs-push-9,.runestone-sphinx .col-xs-push-9{left:75%}.ptx-runestone-container .col-xs-push-8,.runestone-sphinx .col-xs-push-8{left:66.66666667%}.ptx-runestone-container .col-xs-push-7,.runestone-sphinx .col-xs-push-7{left:58.33333333%}.ptx-runestone-container .col-xs-push-6,.runestone-sphinx .col-xs-push-6{left:50%}.ptx-runestone-container .col-xs-push-5,.runestone-sphinx .col-xs-push-5{left:41.66666667%}.ptx-runestone-container .col-xs-push-4,.runestone-sphinx .col-xs-push-4{left:33.33333333%}.ptx-runestone-container .col-xs-push-3,.runestone-sphinx .col-xs-push-3{left:25%}.ptx-runestone-container .col-xs-push-2,.runestone-sphinx .col-xs-push-2{left:16.66666667%}.ptx-runestone-container .col-xs-push-1,.runestone-sphinx .col-xs-push-1{left:8.33333333%}.ptx-runestone-container .col-xs-push-0,.runestone-sphinx .col-xs-push-0{left:auto}.ptx-runestone-container .col-xs-offset-12,.runestone-sphinx .col-xs-offset-12{margin-left:100%}.ptx-runestone-container .col-xs-offset-11,.runestone-sphinx .col-xs-offset-11{margin-left:91.66666667%}.ptx-runestone-container .col-xs-offset-10,.runestone-sphinx .col-xs-offset-10{margin-left:83.33333333%}.ptx-runestone-container .col-xs-offset-9,.runestone-sphinx .col-xs-offset-9{margin-left:75%}.ptx-runestone-container .col-xs-offset-8,.runestone-sphinx .col-xs-offset-8{margin-left:66.66666667%}.ptx-runestone-container .col-xs-offset-7,.runestone-sphinx .col-xs-offset-7{margin-left:58.33333333%}.ptx-runestone-container .col-xs-offset-6,.runestone-sphinx .col-xs-offset-6{margin-left:50%}.ptx-runestone-container .col-xs-offset-5,.runestone-sphinx .col-xs-offset-5{margin-left:41.66666667%}.ptx-runestone-container .col-xs-offset-4,.runestone-sphinx .col-xs-offset-4{margin-left:33.33333333%}.ptx-runestone-container .col-xs-offset-3,.runestone-sphinx .col-xs-offset-3{margin-left:25%}.ptx-runestone-container .col-xs-offset-2,.runestone-sphinx .col-xs-offset-2{margin-left:16.66666667%}.ptx-runestone-container .col-xs-offset-1,.runestone-sphinx .col-xs-offset-1{margin-left:8.33333333%}.ptx-runestone-container .col-xs-offset-0,.runestone-sphinx .col-xs-offset-0{margin-left:0}@media (min-width:768px){.ptx-runestone-container .col-sm-1,.ptx-runestone-container .col-sm-10,.ptx-runestone-container .col-sm-11,.ptx-runestone-container .col-sm-12,.ptx-runestone-container .col-sm-2,.ptx-runestone-container .col-sm-3,.ptx-runestone-container .col-sm-4,.ptx-runestone-container .col-sm-5,.ptx-runestone-container .col-sm-6,.ptx-runestone-container .col-sm-7,.ptx-runestone-container .col-sm-8,.ptx-runestone-container .col-sm-9,.runestone-sphinx .col-sm-1,.runestone-sphinx .col-sm-10,.runestone-sphinx .col-sm-11,.runestone-sphinx .col-sm-12,.runestone-sphinx .col-sm-2,.runestone-sphinx .col-sm-3,.runestone-sphinx .col-sm-4,.runestone-sphinx .col-sm-5,.runestone-sphinx .col-sm-6,.runestone-sphinx .col-sm-7,.runestone-sphinx .col-sm-8,.runestone-sphinx .col-sm-9{float:left}.ptx-runestone-container .col-sm-12,.runestone-sphinx .col-sm-12{width:100%}.ptx-runestone-container .col-sm-11,.runestone-sphinx .col-sm-11{width:91.66666667%}.ptx-runestone-container .col-sm-10,.runestone-sphinx .col-sm-10{width:83.33333333%}.ptx-runestone-container .col-sm-9,.runestone-sphinx .col-sm-9{width:75%}.ptx-runestone-container .col-sm-8,.runestone-sphinx .col-sm-8{width:66.66666667%}.ptx-runestone-container .col-sm-7,.runestone-sphinx .col-sm-7{width:58.33333333%}.ptx-runestone-container .col-sm-6,.runestone-sphinx .col-sm-6{width:50%}.ptx-runestone-container .col-sm-5,.runestone-sphinx .col-sm-5{width:41.66666667%}.ptx-runestone-container .col-sm-4,.runestone-sphinx .col-sm-4{width:33.33333333%}.ptx-runestone-container .col-sm-3,.runestone-sphinx .col-sm-3{width:25%}.ptx-runestone-container .col-sm-2,.runestone-sphinx .col-sm-2{width:16.66666667%}.ptx-runestone-container .col-sm-1,.runestone-sphinx .col-sm-1{width:8.33333333%}.ptx-runestone-container .col-sm-pull-12,.runestone-sphinx .col-sm-pull-12{right:100%}.ptx-runestone-container .col-sm-pull-11,.runestone-sphinx .col-sm-pull-11{right:91.66666667%}.ptx-runestone-container .col-sm-pull-10,.runestone-sphinx .col-sm-pull-10{right:83.33333333%}.ptx-runestone-container .col-sm-pull-9,.runestone-sphinx .col-sm-pull-9{right:75%}.ptx-runestone-container .col-sm-pull-8,.runestone-sphinx .col-sm-pull-8{right:66.66666667%}.ptx-runestone-container .col-sm-pull-7,.runestone-sphinx .col-sm-pull-7{right:58.33333333%}.ptx-runestone-container .col-sm-pull-6,.runestone-sphinx .col-sm-pull-6{right:50%}.ptx-runestone-container .col-sm-pull-5,.runestone-sphinx .col-sm-pull-5{right:41.66666667%}.ptx-runestone-container .col-sm-pull-4,.runestone-sphinx .col-sm-pull-4{right:33.33333333%}.ptx-runestone-container .col-sm-pull-3,.runestone-sphinx .col-sm-pull-3{right:25%}.ptx-runestone-container .col-sm-pull-2,.runestone-sphinx .col-sm-pull-2{right:16.66666667%}.ptx-runestone-container .col-sm-pull-1,.runestone-sphinx .col-sm-pull-1{right:8.33333333%}.ptx-runestone-container .col-sm-pull-0,.runestone-sphinx .col-sm-pull-0{right:auto}.ptx-runestone-container .col-sm-push-12,.runestone-sphinx .col-sm-push-12{left:100%}.ptx-runestone-container .col-sm-push-11,.runestone-sphinx .col-sm-push-11{left:91.66666667%}.ptx-runestone-container .col-sm-push-10,.runestone-sphinx .col-sm-push-10{left:83.33333333%}.ptx-runestone-container .col-sm-push-9,.runestone-sphinx .col-sm-push-9{left:75%}.ptx-runestone-container .col-sm-push-8,.runestone-sphinx .col-sm-push-8{left:66.66666667%}.ptx-runestone-container .col-sm-push-7,.runestone-sphinx .col-sm-push-7{left:58.33333333%}.ptx-runestone-container .col-sm-push-6,.runestone-sphinx .col-sm-push-6{left:50%}.ptx-runestone-container .col-sm-push-5,.runestone-sphinx .col-sm-push-5{left:41.66666667%}.ptx-runestone-container .col-sm-push-4,.runestone-sphinx .col-sm-push-4{left:33.33333333%}.ptx-runestone-container .col-sm-push-3,.runestone-sphinx .col-sm-push-3{left:25%}.ptx-runestone-container .col-sm-push-2,.runestone-sphinx .col-sm-push-2{left:16.66666667%}.ptx-runestone-container .col-sm-push-1,.runestone-sphinx .col-sm-push-1{left:8.33333333%}.ptx-runestone-container .col-sm-push-0,.runestone-sphinx .col-sm-push-0{left:auto}.ptx-runestone-container .col-sm-offset-12,.runestone-sphinx .col-sm-offset-12{margin-left:100%}.ptx-runestone-container .col-sm-offset-11,.runestone-sphinx .col-sm-offset-11{margin-left:91.66666667%}.ptx-runestone-container .col-sm-offset-10,.runestone-sphinx .col-sm-offset-10{margin-left:83.33333333%}.ptx-runestone-container .col-sm-offset-9,.runestone-sphinx .col-sm-offset-9{margin-left:75%}.ptx-runestone-container .col-sm-offset-8,.runestone-sphinx .col-sm-offset-8{margin-left:66.66666667%}.ptx-runestone-container .col-sm-offset-7,.runestone-sphinx .col-sm-offset-7{margin-left:58.33333333%}.ptx-runestone-container .col-sm-offset-6,.runestone-sphinx .col-sm-offset-6{margin-left:50%}.ptx-runestone-container .col-sm-offset-5,.runestone-sphinx .col-sm-offset-5{margin-left:41.66666667%}.ptx-runestone-container .col-sm-offset-4,.runestone-sphinx .col-sm-offset-4{margin-left:33.33333333%}.ptx-runestone-container .col-sm-offset-3,.runestone-sphinx .col-sm-offset-3{margin-left:25%}.ptx-runestone-container .col-sm-offset-2,.runestone-sphinx .col-sm-offset-2{margin-left:16.66666667%}.ptx-runestone-container .col-sm-offset-1,.runestone-sphinx .col-sm-offset-1{margin-left:8.33333333%}.ptx-runestone-container .col-sm-offset-0,.runestone-sphinx .col-sm-offset-0{margin-left:0}}@media (min-width:992px){.ptx-runestone-container .col-md-1,.ptx-runestone-container .col-md-10,.ptx-runestone-container .col-md-11,.ptx-runestone-container .col-md-12,.ptx-runestone-container .col-md-2,.ptx-runestone-container .col-md-3,.ptx-runestone-container .col-md-4,.ptx-runestone-container .col-md-5,.ptx-runestone-container .col-md-6,.ptx-runestone-container .col-md-7,.ptx-runestone-container .col-md-8,.ptx-runestone-container .col-md-9,.runestone-sphinx .col-md-1,.runestone-sphinx .col-md-10,.runestone-sphinx .col-md-11,.runestone-sphinx .col-md-12,.runestone-sphinx .col-md-2,.runestone-sphinx .col-md-3,.runestone-sphinx .col-md-4,.runestone-sphinx .col-md-5,.runestone-sphinx .col-md-6,.runestone-sphinx .col-md-7,.runestone-sphinx .col-md-8,.runestone-sphinx .col-md-9{float:left}.ptx-runestone-container .col-md-12,.runestone-sphinx .col-md-12{width:100%}.ptx-runestone-container .col-md-11,.runestone-sphinx .col-md-11{width:91.66666667%}.ptx-runestone-container .col-md-10,.runestone-sphinx .col-md-10{width:83.33333333%}.ptx-runestone-container .col-md-9,.runestone-sphinx .col-md-9{width:75%}.ptx-runestone-container .col-md-8,.runestone-sphinx .col-md-8{width:66.66666667%}.ptx-runestone-container .col-md-7,.runestone-sphinx .col-md-7{width:58.33333333%}.ptx-runestone-container .col-md-6,.runestone-sphinx .col-md-6{width:50%}.ptx-runestone-container .col-md-5,.runestone-sphinx .col-md-5{width:41.66666667%}.ptx-runestone-container .col-md-4,.runestone-sphinx .col-md-4{width:33.33333333%}.ptx-runestone-container .col-md-3,.runestone-sphinx .col-md-3{width:25%}.ptx-runestone-container .col-md-2,.runestone-sphinx .col-md-2{width:16.66666667%}.ptx-runestone-container .col-md-1,.runestone-sphinx .col-md-1{width:8.33333333%}.ptx-runestone-container .col-md-pull-12,.runestone-sphinx .col-md-pull-12{right:100%}.ptx-runestone-container .col-md-pull-11,.runestone-sphinx .col-md-pull-11{right:91.66666667%}.ptx-runestone-container .col-md-pull-10,.runestone-sphinx .col-md-pull-10{right:83.33333333%}.ptx-runestone-container .col-md-pull-9,.runestone-sphinx .col-md-pull-9{right:75%}.ptx-runestone-container .col-md-pull-8,.runestone-sphinx .col-md-pull-8{right:66.66666667%}.ptx-runestone-container .col-md-pull-7,.runestone-sphinx .col-md-pull-7{right:58.33333333%}.ptx-runestone-container .col-md-pull-6,.runestone-sphinx .col-md-pull-6{right:50%}.ptx-runestone-container .col-md-pull-5,.runestone-sphinx .col-md-pull-5{right:41.66666667%}.ptx-runestone-container .col-md-pull-4,.runestone-sphinx .col-md-pull-4{right:33.33333333%}.ptx-runestone-container .col-md-pull-3,.runestone-sphinx .col-md-pull-3{right:25%}.ptx-runestone-container .col-md-pull-2,.runestone-sphinx .col-md-pull-2{right:16.66666667%}.ptx-runestone-container .col-md-pull-1,.runestone-sphinx .col-md-pull-1{right:8.33333333%}.ptx-runestone-container .col-md-pull-0,.runestone-sphinx .col-md-pull-0{right:auto}.ptx-runestone-container .col-md-push-12,.runestone-sphinx .col-md-push-12{left:100%}.ptx-runestone-container .col-md-push-11,.runestone-sphinx .col-md-push-11{left:91.66666667%}.ptx-runestone-container .col-md-push-10,.runestone-sphinx .col-md-push-10{left:83.33333333%}.ptx-runestone-container .col-md-push-9,.runestone-sphinx .col-md-push-9{left:75%}.ptx-runestone-container .col-md-push-8,.runestone-sphinx .col-md-push-8{left:66.66666667%}.ptx-runestone-container .col-md-push-7,.runestone-sphinx .col-md-push-7{left:58.33333333%}.ptx-runestone-container .col-md-push-6,.runestone-sphinx .col-md-push-6{left:50%}.ptx-runestone-container .col-md-push-5,.runestone-sphinx .col-md-push-5{left:41.66666667%}.ptx-runestone-container .col-md-push-4,.runestone-sphinx .col-md-push-4{left:33.33333333%}.ptx-runestone-container .col-md-push-3,.runestone-sphinx .col-md-push-3{left:25%}.ptx-runestone-container .col-md-push-2,.runestone-sphinx .col-md-push-2{left:16.66666667%}.ptx-runestone-container .col-md-push-1,.runestone-sphinx .col-md-push-1{left:8.33333333%}.ptx-runestone-container .col-md-push-0,.runestone-sphinx .col-md-push-0{left:auto}.ptx-runestone-container .col-md-offset-12,.runestone-sphinx .col-md-offset-12{margin-left:100%}.ptx-runestone-container .col-md-offset-11,.runestone-sphinx .col-md-offset-11{margin-left:91.66666667%}.ptx-runestone-container .col-md-offset-10,.runestone-sphinx .col-md-offset-10{margin-left:83.33333333%}.ptx-runestone-container .col-md-offset-9,.runestone-sphinx .col-md-offset-9{margin-left:75%}.ptx-runestone-container .col-md-offset-8,.runestone-sphinx .col-md-offset-8{margin-left:66.66666667%}.ptx-runestone-container .col-md-offset-7,.runestone-sphinx .col-md-offset-7{margin-left:58.33333333%}.ptx-runestone-container .col-md-offset-6,.runestone-sphinx .col-md-offset-6{margin-left:50%}.ptx-runestone-container .col-md-offset-5,.runestone-sphinx .col-md-offset-5{margin-left:41.66666667%}.ptx-runestone-container .col-md-offset-4,.runestone-sphinx .col-md-offset-4{margin-left:33.33333333%}.ptx-runestone-container .col-md-offset-3,.runestone-sphinx .col-md-offset-3{margin-left:25%}.ptx-runestone-container .col-md-offset-2,.runestone-sphinx .col-md-offset-2{margin-left:16.66666667%}.ptx-runestone-container .col-md-offset-1,.runestone-sphinx .col-md-offset-1{margin-left:8.33333333%}.ptx-runestone-container .col-md-offset-0,.runestone-sphinx .col-md-offset-0{margin-left:0}}@media (min-width:1200px){.ptx-runestone-container .col-lg-1,.ptx-runestone-container .col-lg-10,.ptx-runestone-container .col-lg-11,.ptx-runestone-container .col-lg-12,.ptx-runestone-container .col-lg-2,.ptx-runestone-container .col-lg-3,.ptx-runestone-container .col-lg-4,.ptx-runestone-container .col-lg-5,.ptx-runestone-container .col-lg-6,.ptx-runestone-container .col-lg-7,.ptx-runestone-container .col-lg-8,.ptx-runestone-container .col-lg-9,.runestone-sphinx .col-lg-1,.runestone-sphinx .col-lg-10,.runestone-sphinx .col-lg-11,.runestone-sphinx .col-lg-12,.runestone-sphinx .col-lg-2,.runestone-sphinx .col-lg-3,.runestone-sphinx .col-lg-4,.runestone-sphinx .col-lg-5,.runestone-sphinx .col-lg-6,.runestone-sphinx .col-lg-7,.runestone-sphinx .col-lg-8,.runestone-sphinx .col-lg-9{float:left}.ptx-runestone-container .col-lg-12,.runestone-sphinx .col-lg-12{width:100%}.ptx-runestone-container .col-lg-11,.runestone-sphinx .col-lg-11{width:91.66666667%}.ptx-runestone-container .col-lg-10,.runestone-sphinx .col-lg-10{width:83.33333333%}.ptx-runestone-container .col-lg-9,.runestone-sphinx .col-lg-9{width:75%}.ptx-runestone-container .col-lg-8,.runestone-sphinx .col-lg-8{width:66.66666667%}.ptx-runestone-container .col-lg-7,.runestone-sphinx .col-lg-7{width:58.33333333%}.ptx-runestone-container .col-lg-6,.runestone-sphinx .col-lg-6{width:50%}.ptx-runestone-container .col-lg-5,.runestone-sphinx .col-lg-5{width:41.66666667%}.ptx-runestone-container .col-lg-4,.runestone-sphinx .col-lg-4{width:33.33333333%}.ptx-runestone-container .col-lg-3,.runestone-sphinx .col-lg-3{width:25%}.ptx-runestone-container .col-lg-2,.runestone-sphinx .col-lg-2{width:16.66666667%}.ptx-runestone-container .col-lg-1,.runestone-sphinx .col-lg-1{width:8.33333333%}.ptx-runestone-container .col-lg-pull-12,.runestone-sphinx .col-lg-pull-12{right:100%}.ptx-runestone-container .col-lg-pull-11,.runestone-sphinx .col-lg-pull-11{right:91.66666667%}.ptx-runestone-container .col-lg-pull-10,.runestone-sphinx .col-lg-pull-10{right:83.33333333%}.ptx-runestone-container .col-lg-pull-9,.runestone-sphinx .col-lg-pull-9{right:75%}.ptx-runestone-container .col-lg-pull-8,.runestone-sphinx .col-lg-pull-8{right:66.66666667%}.ptx-runestone-container .col-lg-pull-7,.runestone-sphinx .col-lg-pull-7{right:58.33333333%}.ptx-runestone-container .col-lg-pull-6,.runestone-sphinx .col-lg-pull-6{right:50%}.ptx-runestone-container .col-lg-pull-5,.runestone-sphinx .col-lg-pull-5{right:41.66666667%}.ptx-runestone-container .col-lg-pull-4,.runestone-sphinx .col-lg-pull-4{right:33.33333333%}.ptx-runestone-container .col-lg-pull-3,.runestone-sphinx .col-lg-pull-3{right:25%}.ptx-runestone-container .col-lg-pull-2,.runestone-sphinx .col-lg-pull-2{right:16.66666667%}.ptx-runestone-container .col-lg-pull-1,.runestone-sphinx .col-lg-pull-1{right:8.33333333%}.ptx-runestone-container .col-lg-pull-0,.runestone-sphinx .col-lg-pull-0{right:auto}.ptx-runestone-container .col-lg-push-12,.runestone-sphinx .col-lg-push-12{left:100%}.ptx-runestone-container .col-lg-push-11,.runestone-sphinx .col-lg-push-11{left:91.66666667%}.ptx-runestone-container .col-lg-push-10,.runestone-sphinx .col-lg-push-10{left:83.33333333%}.ptx-runestone-container .col-lg-push-9,.runestone-sphinx .col-lg-push-9{left:75%}.ptx-runestone-container .col-lg-push-8,.runestone-sphinx .col-lg-push-8{left:66.66666667%}.ptx-runestone-container .col-lg-push-7,.runestone-sphinx .col-lg-push-7{left:58.33333333%}.ptx-runestone-container .col-lg-push-6,.runestone-sphinx .col-lg-push-6{left:50%}.ptx-runestone-container .col-lg-push-5,.runestone-sphinx .col-lg-push-5{left:41.66666667%}.ptx-runestone-container .col-lg-push-4,.runestone-sphinx .col-lg-push-4{left:33.33333333%}.ptx-runestone-container .col-lg-push-3,.runestone-sphinx .col-lg-push-3{left:25%}.ptx-runestone-container .col-lg-push-2,.runestone-sphinx .col-lg-push-2{left:16.66666667%}.ptx-runestone-container .col-lg-push-1,.runestone-sphinx .col-lg-push-1{left:8.33333333%}.ptx-runestone-container .col-lg-push-0,.runestone-sphinx .col-lg-push-0{left:auto}.ptx-runestone-container .col-lg-offset-12,.runestone-sphinx .col-lg-offset-12{margin-left:100%}.ptx-runestone-container .col-lg-offset-11,.runestone-sphinx .col-lg-offset-11{margin-left:91.66666667%}.ptx-runestone-container .col-lg-offset-10,.runestone-sphinx .col-lg-offset-10{margin-left:83.33333333%}.ptx-runestone-container .col-lg-offset-9,.runestone-sphinx .col-lg-offset-9{margin-left:75%}.ptx-runestone-container .col-lg-offset-8,.runestone-sphinx .col-lg-offset-8{margin-left:66.66666667%}.ptx-runestone-container .col-lg-offset-7,.runestone-sphinx .col-lg-offset-7{margin-left:58.33333333%}.ptx-runestone-container .col-lg-offset-6,.runestone-sphinx .col-lg-offset-6{margin-left:50%}.ptx-runestone-container .col-lg-offset-5,.runestone-sphinx .col-lg-offset-5{margin-left:41.66666667%}.ptx-runestone-container .col-lg-offset-4,.runestone-sphinx .col-lg-offset-4{margin-left:33.33333333%}.ptx-runestone-container .col-lg-offset-3,.runestone-sphinx .col-lg-offset-3{margin-left:25%}.ptx-runestone-container .col-lg-offset-2,.runestone-sphinx .col-lg-offset-2{margin-left:16.66666667%}.ptx-runestone-container .col-lg-offset-1,.runestone-sphinx .col-lg-offset-1{margin-left:8.33333333%}.ptx-runestone-container .col-lg-offset-0,.runestone-sphinx .col-lg-offset-0{margin-left:0}}.ptx-runestone-container table,.runestone-sphinx table{background-color:transparent}.ptx-runestone-container table col[class*=col-],.runestone-sphinx table col[class*=col-]{display:table-column;float:none;position:static}.ptx-runestone-container table td[class*=col-],.ptx-runestone-container table th[class*=col-],.runestone-sphinx table td[class*=col-],.runestone-sphinx table th[class*=col-]{display:table-cell;float:none;position:static}.ptx-runestone-container caption,.runestone-sphinx caption{color:#777;padding-bottom:8px;padding-top:8px;text-align:left}.ptx-runestone-container th,.runestone-sphinx th{text-align:left}.ptx-runestone-container .table,.runestone-sphinx .table{margin-bottom:20px;max-width:100%;width:100%}.ptx-runestone-container .table>tbody>tr>td,.ptx-runestone-container .table>tbody>tr>th,.ptx-runestone-container .table>tfoot>tr>td,.ptx-runestone-container .table>tfoot>tr>th,.ptx-runestone-container .table>thead>tr>td,.ptx-runestone-container .table>thead>tr>th,.runestone-sphinx .table>tbody>tr>td,.runestone-sphinx .table>tbody>tr>th,.runestone-sphinx .table>tfoot>tr>td,.runestone-sphinx .table>tfoot>tr>th,.runestone-sphinx .table>thead>tr>td,.runestone-sphinx .table>thead>tr>th{border-top:1px solid #ddd;line-height:1.42857143;padding:8px;vertical-align:top}.ptx-runestone-container .table>thead>tr>th,.runestone-sphinx .table>thead>tr>th{border-bottom:2px solid #ddd;vertical-align:bottom}.ptx-runestone-container .table>caption+thead>tr:first-child>td,.ptx-runestone-container .table>caption+thead>tr:first-child>th,.ptx-runestone-container .table>colgroup+thead>tr:first-child>td,.ptx-runestone-container .table>colgroup+thead>tr:first-child>th,.ptx-runestone-container .table>thead:first-child>tr:first-child>td,.ptx-runestone-container .table>thead:first-child>tr:first-child>th,.runestone-sphinx .table>caption+thead>tr:first-child>td,.runestone-sphinx .table>caption+thead>tr:first-child>th,.runestone-sphinx .table>colgroup+thead>tr:first-child>td,.runestone-sphinx .table>colgroup+thead>tr:first-child>th,.runestone-sphinx .table>thead:first-child>tr:first-child>td,.runestone-sphinx .table>thead:first-child>tr:first-child>th{border-top:0}.ptx-runestone-container .table>tbody+tbody,.runestone-sphinx .table>tbody+tbody{border-top:2px solid #ddd}.ptx-runestone-container .table .table,.runestone-sphinx .table .table{background-color:#fff}.ptx-runestone-container .table-condensed>tbody>tr>td,.ptx-runestone-container .table-condensed>tbody>tr>th,.ptx-runestone-container .table-condensed>tfoot>tr>td,.ptx-runestone-container .table-condensed>tfoot>tr>th,.ptx-runestone-container .table-condensed>thead>tr>td,.ptx-runestone-container .table-condensed>thead>tr>th,.runestone-sphinx .table-condensed>tbody>tr>td,.runestone-sphinx .table-condensed>tbody>tr>th,.runestone-sphinx .table-condensed>tfoot>tr>td,.runestone-sphinx .table-condensed>tfoot>tr>th,.runestone-sphinx .table-condensed>thead>tr>td,.runestone-sphinx .table-condensed>thead>tr>th{padding:5px}.ptx-runestone-container .table-bordered,.ptx-runestone-container .table-bordered>tbody>tr>td,.ptx-runestone-container .table-bordered>tbody>tr>th,.ptx-runestone-container .table-bordered>tfoot>tr>td,.ptx-runestone-container .table-bordered>tfoot>tr>th,.ptx-runestone-container .table-bordered>thead>tr>td,.ptx-runestone-container .table-bordered>thead>tr>th,.runestone-sphinx .table-bordered,.runestone-sphinx .table-bordered>tbody>tr>td,.runestone-sphinx .table-bordered>tbody>tr>th,.runestone-sphinx .table-bordered>tfoot>tr>td,.runestone-sphinx .table-bordered>tfoot>tr>th,.runestone-sphinx .table-bordered>thead>tr>td,.runestone-sphinx .table-bordered>thead>tr>th{border:1px solid #ddd}.ptx-runestone-container .table-bordered>thead>tr>td,.ptx-runestone-container .table-bordered>thead>tr>th,.runestone-sphinx .table-bordered>thead>tr>td,.runestone-sphinx .table-bordered>thead>tr>th{border-bottom-width:2px}.ptx-runestone-container .table-striped>tbody>tr:nth-of-type(odd),.runestone-sphinx .table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.ptx-runestone-container .table-hover>tbody>tr:hover,.ptx-runestone-container .table>tbody>tr.active>td,.ptx-runestone-container .table>tbody>tr.active>th,.ptx-runestone-container .table>tbody>tr>td.active,.ptx-runestone-container .table>tbody>tr>th.active,.ptx-runestone-container .table>tfoot>tr.active>td,.ptx-runestone-container .table>tfoot>tr.active>th,.ptx-runestone-container .table>tfoot>tr>td.active,.ptx-runestone-container .table>tfoot>tr>th.active,.ptx-runestone-container .table>thead>tr.active>td,.ptx-runestone-container .table>thead>tr.active>th,.ptx-runestone-container .table>thead>tr>td.active,.ptx-runestone-container .table>thead>tr>th.active,.runestone-sphinx .table-hover>tbody>tr:hover,.runestone-sphinx .table>tbody>tr.active>td,.runestone-sphinx .table>tbody>tr.active>th,.runestone-sphinx .table>tbody>tr>td.active,.runestone-sphinx .table>tbody>tr>th.active,.runestone-sphinx .table>tfoot>tr.active>td,.runestone-sphinx .table>tfoot>tr.active>th,.runestone-sphinx .table>tfoot>tr>td.active,.runestone-sphinx .table>tfoot>tr>th.active,.runestone-sphinx .table>thead>tr.active>td,.runestone-sphinx .table>thead>tr.active>th,.runestone-sphinx .table>thead>tr>td.active,.runestone-sphinx .table>thead>tr>th.active{background-color:#f5f5f5}.ptx-runestone-container .table-hover>tbody>tr.active:hover>td,.ptx-runestone-container .table-hover>tbody>tr.active:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.active,.ptx-runestone-container .table-hover>tbody>tr>td.active:hover,.ptx-runestone-container .table-hover>tbody>tr>th.active:hover,.runestone-sphinx .table-hover>tbody>tr.active:hover>td,.runestone-sphinx .table-hover>tbody>tr.active:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.active,.runestone-sphinx .table-hover>tbody>tr>td.active:hover,.runestone-sphinx .table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.ptx-runestone-container .table>tbody>tr.success>td,.ptx-runestone-container .table>tbody>tr.success>th,.ptx-runestone-container .table>tbody>tr>td.success,.ptx-runestone-container .table>tbody>tr>th.success,.ptx-runestone-container .table>tfoot>tr.success>td,.ptx-runestone-container .table>tfoot>tr.success>th,.ptx-runestone-container .table>tfoot>tr>td.success,.ptx-runestone-container .table>tfoot>tr>th.success,.ptx-runestone-container .table>thead>tr.success>td,.ptx-runestone-container .table>thead>tr.success>th,.ptx-runestone-container .table>thead>tr>td.success,.ptx-runestone-container .table>thead>tr>th.success,.runestone-sphinx .table>tbody>tr.success>td,.runestone-sphinx .table>tbody>tr.success>th,.runestone-sphinx .table>tbody>tr>td.success,.runestone-sphinx .table>tbody>tr>th.success,.runestone-sphinx .table>tfoot>tr.success>td,.runestone-sphinx .table>tfoot>tr.success>th,.runestone-sphinx .table>tfoot>tr>td.success,.runestone-sphinx .table>tfoot>tr>th.success,.runestone-sphinx .table>thead>tr.success>td,.runestone-sphinx .table>thead>tr.success>th,.runestone-sphinx .table>thead>tr>td.success,.runestone-sphinx .table>thead>tr>th.success{background-color:#dff0d8}.ptx-runestone-container .table-hover>tbody>tr.success:hover>td,.ptx-runestone-container .table-hover>tbody>tr.success:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.success,.ptx-runestone-container .table-hover>tbody>tr>td.success:hover,.ptx-runestone-container .table-hover>tbody>tr>th.success:hover,.runestone-sphinx .table-hover>tbody>tr.success:hover>td,.runestone-sphinx .table-hover>tbody>tr.success:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.success,.runestone-sphinx .table-hover>tbody>tr>td.success:hover,.runestone-sphinx .table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.ptx-runestone-container .table>tbody>tr.info>td,.ptx-runestone-container .table>tbody>tr.info>th,.ptx-runestone-container .table>tbody>tr>td.info,.ptx-runestone-container .table>tbody>tr>th.info,.ptx-runestone-container .table>tfoot>tr.info>td,.ptx-runestone-container .table>tfoot>tr.info>th,.ptx-runestone-container .table>tfoot>tr>td.info,.ptx-runestone-container .table>tfoot>tr>th.info,.ptx-runestone-container .table>thead>tr.info>td,.ptx-runestone-container .table>thead>tr.info>th,.ptx-runestone-container .table>thead>tr>td.info,.ptx-runestone-container .table>thead>tr>th.info,.runestone-sphinx .table>tbody>tr.info>td,.runestone-sphinx .table>tbody>tr.info>th,.runestone-sphinx .table>tbody>tr>td.info,.runestone-sphinx .table>tbody>tr>th.info,.runestone-sphinx .table>tfoot>tr.info>td,.runestone-sphinx .table>tfoot>tr.info>th,.runestone-sphinx .table>tfoot>tr>td.info,.runestone-sphinx .table>tfoot>tr>th.info,.runestone-sphinx .table>thead>tr.info>td,.runestone-sphinx .table>thead>tr.info>th,.runestone-sphinx .table>thead>tr>td.info,.runestone-sphinx .table>thead>tr>th.info{background-color:#d9edf7}.ptx-runestone-container .table-hover>tbody>tr.info:hover>td,.ptx-runestone-container .table-hover>tbody>tr.info:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.info,.ptx-runestone-container .table-hover>tbody>tr>td.info:hover,.ptx-runestone-container .table-hover>tbody>tr>th.info:hover,.runestone-sphinx .table-hover>tbody>tr.info:hover>td,.runestone-sphinx .table-hover>tbody>tr.info:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.info,.runestone-sphinx .table-hover>tbody>tr>td.info:hover,.runestone-sphinx .table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.ptx-runestone-container .table>tbody>tr.warning>td,.ptx-runestone-container .table>tbody>tr.warning>th,.ptx-runestone-container .table>tbody>tr>td.warning,.ptx-runestone-container .table>tbody>tr>th.warning,.ptx-runestone-container .table>tfoot>tr.warning>td,.ptx-runestone-container .table>tfoot>tr.warning>th,.ptx-runestone-container .table>tfoot>tr>td.warning,.ptx-runestone-container .table>tfoot>tr>th.warning,.ptx-runestone-container .table>thead>tr.warning>td,.ptx-runestone-container .table>thead>tr.warning>th,.ptx-runestone-container .table>thead>tr>td.warning,.ptx-runestone-container .table>thead>tr>th.warning,.runestone-sphinx .table>tbody>tr.warning>td,.runestone-sphinx .table>tbody>tr.warning>th,.runestone-sphinx .table>tbody>tr>td.warning,.runestone-sphinx .table>tbody>tr>th.warning,.runestone-sphinx .table>tfoot>tr.warning>td,.runestone-sphinx .table>tfoot>tr.warning>th,.runestone-sphinx .table>tfoot>tr>td.warning,.runestone-sphinx .table>tfoot>tr>th.warning,.runestone-sphinx .table>thead>tr.warning>td,.runestone-sphinx .table>thead>tr.warning>th,.runestone-sphinx .table>thead>tr>td.warning,.runestone-sphinx .table>thead>tr>th.warning{background-color:#fcf8e3}.ptx-runestone-container .table-hover>tbody>tr.warning:hover>td,.ptx-runestone-container .table-hover>tbody>tr.warning:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.warning,.ptx-runestone-container .table-hover>tbody>tr>td.warning:hover,.ptx-runestone-container .table-hover>tbody>tr>th.warning:hover,.runestone-sphinx .table-hover>tbody>tr.warning:hover>td,.runestone-sphinx .table-hover>tbody>tr.warning:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.warning,.runestone-sphinx .table-hover>tbody>tr>td.warning:hover,.runestone-sphinx .table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.ptx-runestone-container .table>tbody>tr.danger>td,.ptx-runestone-container .table>tbody>tr.danger>th,.ptx-runestone-container .table>tbody>tr>td.danger,.ptx-runestone-container .table>tbody>tr>th.danger,.ptx-runestone-container .table>tfoot>tr.danger>td,.ptx-runestone-container .table>tfoot>tr.danger>th,.ptx-runestone-container .table>tfoot>tr>td.danger,.ptx-runestone-container .table>tfoot>tr>th.danger,.ptx-runestone-container .table>thead>tr.danger>td,.ptx-runestone-container .table>thead>tr.danger>th,.ptx-runestone-container .table>thead>tr>td.danger,.ptx-runestone-container .table>thead>tr>th.danger,.runestone-sphinx .table>tbody>tr.danger>td,.runestone-sphinx .table>tbody>tr.danger>th,.runestone-sphinx .table>tbody>tr>td.danger,.runestone-sphinx .table>tbody>tr>th.danger,.runestone-sphinx .table>tfoot>tr.danger>td,.runestone-sphinx .table>tfoot>tr.danger>th,.runestone-sphinx .table>tfoot>tr>td.danger,.runestone-sphinx .table>tfoot>tr>th.danger,.runestone-sphinx .table>thead>tr.danger>td,.runestone-sphinx .table>thead>tr.danger>th,.runestone-sphinx .table>thead>tr>td.danger,.runestone-sphinx .table>thead>tr>th.danger{background-color:#f2dede}.ptx-runestone-container .table-hover>tbody>tr.danger:hover>td,.ptx-runestone-container .table-hover>tbody>tr.danger:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.danger,.ptx-runestone-container .table-hover>tbody>tr>td.danger:hover,.ptx-runestone-container .table-hover>tbody>tr>th.danger:hover,.runestone-sphinx .table-hover>tbody>tr.danger:hover>td,.runestone-sphinx .table-hover>tbody>tr.danger:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.danger,.runestone-sphinx .table-hover>tbody>tr>td.danger:hover,.runestone-sphinx .table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.ptx-runestone-container .table-responsive,.runestone-sphinx .table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.ptx-runestone-container .table-responsive,.runestone-sphinx .table-responsive{-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;margin-bottom:15px;overflow-y:hidden;width:100%}.ptx-runestone-container .table-responsive>.table,.runestone-sphinx .table-responsive>.table{margin-bottom:0}.ptx-runestone-container .table-responsive>.table>tbody>tr>td,.ptx-runestone-container .table-responsive>.table>tbody>tr>th,.ptx-runestone-container .table-responsive>.table>tfoot>tr>td,.ptx-runestone-container .table-responsive>.table>tfoot>tr>th,.ptx-runestone-container .table-responsive>.table>thead>tr>td,.ptx-runestone-container .table-responsive>.table>thead>tr>th,.runestone-sphinx .table-responsive>.table>tbody>tr>td,.runestone-sphinx .table-responsive>.table>tbody>tr>th,.runestone-sphinx .table-responsive>.table>tfoot>tr>td,.runestone-sphinx .table-responsive>.table>tfoot>tr>th,.runestone-sphinx .table-responsive>.table>thead>tr>td,.runestone-sphinx .table-responsive>.table>thead>tr>th{white-space:nowrap}.ptx-runestone-container .table-responsive>.table-bordered,.runestone-sphinx .table-responsive>.table-bordered{border:0}.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr>td:first-child,.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr>th:first-child,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr>td:first-child,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr>th:first-child,.ptx-runestone-container .table-responsive>.table-bordered>thead>tr>td:first-child,.ptx-runestone-container .table-responsive>.table-bordered>thead>tr>th:first-child,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr>td:first-child,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr>th:first-child,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr>td:first-child,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr>th:first-child,.runestone-sphinx .table-responsive>.table-bordered>thead>tr>td:first-child,.runestone-sphinx .table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr>td:last-child,.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr>th:last-child,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr>td:last-child,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr>th:last-child,.ptx-runestone-container .table-responsive>.table-bordered>thead>tr>td:last-child,.ptx-runestone-container .table-responsive>.table-bordered>thead>tr>th:last-child,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr>td:last-child,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr>th:last-child,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr>td:last-child,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr>th:last-child,.runestone-sphinx .table-responsive>.table-bordered>thead>tr>td:last-child,.runestone-sphinx .table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr:last-child>td,.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr:last-child>th,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr:last-child>td,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr:last-child>th,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr:last-child>td,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr:last-child>th,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr:last-child>td,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.ptx-runestone-container fieldset,.runestone-sphinx fieldset{border:0;margin:0;min-width:0;padding:0}.ptx-runestone-container legend,.runestone-sphinx legend{border:0;border-bottom:1px solid #e5e5e5;color:#333;display:block;font-size:21px;line-height:inherit;margin-bottom:20px;padding:0;width:100%}.ptx-runestone-container label,.runestone-sphinx label{display:inline-block;font-weight:700;margin-bottom:5px;max-width:100%}.ptx-runestone-container input[type=search],.runestone-sphinx input[type=search]{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ptx-runestone-container input[type=checkbox],.ptx-runestone-container input[type=radio],.runestone-sphinx input[type=checkbox],.runestone-sphinx input[type=radio]{line-height:normal;margin:4px 0 0;margin-top:1px\9}.ptx-runestone-container fieldset[disabled] input[type=checkbox],.ptx-runestone-container fieldset[disabled] input[type=radio],.ptx-runestone-container input[type=checkbox].disabled,.ptx-runestone-container input[type=checkbox][disabled],.ptx-runestone-container input[type=radio].disabled,.ptx-runestone-container input[type=radio][disabled],.runestone-sphinx fieldset[disabled] input[type=checkbox],.runestone-sphinx fieldset[disabled] input[type=radio],.runestone-sphinx input[type=checkbox].disabled,.runestone-sphinx input[type=checkbox][disabled],.runestone-sphinx input[type=radio].disabled,.runestone-sphinx input[type=radio][disabled]{cursor:not-allowed}.ptx-runestone-container input[type=file],.runestone-sphinx input[type=file]{display:block}.ptx-runestone-container input[type=range],.runestone-sphinx input[type=range]{display:block;width:100%}.ptx-runestone-container select[multiple],.ptx-runestone-container select[size],.runestone-sphinx select[multiple],.runestone-sphinx select[size]{height:auto}.ptx-runestone-container input[type=checkbox]:focus,.ptx-runestone-container input[type=file]:focus,.ptx-runestone-container input[type=radio]:focus,.runestone-sphinx input[type=checkbox]:focus,.runestone-sphinx input[type=file]:focus,.runestone-sphinx input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ptx-runestone-container output,.runestone-sphinx output{color:#555;display:block;font-size:14px;line-height:1.42857143;padding-top:7px}.ptx-runestone-container .form-control,.runestone-sphinx .form-control{background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);color:#555;display:block;font-size:14px;height:34px;line-height:1.42857143;padding:6px 12px;-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;width:100%}.ptx-runestone-container .form-control:focus,.runestone-sphinx .form-control:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);outline:0}.ptx-runestone-container .form-control::-moz-placeholder,.runestone-sphinx .form-control::-moz-placeholder{color:#999;opacity:1}.ptx-runestone-container .form-control:-ms-input-placeholder,.runestone-sphinx .form-control:-ms-input-placeholder{color:#999}.ptx-runestone-container .form-control::-webkit-input-placeholder,.runestone-sphinx .form-control::-webkit-input-placeholder{color:#999}.ptx-runestone-container .form-control::-ms-expand,.runestone-sphinx .form-control::-ms-expand{background-color:transparent;border:0}.ptx-runestone-container .form-control[disabled],.ptx-runestone-container .form-control[readonly],.ptx-runestone-container fieldset[disabled] .form-control,.runestone-sphinx .form-control[disabled],.runestone-sphinx .form-control[readonly],.runestone-sphinx fieldset[disabled] .form-control{background-color:#eee;opacity:1}.ptx-runestone-container .form-control[disabled],.ptx-runestone-container fieldset[disabled] .form-control,.runestone-sphinx .form-control[disabled],.runestone-sphinx fieldset[disabled] .form-control{cursor:not-allowed}.ptx-runestone-container textarea.form-control,.runestone-sphinx textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){.ptx-runestone-container input[type=date].form-control,.ptx-runestone-container input[type=datetime-local].form-control,.ptx-runestone-container input[type=month].form-control,.ptx-runestone-container input[type=time].form-control,.runestone-sphinx input[type=date].form-control,.runestone-sphinx input[type=datetime-local].form-control,.runestone-sphinx input[type=month].form-control,.runestone-sphinx input[type=time].form-control{line-height:34px}.ptx-runestone-container .input-group-sm input[type=date],.ptx-runestone-container .input-group-sm input[type=datetime-local],.ptx-runestone-container .input-group-sm input[type=month],.ptx-runestone-container .input-group-sm input[type=time],.ptx-runestone-container input[type=date].input-sm,.ptx-runestone-container input[type=datetime-local].input-sm,.ptx-runestone-container input[type=month].input-sm,.ptx-runestone-container input[type=time].input-sm,.runestone-sphinx .input-group-sm input[type=date],.runestone-sphinx .input-group-sm input[type=datetime-local],.runestone-sphinx .input-group-sm input[type=month],.runestone-sphinx .input-group-sm input[type=time],.runestone-sphinx input[type=date].input-sm,.runestone-sphinx input[type=datetime-local].input-sm,.runestone-sphinx input[type=month].input-sm,.runestone-sphinx input[type=time].input-sm{line-height:30px}.ptx-runestone-container .input-group-lg input[type=date],.ptx-runestone-container .input-group-lg input[type=datetime-local],.ptx-runestone-container .input-group-lg input[type=month],.ptx-runestone-container .input-group-lg input[type=time],.ptx-runestone-container input[type=date].input-lg,.ptx-runestone-container input[type=datetime-local].input-lg,.ptx-runestone-container input[type=month].input-lg,.ptx-runestone-container input[type=time].input-lg,.runestone-sphinx .input-group-lg input[type=date],.runestone-sphinx .input-group-lg input[type=datetime-local],.runestone-sphinx .input-group-lg input[type=month],.runestone-sphinx .input-group-lg input[type=time],.runestone-sphinx input[type=date].input-lg,.runestone-sphinx input[type=datetime-local].input-lg,.runestone-sphinx input[type=month].input-lg,.runestone-sphinx input[type=time].input-lg{line-height:46px}}.ptx-runestone-container .form-group,.runestone-sphinx .form-group{margin-bottom:15px}.ptx-runestone-container .checkbox,.ptx-runestone-container .radio,.runestone-sphinx .checkbox,.runestone-sphinx .radio{display:block;margin-bottom:10px;margin-top:10px;position:relative}.ptx-runestone-container .checkbox.disabled label,.ptx-runestone-container .radio.disabled label,.ptx-runestone-container fieldset[disabled] .checkbox label,.ptx-runestone-container fieldset[disabled] .radio label,.runestone-sphinx .checkbox.disabled label,.runestone-sphinx .radio.disabled label,.runestone-sphinx fieldset[disabled] .checkbox label,.runestone-sphinx fieldset[disabled] .radio label{cursor:not-allowed}.ptx-runestone-container .checkbox label,.ptx-runestone-container .radio label,.runestone-sphinx .checkbox label,.runestone-sphinx .radio label{cursor:pointer;font-weight:400;margin-bottom:0;min-height:20px;padding-left:20px}.ptx-runestone-container .checkbox input[type=checkbox],.ptx-runestone-container .checkbox-inline input[type=checkbox],.ptx-runestone-container .radio input[type=radio],.ptx-runestone-container .radio-inline input[type=radio],.runestone-sphinx .checkbox input[type=checkbox],.runestone-sphinx .checkbox-inline input[type=checkbox],.runestone-sphinx .radio input[type=radio],.runestone-sphinx .radio-inline input[type=radio]{margin-left:-20px;margin-top:4px\9;position:absolute}.ptx-runestone-container .checkbox+.checkbox,.ptx-runestone-container .radio+.radio,.runestone-sphinx .checkbox+.checkbox,.runestone-sphinx .radio+.radio{margin-top:-5px}.ptx-runestone-container .checkbox-inline,.ptx-runestone-container .radio-inline,.runestone-sphinx .checkbox-inline,.runestone-sphinx .radio-inline{cursor:pointer;display:inline-block;font-weight:400;margin-bottom:0;padding-left:20px;position:relative;vertical-align:middle}.ptx-runestone-container .checkbox-inline.disabled,.ptx-runestone-container .radio-inline.disabled,.ptx-runestone-container fieldset[disabled] .checkbox-inline,.ptx-runestone-container fieldset[disabled] .radio-inline,.runestone-sphinx .checkbox-inline.disabled,.runestone-sphinx .radio-inline.disabled,.runestone-sphinx fieldset[disabled] .checkbox-inline,.runestone-sphinx fieldset[disabled] .radio-inline{cursor:not-allowed}.ptx-runestone-container .checkbox-inline+.checkbox-inline,.ptx-runestone-container .radio-inline+.radio-inline,.runestone-sphinx .checkbox-inline+.checkbox-inline,.runestone-sphinx .radio-inline+.radio-inline{margin-left:10px;margin-top:0}.ptx-runestone-container .form-control-static,.runestone-sphinx .form-control-static{margin-bottom:0;min-height:34px;padding-bottom:7px;padding-top:7px}.ptx-runestone-container .form-control-static.input-lg,.ptx-runestone-container .form-control-static.input-sm,.runestone-sphinx .form-control-static.input-lg,.runestone-sphinx .form-control-static.input-sm{padding-left:0;padding-right:0}.ptx-runestone-container .input-sm,.runestone-sphinx .input-sm{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}.ptx-runestone-container select.input-sm,.runestone-sphinx select.input-sm{height:30px;line-height:30px}.ptx-runestone-container select[multiple].input-sm,.ptx-runestone-container textarea.input-sm,.runestone-sphinx select[multiple].input-sm,.runestone-sphinx textarea.input-sm{height:auto}.ptx-runestone-container .form-group-sm .form-control,.runestone-sphinx .form-group-sm .form-control{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}.ptx-runestone-container .form-group-sm select.form-control,.runestone-sphinx .form-group-sm select.form-control{height:30px;line-height:30px}.ptx-runestone-container .form-group-sm select[multiple].form-control,.ptx-runestone-container .form-group-sm textarea.form-control,.runestone-sphinx .form-group-sm select[multiple].form-control,.runestone-sphinx .form-group-sm textarea.form-control{height:auto}.ptx-runestone-container .form-group-sm .form-control-static,.runestone-sphinx .form-group-sm .form-control-static{font-size:12px;height:30px;line-height:1.5;min-height:32px;padding:6px 10px}.ptx-runestone-container .input-lg,.runestone-sphinx .input-lg{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container select.input-lg,.runestone-sphinx select.input-lg{height:46px;line-height:46px}.ptx-runestone-container select[multiple].input-lg,.ptx-runestone-container textarea.input-lg,.runestone-sphinx select[multiple].input-lg,.runestone-sphinx textarea.input-lg{height:auto}.ptx-runestone-container .form-group-lg .form-control,.runestone-sphinx .form-group-lg .form-control{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container .form-group-lg select.form-control,.runestone-sphinx .form-group-lg select.form-control{height:46px;line-height:46px}.ptx-runestone-container .form-group-lg select[multiple].form-control,.ptx-runestone-container .form-group-lg textarea.form-control,.runestone-sphinx .form-group-lg select[multiple].form-control,.runestone-sphinx .form-group-lg textarea.form-control{height:auto}.ptx-runestone-container .form-group-lg .form-control-static,.runestone-sphinx .form-group-lg .form-control-static{font-size:18px;height:46px;line-height:1.3333333;min-height:38px;padding:11px 16px}.ptx-runestone-container .has-feedback,.runestone-sphinx .has-feedback{position:relative}.ptx-runestone-container .has-feedback .form-control,.runestone-sphinx .has-feedback .form-control{padding-right:42.5px}.ptx-runestone-container .form-control-feedback,.runestone-sphinx .form-control-feedback{display:block;height:34px;line-height:34px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:34px;z-index:2}.ptx-runestone-container .form-group-lg .form-control+.form-control-feedback,.ptx-runestone-container .input-group-lg+.form-control-feedback,.ptx-runestone-container .input-lg+.form-control-feedback,.runestone-sphinx .form-group-lg .form-control+.form-control-feedback,.runestone-sphinx .input-group-lg+.form-control-feedback,.runestone-sphinx .input-lg+.form-control-feedback{height:46px;line-height:46px;width:46px}.ptx-runestone-container .form-group-sm .form-control+.form-control-feedback,.ptx-runestone-container .input-group-sm+.form-control-feedback,.ptx-runestone-container .input-sm+.form-control-feedback,.runestone-sphinx .form-group-sm .form-control+.form-control-feedback,.runestone-sphinx .input-group-sm+.form-control-feedback,.runestone-sphinx .input-sm+.form-control-feedback{height:30px;line-height:30px;width:30px}.ptx-runestone-container .has-success .checkbox,.ptx-runestone-container .has-success .checkbox-inline,.ptx-runestone-container .has-success .control-label,.ptx-runestone-container .has-success .help-block,.ptx-runestone-container .has-success .radio,.ptx-runestone-container .has-success .radio-inline,.ptx-runestone-container .has-success.checkbox label,.ptx-runestone-container .has-success.checkbox-inline label,.ptx-runestone-container .has-success.radio label,.ptx-runestone-container .has-success.radio-inline label,.runestone-sphinx .has-success .checkbox,.runestone-sphinx .has-success .checkbox-inline,.runestone-sphinx .has-success .control-label,.runestone-sphinx .has-success .help-block,.runestone-sphinx .has-success .radio,.runestone-sphinx .has-success .radio-inline,.runestone-sphinx .has-success.checkbox label,.runestone-sphinx .has-success.checkbox-inline label,.runestone-sphinx .has-success.radio label,.runestone-sphinx .has-success.radio-inline label{color:#3c763d}.ptx-runestone-container .has-success .form-control,.runestone-sphinx .has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.ptx-runestone-container .has-success .form-control:focus,.runestone-sphinx .has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.ptx-runestone-container .has-success .input-group-addon,.runestone-sphinx .has-success .input-group-addon{background-color:#dff0d8;border-color:#3c763d;color:#3c763d}.ptx-runestone-container .has-success .form-control-feedback,.runestone-sphinx .has-success .form-control-feedback{color:#3c763d}.ptx-runestone-container .has-warning .checkbox,.ptx-runestone-container .has-warning .checkbox-inline,.ptx-runestone-container .has-warning .control-label,.ptx-runestone-container .has-warning .help-block,.ptx-runestone-container .has-warning .radio,.ptx-runestone-container .has-warning .radio-inline,.ptx-runestone-container .has-warning.checkbox label,.ptx-runestone-container .has-warning.checkbox-inline label,.ptx-runestone-container .has-warning.radio label,.ptx-runestone-container .has-warning.radio-inline label,.runestone-sphinx .has-warning .checkbox,.runestone-sphinx .has-warning .checkbox-inline,.runestone-sphinx .has-warning .control-label,.runestone-sphinx .has-warning .help-block,.runestone-sphinx .has-warning .radio,.runestone-sphinx .has-warning .radio-inline,.runestone-sphinx .has-warning.checkbox label,.runestone-sphinx .has-warning.checkbox-inline label,.runestone-sphinx .has-warning.radio label,.runestone-sphinx .has-warning.radio-inline label{color:#8a6d3b}.ptx-runestone-container .has-warning .form-control,.runestone-sphinx .has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.ptx-runestone-container .has-warning .form-control:focus,.runestone-sphinx .has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.ptx-runestone-container .has-warning .input-group-addon,.runestone-sphinx .has-warning .input-group-addon{background-color:#fcf8e3;border-color:#8a6d3b;color:#8a6d3b}.ptx-runestone-container .has-warning .form-control-feedback,.runestone-sphinx .has-warning .form-control-feedback{color:#8a6d3b}.ptx-runestone-container .has-error .checkbox,.ptx-runestone-container .has-error .checkbox-inline,.ptx-runestone-container .has-error .control-label,.ptx-runestone-container .has-error .help-block,.ptx-runestone-container .has-error .radio,.ptx-runestone-container .has-error .radio-inline,.ptx-runestone-container .has-error.checkbox label,.ptx-runestone-container .has-error.checkbox-inline label,.ptx-runestone-container .has-error.radio label,.ptx-runestone-container .has-error.radio-inline label,.runestone-sphinx .has-error .checkbox,.runestone-sphinx .has-error .checkbox-inline,.runestone-sphinx .has-error .control-label,.runestone-sphinx .has-error .help-block,.runestone-sphinx .has-error .radio,.runestone-sphinx .has-error .radio-inline,.runestone-sphinx .has-error.checkbox label,.runestone-sphinx .has-error.checkbox-inline label,.runestone-sphinx .has-error.radio label,.runestone-sphinx .has-error.radio-inline label{color:#a94442}.ptx-runestone-container .has-error .form-control,.runestone-sphinx .has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.ptx-runestone-container .has-error .form-control:focus,.runestone-sphinx .has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.ptx-runestone-container .has-error .input-group-addon,.runestone-sphinx .has-error .input-group-addon{background-color:#f2dede;border-color:#a94442;color:#a94442}.ptx-runestone-container .has-error .form-control-feedback,.runestone-sphinx .has-error .form-control-feedback{color:#a94442}.ptx-runestone-container .has-feedback label~.form-control-feedback,.runestone-sphinx .has-feedback label~.form-control-feedback{top:25px}.ptx-runestone-container .has-feedback label.sr-only~.form-control-feedback,.runestone-sphinx .has-feedback label.sr-only~.form-control-feedback{top:0}.ptx-runestone-container .help-block,.runestone-sphinx .help-block{color:#737373;display:block;margin-bottom:10px;margin-top:5px}@media (min-width:768px){.ptx-runestone-container .form-inline .form-group,.runestone-sphinx .form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.ptx-runestone-container .form-inline .form-control,.runestone-sphinx .form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.ptx-runestone-container .form-inline .form-control-static,.runestone-sphinx .form-inline .form-control-static{display:inline-block}.ptx-runestone-container .form-inline .input-group,.runestone-sphinx .form-inline .input-group{display:inline-table;vertical-align:middle}.ptx-runestone-container .form-inline .input-group .form-control,.ptx-runestone-container .form-inline .input-group .input-group-addon,.ptx-runestone-container .form-inline .input-group .input-group-btn,.runestone-sphinx .form-inline .input-group .form-control,.runestone-sphinx .form-inline .input-group .input-group-addon,.runestone-sphinx .form-inline .input-group .input-group-btn{width:auto}.ptx-runestone-container .form-inline .input-group>.form-control,.runestone-sphinx .form-inline .input-group>.form-control{width:100%}.ptx-runestone-container .form-inline .control-label,.runestone-sphinx .form-inline .control-label{margin-bottom:0;vertical-align:middle}.ptx-runestone-container .form-inline .checkbox,.ptx-runestone-container .form-inline .radio,.runestone-sphinx .form-inline .checkbox,.runestone-sphinx .form-inline .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.ptx-runestone-container .form-inline .checkbox label,.ptx-runestone-container .form-inline .radio label,.runestone-sphinx .form-inline .checkbox label,.runestone-sphinx .form-inline .radio label{padding-left:0}.ptx-runestone-container .form-inline .checkbox input[type=checkbox],.ptx-runestone-container .form-inline .radio input[type=radio],.runestone-sphinx .form-inline .checkbox input[type=checkbox],.runestone-sphinx .form-inline .radio input[type=radio]{margin-left:0;position:relative}.ptx-runestone-container .form-inline .has-feedback .form-control-feedback,.runestone-sphinx .form-inline .has-feedback .form-control-feedback{top:0}}.ptx-runestone-container .form-horizontal .checkbox,.ptx-runestone-container .form-horizontal .checkbox-inline,.ptx-runestone-container .form-horizontal .radio,.ptx-runestone-container .form-horizontal .radio-inline,.runestone-sphinx .form-horizontal .checkbox,.runestone-sphinx .form-horizontal .checkbox-inline,.runestone-sphinx .form-horizontal .radio,.runestone-sphinx .form-horizontal .radio-inline{margin-bottom:0;margin-top:0;padding-top:7px}.ptx-runestone-container .form-horizontal .checkbox,.ptx-runestone-container .form-horizontal .radio,.runestone-sphinx .form-horizontal .checkbox,.runestone-sphinx .form-horizontal .radio{min-height:27px}.ptx-runestone-container .form-horizontal .form-group,.runestone-sphinx .form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.ptx-runestone-container .form-horizontal .control-label,.runestone-sphinx .form-horizontal .control-label{margin-bottom:0;padding-top:7px;text-align:right}}.ptx-runestone-container .form-horizontal .has-feedback .form-control-feedback,.runestone-sphinx .form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.ptx-runestone-container .form-horizontal .form-group-lg .control-label,.runestone-sphinx .form-horizontal .form-group-lg .control-label{font-size:18px;padding-top:11px}.ptx-runestone-container .form-horizontal .form-group-sm .control-label,.runestone-sphinx .form-horizontal .form-group-sm .control-label{font-size:12px;padding-top:6px}}.ptx-runestone-container .btn,.runestone-sphinx .btn{background-image:none;border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;font-weight:400;line-height:1.42857143;margin-bottom:0;padding:6px 12px;text-align:center;-ms-touch-action:manipulation;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.ptx-runestone-container .btn.active.focus,.ptx-runestone-container .btn.active:focus,.ptx-runestone-container .btn.focus,.ptx-runestone-container .btn:active.focus,.ptx-runestone-container .btn:active:focus,.ptx-runestone-container .btn:focus,.runestone-sphinx .btn.active.focus,.runestone-sphinx .btn.active:focus,.runestone-sphinx .btn.focus,.runestone-sphinx .btn:active.focus,.runestone-sphinx .btn:active:focus,.runestone-sphinx .btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ptx-runestone-container .btn.focus,.ptx-runestone-container .btn:focus,.ptx-runestone-container .btn:hover,.runestone-sphinx .btn.focus,.runestone-sphinx .btn:focus,.runestone-sphinx .btn:hover{color:#333;text-decoration:none}.ptx-runestone-container .btn.active,.ptx-runestone-container .btn:active,.runestone-sphinx .btn.active,.runestone-sphinx .btn:active{background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125);outline:0}.ptx-runestone-container .btn.disabled,.ptx-runestone-container .btn[disabled],.ptx-runestone-container fieldset[disabled] .btn,.runestone-sphinx .btn.disabled,.runestone-sphinx .btn[disabled],.runestone-sphinx fieldset[disabled] .btn{-webkit-box-shadow:none;box-shadow:none;cursor:not-allowed;filter:alpha(opacity=65);opacity:.65}.ptx-runestone-container a.btn.disabled,.ptx-runestone-container fieldset[disabled] a.btn,.runestone-sphinx a.btn.disabled,.runestone-sphinx fieldset[disabled] a.btn{pointer-events:none}.ptx-runestone-container .btn-default,.runestone-sphinx .btn-default{background-color:#fff;border-color:#ccc;color:#333}.ptx-runestone-container .btn-default.focus,.ptx-runestone-container .btn-default:focus,.runestone-sphinx .btn-default.focus,.runestone-sphinx .btn-default:focus{background-color:#e6e6e6;border-color:#8c8c8c;color:#333}.ptx-runestone-container .btn-default:hover,.runestone-sphinx .btn-default:hover{background-color:#e6e6e6;border-color:#adadad;color:#333}.ptx-runestone-container .btn-default.active,.ptx-runestone-container .btn-default:active,.ptx-runestone-container .open>.dropdown-toggle.btn-default,.runestone-sphinx .btn-default.active,.runestone-sphinx .btn-default:active,.runestone-sphinx .open>.dropdown-toggle.btn-default{background-color:#e6e6e6;background-image:none;border-color:#adadad;color:#333}.ptx-runestone-container .btn-default.active.focus,.ptx-runestone-container .btn-default.active:focus,.ptx-runestone-container .btn-default.active:hover,.ptx-runestone-container .btn-default:active.focus,.ptx-runestone-container .btn-default:active:focus,.ptx-runestone-container .btn-default:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-default.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-default:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-default:hover,.runestone-sphinx .btn-default.active.focus,.runestone-sphinx .btn-default.active:focus,.runestone-sphinx .btn-default.active:hover,.runestone-sphinx .btn-default:active.focus,.runestone-sphinx .btn-default:active:focus,.runestone-sphinx .btn-default:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-default.focus,.runestone-sphinx .open>.dropdown-toggle.btn-default:focus,.runestone-sphinx .open>.dropdown-toggle.btn-default:hover{background-color:#d4d4d4;border-color:#8c8c8c;color:#333}.ptx-runestone-container .btn-default.disabled.focus,.ptx-runestone-container .btn-default.disabled:focus,.ptx-runestone-container .btn-default.disabled:hover,.ptx-runestone-container .btn-default[disabled].focus,.ptx-runestone-container .btn-default[disabled]:focus,.ptx-runestone-container .btn-default[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-default.focus,.ptx-runestone-container fieldset[disabled] .btn-default:focus,.ptx-runestone-container fieldset[disabled] .btn-default:hover,.runestone-sphinx .btn-default.disabled.focus,.runestone-sphinx .btn-default.disabled:focus,.runestone-sphinx .btn-default.disabled:hover,.runestone-sphinx .btn-default[disabled].focus,.runestone-sphinx .btn-default[disabled]:focus,.runestone-sphinx .btn-default[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-default.focus,.runestone-sphinx fieldset[disabled] .btn-default:focus,.runestone-sphinx fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.ptx-runestone-container .btn-default .badge,.runestone-sphinx .btn-default .badge{background-color:#333;color:#fff}.ptx-runestone-container .btn-primary,.runestone-sphinx .btn-primary{background-color:#337ab7;border-color:#2e6da4;color:#fff}.ptx-runestone-container .btn-primary.focus,.ptx-runestone-container .btn-primary:focus,.runestone-sphinx .btn-primary.focus,.runestone-sphinx .btn-primary:focus{background-color:#286090;border-color:#122b40;color:#fff}.ptx-runestone-container .btn-primary:hover,.runestone-sphinx .btn-primary:hover{background-color:#286090;border-color:#204d74;color:#fff}.ptx-runestone-container .btn-primary.active,.ptx-runestone-container .btn-primary:active,.ptx-runestone-container .open>.dropdown-toggle.btn-primary,.runestone-sphinx .btn-primary.active,.runestone-sphinx .btn-primary:active,.runestone-sphinx .open>.dropdown-toggle.btn-primary{background-color:#286090;background-image:none;border-color:#204d74;color:#fff}.ptx-runestone-container .btn-primary.active.focus,.ptx-runestone-container .btn-primary.active:focus,.ptx-runestone-container .btn-primary.active:hover,.ptx-runestone-container .btn-primary:active.focus,.ptx-runestone-container .btn-primary:active:focus,.ptx-runestone-container .btn-primary:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-primary.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-primary:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-primary:hover,.runestone-sphinx .btn-primary.active.focus,.runestone-sphinx .btn-primary.active:focus,.runestone-sphinx .btn-primary.active:hover,.runestone-sphinx .btn-primary:active.focus,.runestone-sphinx .btn-primary:active:focus,.runestone-sphinx .btn-primary:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-primary.focus,.runestone-sphinx .open>.dropdown-toggle.btn-primary:focus,.runestone-sphinx .open>.dropdown-toggle.btn-primary:hover{background-color:#204d74;border-color:#122b40;color:#fff}.ptx-runestone-container .btn-primary.disabled.focus,.ptx-runestone-container .btn-primary.disabled:focus,.ptx-runestone-container .btn-primary.disabled:hover,.ptx-runestone-container .btn-primary[disabled].focus,.ptx-runestone-container .btn-primary[disabled]:focus,.ptx-runestone-container .btn-primary[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-primary.focus,.ptx-runestone-container fieldset[disabled] .btn-primary:focus,.ptx-runestone-container fieldset[disabled] .btn-primary:hover,.runestone-sphinx .btn-primary.disabled.focus,.runestone-sphinx .btn-primary.disabled:focus,.runestone-sphinx .btn-primary.disabled:hover,.runestone-sphinx .btn-primary[disabled].focus,.runestone-sphinx .btn-primary[disabled]:focus,.runestone-sphinx .btn-primary[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-primary.focus,.runestone-sphinx fieldset[disabled] .btn-primary:focus,.runestone-sphinx fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.ptx-runestone-container .btn-primary .badge,.runestone-sphinx .btn-primary .badge{background-color:#fff;color:#337ab7}.ptx-runestone-container .btn-success,.runestone-sphinx .btn-success{background-color:#5cb85c;border-color:#4cae4c;color:#fff}.ptx-runestone-container .btn-success.focus,.ptx-runestone-container .btn-success:focus,.runestone-sphinx .btn-success.focus,.runestone-sphinx .btn-success:focus{background-color:#449d44;border-color:#255625;color:#fff}.ptx-runestone-container .btn-success:hover,.runestone-sphinx .btn-success:hover{background-color:#449d44;border-color:#398439;color:#fff}.ptx-runestone-container .btn-success.active,.ptx-runestone-container .btn-success:active,.ptx-runestone-container .open>.dropdown-toggle.btn-success,.runestone-sphinx .btn-success.active,.runestone-sphinx .btn-success:active,.runestone-sphinx .open>.dropdown-toggle.btn-success{background-color:#449d44;background-image:none;border-color:#398439;color:#fff}.ptx-runestone-container .btn-success.active.focus,.ptx-runestone-container .btn-success.active:focus,.ptx-runestone-container .btn-success.active:hover,.ptx-runestone-container .btn-success:active.focus,.ptx-runestone-container .btn-success:active:focus,.ptx-runestone-container .btn-success:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-success.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-success:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-success:hover,.runestone-sphinx .btn-success.active.focus,.runestone-sphinx .btn-success.active:focus,.runestone-sphinx .btn-success.active:hover,.runestone-sphinx .btn-success:active.focus,.runestone-sphinx .btn-success:active:focus,.runestone-sphinx .btn-success:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-success.focus,.runestone-sphinx .open>.dropdown-toggle.btn-success:focus,.runestone-sphinx .open>.dropdown-toggle.btn-success:hover{background-color:#398439;border-color:#255625;color:#fff}.ptx-runestone-container .btn-success.disabled.focus,.ptx-runestone-container .btn-success.disabled:focus,.ptx-runestone-container .btn-success.disabled:hover,.ptx-runestone-container .btn-success[disabled].focus,.ptx-runestone-container .btn-success[disabled]:focus,.ptx-runestone-container .btn-success[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-success.focus,.ptx-runestone-container fieldset[disabled] .btn-success:focus,.ptx-runestone-container fieldset[disabled] .btn-success:hover,.runestone-sphinx .btn-success.disabled.focus,.runestone-sphinx .btn-success.disabled:focus,.runestone-sphinx .btn-success.disabled:hover,.runestone-sphinx .btn-success[disabled].focus,.runestone-sphinx .btn-success[disabled]:focus,.runestone-sphinx .btn-success[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-success.focus,.runestone-sphinx fieldset[disabled] .btn-success:focus,.runestone-sphinx fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.ptx-runestone-container .btn-success .badge,.runestone-sphinx .btn-success .badge{background-color:#fff;color:#5cb85c}.ptx-runestone-container .btn-info,.runestone-sphinx .btn-info{background-color:#5bc0de;border-color:#46b8da;color:#fff}.ptx-runestone-container .btn-info.focus,.ptx-runestone-container .btn-info:focus,.runestone-sphinx .btn-info.focus,.runestone-sphinx .btn-info:focus{background-color:#31b0d5;border-color:#1b6d85;color:#fff}.ptx-runestone-container .btn-info:hover,.runestone-sphinx .btn-info:hover{background-color:#31b0d5;border-color:#269abc;color:#fff}.ptx-runestone-container .btn-info.active,.ptx-runestone-container .btn-info:active,.ptx-runestone-container .open>.dropdown-toggle.btn-info,.runestone-sphinx .btn-info.active,.runestone-sphinx .btn-info:active,.runestone-sphinx .open>.dropdown-toggle.btn-info{background-color:#31b0d5;background-image:none;border-color:#269abc;color:#fff}.ptx-runestone-container .btn-info.active.focus,.ptx-runestone-container .btn-info.active:focus,.ptx-runestone-container .btn-info.active:hover,.ptx-runestone-container .btn-info:active.focus,.ptx-runestone-container .btn-info:active:focus,.ptx-runestone-container .btn-info:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-info.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-info:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-info:hover,.runestone-sphinx .btn-info.active.focus,.runestone-sphinx .btn-info.active:focus,.runestone-sphinx .btn-info.active:hover,.runestone-sphinx .btn-info:active.focus,.runestone-sphinx .btn-info:active:focus,.runestone-sphinx .btn-info:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-info.focus,.runestone-sphinx .open>.dropdown-toggle.btn-info:focus,.runestone-sphinx .open>.dropdown-toggle.btn-info:hover{background-color:#269abc;border-color:#1b6d85;color:#fff}.ptx-runestone-container .btn-info.disabled.focus,.ptx-runestone-container .btn-info.disabled:focus,.ptx-runestone-container .btn-info.disabled:hover,.ptx-runestone-container .btn-info[disabled].focus,.ptx-runestone-container .btn-info[disabled]:focus,.ptx-runestone-container .btn-info[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-info.focus,.ptx-runestone-container fieldset[disabled] .btn-info:focus,.ptx-runestone-container fieldset[disabled] .btn-info:hover,.runestone-sphinx .btn-info.disabled.focus,.runestone-sphinx .btn-info.disabled:focus,.runestone-sphinx .btn-info.disabled:hover,.runestone-sphinx .btn-info[disabled].focus,.runestone-sphinx .btn-info[disabled]:focus,.runestone-sphinx .btn-info[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-info.focus,.runestone-sphinx fieldset[disabled] .btn-info:focus,.runestone-sphinx fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.ptx-runestone-container .btn-info .badge,.runestone-sphinx .btn-info .badge{background-color:#fff;color:#5bc0de}.ptx-runestone-container .btn-warning,.runestone-sphinx .btn-warning{background-color:#f0ad4e;border-color:#eea236;color:#fff}.ptx-runestone-container .btn-warning.focus,.ptx-runestone-container .btn-warning:focus,.runestone-sphinx .btn-warning.focus,.runestone-sphinx .btn-warning:focus{background-color:#ec971f;border-color:#985f0d;color:#fff}.ptx-runestone-container .btn-warning:hover,.runestone-sphinx .btn-warning:hover{background-color:#ec971f;border-color:#d58512;color:#fff}.ptx-runestone-container .btn-warning.active,.ptx-runestone-container .btn-warning:active,.ptx-runestone-container .open>.dropdown-toggle.btn-warning,.runestone-sphinx .btn-warning.active,.runestone-sphinx .btn-warning:active,.runestone-sphinx .open>.dropdown-toggle.btn-warning{background-color:#ec971f;background-image:none;border-color:#d58512;color:#fff}.ptx-runestone-container .btn-warning.active.focus,.ptx-runestone-container .btn-warning.active:focus,.ptx-runestone-container .btn-warning.active:hover,.ptx-runestone-container .btn-warning:active.focus,.ptx-runestone-container .btn-warning:active:focus,.ptx-runestone-container .btn-warning:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-warning.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-warning:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-warning:hover,.runestone-sphinx .btn-warning.active.focus,.runestone-sphinx .btn-warning.active:focus,.runestone-sphinx .btn-warning.active:hover,.runestone-sphinx .btn-warning:active.focus,.runestone-sphinx .btn-warning:active:focus,.runestone-sphinx .btn-warning:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-warning.focus,.runestone-sphinx .open>.dropdown-toggle.btn-warning:focus,.runestone-sphinx .open>.dropdown-toggle.btn-warning:hover{background-color:#d58512;border-color:#985f0d;color:#fff}.ptx-runestone-container .btn-warning.disabled.focus,.ptx-runestone-container .btn-warning.disabled:focus,.ptx-runestone-container .btn-warning.disabled:hover,.ptx-runestone-container .btn-warning[disabled].focus,.ptx-runestone-container .btn-warning[disabled]:focus,.ptx-runestone-container .btn-warning[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-warning.focus,.ptx-runestone-container fieldset[disabled] .btn-warning:focus,.ptx-runestone-container fieldset[disabled] .btn-warning:hover,.runestone-sphinx .btn-warning.disabled.focus,.runestone-sphinx .btn-warning.disabled:focus,.runestone-sphinx .btn-warning.disabled:hover,.runestone-sphinx .btn-warning[disabled].focus,.runestone-sphinx .btn-warning[disabled]:focus,.runestone-sphinx .btn-warning[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-warning.focus,.runestone-sphinx fieldset[disabled] .btn-warning:focus,.runestone-sphinx fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.ptx-runestone-container .btn-warning .badge,.runestone-sphinx .btn-warning .badge{background-color:#fff;color:#f0ad4e}.ptx-runestone-container .btn-danger,.runestone-sphinx .btn-danger{background-color:#d9534f;border-color:#d43f3a;color:#fff}.ptx-runestone-container .btn-danger.focus,.ptx-runestone-container .btn-danger:focus,.runestone-sphinx .btn-danger.focus,.runestone-sphinx .btn-danger:focus{background-color:#c9302c;border-color:#761c19;color:#fff}.ptx-runestone-container .btn-danger:hover,.runestone-sphinx .btn-danger:hover{background-color:#c9302c;border-color:#ac2925;color:#fff}.ptx-runestone-container .btn-danger.active,.ptx-runestone-container .btn-danger:active,.ptx-runestone-container .open>.dropdown-toggle.btn-danger,.runestone-sphinx .btn-danger.active,.runestone-sphinx .btn-danger:active,.runestone-sphinx .open>.dropdown-toggle.btn-danger{background-color:#c9302c;background-image:none;border-color:#ac2925;color:#fff}.ptx-runestone-container .btn-danger.active.focus,.ptx-runestone-container .btn-danger.active:focus,.ptx-runestone-container .btn-danger.active:hover,.ptx-runestone-container .btn-danger:active.focus,.ptx-runestone-container .btn-danger:active:focus,.ptx-runestone-container .btn-danger:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-danger.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-danger:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-danger:hover,.runestone-sphinx .btn-danger.active.focus,.runestone-sphinx .btn-danger.active:focus,.runestone-sphinx .btn-danger.active:hover,.runestone-sphinx .btn-danger:active.focus,.runestone-sphinx .btn-danger:active:focus,.runestone-sphinx .btn-danger:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-danger.focus,.runestone-sphinx .open>.dropdown-toggle.btn-danger:focus,.runestone-sphinx .open>.dropdown-toggle.btn-danger:hover{background-color:#ac2925;border-color:#761c19;color:#fff}.ptx-runestone-container .btn-danger.disabled.focus,.ptx-runestone-container .btn-danger.disabled:focus,.ptx-runestone-container .btn-danger.disabled:hover,.ptx-runestone-container .btn-danger[disabled].focus,.ptx-runestone-container .btn-danger[disabled]:focus,.ptx-runestone-container .btn-danger[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-danger.focus,.ptx-runestone-container fieldset[disabled] .btn-danger:focus,.ptx-runestone-container fieldset[disabled] .btn-danger:hover,.runestone-sphinx .btn-danger.disabled.focus,.runestone-sphinx .btn-danger.disabled:focus,.runestone-sphinx .btn-danger.disabled:hover,.runestone-sphinx .btn-danger[disabled].focus,.runestone-sphinx .btn-danger[disabled]:focus,.runestone-sphinx .btn-danger[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-danger.focus,.runestone-sphinx fieldset[disabled] .btn-danger:focus,.runestone-sphinx fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.ptx-runestone-container .btn-danger .badge,.runestone-sphinx .btn-danger .badge{background-color:#fff;color:#d9534f}.ptx-runestone-container .btn-link,.runestone-sphinx .btn-link{border-radius:0;color:#337ab7;font-weight:400}.ptx-runestone-container .btn-link,.ptx-runestone-container .btn-link.active,.ptx-runestone-container .btn-link:active,.ptx-runestone-container .btn-link[disabled],.ptx-runestone-container fieldset[disabled] .btn-link,.runestone-sphinx .btn-link,.runestone-sphinx .btn-link.active,.runestone-sphinx .btn-link:active,.runestone-sphinx .btn-link[disabled],.runestone-sphinx fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.ptx-runestone-container .btn-link,.ptx-runestone-container .btn-link:active,.ptx-runestone-container .btn-link:focus,.ptx-runestone-container .btn-link:hover,.runestone-sphinx .btn-link,.runestone-sphinx .btn-link:active,.runestone-sphinx .btn-link:focus,.runestone-sphinx .btn-link:hover{border-color:transparent}.ptx-runestone-container .btn-link:focus,.ptx-runestone-container .btn-link:hover,.runestone-sphinx .btn-link:focus,.runestone-sphinx .btn-link:hover{background-color:transparent;color:#23527c;text-decoration:underline}.ptx-runestone-container .btn-link[disabled]:focus,.ptx-runestone-container .btn-link[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-link:focus,.ptx-runestone-container fieldset[disabled] .btn-link:hover,.runestone-sphinx .btn-link[disabled]:focus,.runestone-sphinx .btn-link[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-link:focus,.runestone-sphinx fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.ptx-runestone-container .btn-group-lg>.btn,.ptx-runestone-container .btn-lg,.runestone-sphinx .btn-group-lg>.btn,.runestone-sphinx .btn-lg{border-radius:6px;font-size:18px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container .btn-group-sm>.btn,.ptx-runestone-container .btn-sm,.runestone-sphinx .btn-group-sm>.btn,.runestone-sphinx .btn-sm{border-radius:3px;font-size:12px;line-height:1.5;padding:5px 10px}.ptx-runestone-container .btn-group-xs>.btn,.ptx-runestone-container .btn-xs,.runestone-sphinx .btn-group-xs>.btn,.runestone-sphinx .btn-xs{border-radius:3px;font-size:12px;line-height:1.5;padding:1px 5px}.ptx-runestone-container .btn-block,.runestone-sphinx .btn-block{display:block;width:100%}.ptx-runestone-container .btn-block+.btn-block,.runestone-sphinx .btn-block+.btn-block{margin-top:5px}.ptx-runestone-container input[type=button].btn-block,.ptx-runestone-container input[type=reset].btn-block,.ptx-runestone-container input[type=submit].btn-block,.runestone-sphinx input[type=button].btn-block,.runestone-sphinx input[type=reset].btn-block,.runestone-sphinx input[type=submit].btn-block{width:100%}.ptx-runestone-container .fade,.runestone-sphinx .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.ptx-runestone-container .fade.in,.runestone-sphinx .fade.in{opacity:1}.ptx-runestone-container .collapse,.runestone-sphinx .collapse{display:none}.ptx-runestone-container .collapse.in,.runestone-sphinx .collapse.in{display:block}.ptx-runestone-container tr.collapse.in,.runestone-sphinx tr.collapse.in{display:table-row}.ptx-runestone-container tbody.collapse.in,.runestone-sphinx tbody.collapse.in{display:table-row-group}.ptx-runestone-container .collapsing,.runestone-sphinx .collapsing{height:0;overflow:hidden;position:relative;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.ptx-runestone-container .caret,.runestone-sphinx .caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:2px;vertical-align:middle;width:0}.ptx-runestone-container .dropdown,.ptx-runestone-container .dropup,.runestone-sphinx .dropdown,.runestone-sphinx .dropup{position:relative}.ptx-runestone-container .dropdown-toggle:focus,.runestone-sphinx .dropdown-toggle:focus{outline:0}.ptx-runestone-container .dropdown-menu,.runestone-sphinx .dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);display:none;float:left;font-size:14px;left:0;list-style:none;margin:2px 0 0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.ptx-runestone-container .dropdown-menu.pull-right,.runestone-sphinx .dropdown-menu.pull-right{left:auto;right:0}.ptx-runestone-container .dropdown-menu .divider,.runestone-sphinx .dropdown-menu .divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.ptx-runestone-container .dropdown-menu>li>a,.runestone-sphinx .dropdown-menu>li>a{clear:both;color:#333;display:block;font-weight:400;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.ptx-runestone-container .dropdown-menu>li>a:focus,.ptx-runestone-container .dropdown-menu>li>a:hover,.runestone-sphinx .dropdown-menu>li>a:focus,.runestone-sphinx .dropdown-menu>li>a:hover{background-color:#f5f5f5;color:#262626;text-decoration:none}.ptx-runestone-container .dropdown-menu>.active>a,.ptx-runestone-container .dropdown-menu>.active>a:focus,.ptx-runestone-container .dropdown-menu>.active>a:hover,.runestone-sphinx .dropdown-menu>.active>a,.runestone-sphinx .dropdown-menu>.active>a:focus,.runestone-sphinx .dropdown-menu>.active>a:hover{background-color:#337ab7;color:#fff;outline:0;text-decoration:none}.ptx-runestone-container .dropdown-menu>.disabled>a,.ptx-runestone-container .dropdown-menu>.disabled>a:focus,.ptx-runestone-container .dropdown-menu>.disabled>a:hover,.runestone-sphinx .dropdown-menu>.disabled>a,.runestone-sphinx .dropdown-menu>.disabled>a:focus,.runestone-sphinx .dropdown-menu>.disabled>a:hover{color:#777}.ptx-runestone-container .dropdown-menu>.disabled>a:focus,.ptx-runestone-container .dropdown-menu>.disabled>a:hover,.runestone-sphinx .dropdown-menu>.disabled>a:focus,.runestone-sphinx .dropdown-menu>.disabled>a:hover{background-color:transparent;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);text-decoration:none}.ptx-runestone-container .open>.dropdown-menu,.runestone-sphinx .open>.dropdown-menu{display:block}.ptx-runestone-container .open>a,.runestone-sphinx .open>a{outline:0}.ptx-runestone-container .dropdown-menu-right,.runestone-sphinx .dropdown-menu-right{left:auto;right:0}.ptx-runestone-container .dropdown-menu-left,.runestone-sphinx .dropdown-menu-left{left:0;right:auto}.ptx-runestone-container .dropdown-header,.runestone-sphinx .dropdown-header{color:#777;display:block;font-size:12px;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.ptx-runestone-container .dropdown-backdrop,.runestone-sphinx .dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.ptx-runestone-container .pull-right>.dropdown-menu,.runestone-sphinx .pull-right>.dropdown-menu{left:auto;right:0}.ptx-runestone-container .dropup .caret,.ptx-runestone-container .navbar-fixed-bottom .dropdown .caret,.runestone-sphinx .dropup .caret,.runestone-sphinx .navbar-fixed-bottom .dropdown .caret{border-bottom:4px dashed;border-bottom:4px solid\9;border-top:0;content:""}.ptx-runestone-container .dropup .dropdown-menu,.ptx-runestone-container .navbar-fixed-bottom .dropdown .dropdown-menu,.runestone-sphinx .dropup .dropdown-menu,.runestone-sphinx .navbar-fixed-bottom .dropdown .dropdown-menu{bottom:100%;margin-bottom:2px;top:auto}@media (min-width:768px){.ptx-runestone-container .navbar-right .dropdown-menu,.runestone-sphinx .navbar-right .dropdown-menu{left:auto;right:0}.ptx-runestone-container .navbar-right .dropdown-menu-left,.runestone-sphinx .navbar-right .dropdown-menu-left{left:0;right:auto}}.ptx-runestone-container .btn-group,.ptx-runestone-container .btn-group-vertical,.runestone-sphinx .btn-group,.runestone-sphinx .btn-group-vertical{display:inline-block;position:relative;vertical-align:middle}.ptx-runestone-container .btn-group-vertical>.btn,.ptx-runestone-container .btn-group>.btn,.runestone-sphinx .btn-group-vertical>.btn,.runestone-sphinx .btn-group>.btn{float:left;position:relative}.ptx-runestone-container .btn-group-vertical>.btn.active,.ptx-runestone-container .btn-group-vertical>.btn:active,.ptx-runestone-container .btn-group-vertical>.btn:focus,.ptx-runestone-container .btn-group-vertical>.btn:hover,.ptx-runestone-container .btn-group>.btn.active,.ptx-runestone-container .btn-group>.btn:active,.ptx-runestone-container .btn-group>.btn:focus,.ptx-runestone-container .btn-group>.btn:hover,.runestone-sphinx .btn-group-vertical>.btn.active,.runestone-sphinx .btn-group-vertical>.btn:active,.runestone-sphinx .btn-group-vertical>.btn:focus,.runestone-sphinx .btn-group-vertical>.btn:hover,.runestone-sphinx .btn-group>.btn.active,.runestone-sphinx .btn-group>.btn:active,.runestone-sphinx .btn-group>.btn:focus,.runestone-sphinx .btn-group>.btn:hover{z-index:2}.ptx-runestone-container .btn-group .btn+.btn,.ptx-runestone-container .btn-group .btn+.btn-group,.ptx-runestone-container .btn-group .btn-group+.btn,.ptx-runestone-container .btn-group .btn-group+.btn-group,.runestone-sphinx .btn-group .btn+.btn,.runestone-sphinx .btn-group .btn+.btn-group,.runestone-sphinx .btn-group .btn-group+.btn,.runestone-sphinx .btn-group .btn-group+.btn-group{margin-left:-1px}.ptx-runestone-container .btn-toolbar,.runestone-sphinx .btn-toolbar{margin-left:-5px}.ptx-runestone-container .btn-toolbar .btn,.ptx-runestone-container .btn-toolbar .btn-group,.ptx-runestone-container .btn-toolbar .input-group,.runestone-sphinx .btn-toolbar .btn,.runestone-sphinx .btn-toolbar .btn-group,.runestone-sphinx .btn-toolbar .input-group{float:left}.ptx-runestone-container .btn-toolbar>.btn,.ptx-runestone-container .btn-toolbar>.btn-group,.ptx-runestone-container .btn-toolbar>.input-group,.runestone-sphinx .btn-toolbar>.btn,.runestone-sphinx .btn-toolbar>.btn-group,.runestone-sphinx .btn-toolbar>.input-group{margin-left:5px}.ptx-runestone-container .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle),.runestone-sphinx .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.ptx-runestone-container .btn-group>.btn:first-child,.runestone-sphinx .btn-group>.btn:first-child{margin-left:0}.ptx-runestone-container .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle),.runestone-sphinx .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.ptx-runestone-container .btn-group>.btn:last-child:not(:first-child),.ptx-runestone-container .btn-group>.dropdown-toggle:not(:first-child),.runestone-sphinx .btn-group>.btn:last-child:not(:first-child),.runestone-sphinx .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.ptx-runestone-container .btn-group>.btn-group,.runestone-sphinx .btn-group>.btn-group{float:left}.ptx-runestone-container .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.runestone-sphinx .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.ptx-runestone-container .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.ptx-runestone-container .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.runestone-sphinx .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.runestone-sphinx .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.ptx-runestone-container .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.runestone-sphinx .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.ptx-runestone-container .btn-group .dropdown-toggle:active,.ptx-runestone-container .btn-group.open .dropdown-toggle,.runestone-sphinx .btn-group .dropdown-toggle:active,.runestone-sphinx .btn-group.open .dropdown-toggle{outline:0}.ptx-runestone-container .btn-group>.btn+.dropdown-toggle,.runestone-sphinx .btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.ptx-runestone-container .btn-group>.btn-lg+.dropdown-toggle,.runestone-sphinx .btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.ptx-runestone-container .btn-group.open .dropdown-toggle,.runestone-sphinx .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.ptx-runestone-container .btn-group.open .dropdown-toggle.btn-link,.runestone-sphinx .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.ptx-runestone-container .btn .caret,.runestone-sphinx .btn .caret{margin-left:0}.ptx-runestone-container .btn-lg .caret,.runestone-sphinx .btn-lg .caret{border-width:5px 5px 0}.ptx-runestone-container .dropup .btn-lg .caret,.runestone-sphinx .dropup .btn-lg .caret{border-width:0 5px 5px}.ptx-runestone-container .btn-group-vertical>.btn,.ptx-runestone-container .btn-group-vertical>.btn-group,.ptx-runestone-container .btn-group-vertical>.btn-group>.btn,.runestone-sphinx .btn-group-vertical>.btn,.runestone-sphinx .btn-group-vertical>.btn-group,.runestone-sphinx .btn-group-vertical>.btn-group>.btn{display:block;float:none;max-width:100%;width:100%}.ptx-runestone-container .btn-group-vertical>.btn-group>.btn,.runestone-sphinx .btn-group-vertical>.btn-group>.btn{float:none}.ptx-runestone-container .btn-group-vertical>.btn+.btn,.ptx-runestone-container .btn-group-vertical>.btn+.btn-group,.ptx-runestone-container .btn-group-vertical>.btn-group+.btn,.ptx-runestone-container .btn-group-vertical>.btn-group+.btn-group,.runestone-sphinx .btn-group-vertical>.btn+.btn,.runestone-sphinx .btn-group-vertical>.btn+.btn-group,.runestone-sphinx .btn-group-vertical>.btn-group+.btn,.runestone-sphinx .btn-group-vertical>.btn-group+.btn-group{margin-left:0;margin-top:-1px}.ptx-runestone-container .btn-group-vertical>.btn:not(:first-child):not(:last-child),.runestone-sphinx .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.ptx-runestone-container .btn-group-vertical>.btn:first-child:not(:last-child),.runestone-sphinx .btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.ptx-runestone-container .btn-group-vertical>.btn:last-child:not(:first-child),.runestone-sphinx .btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:0;border-top-right-radius:0}.ptx-runestone-container .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.runestone-sphinx .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.ptx-runestone-container .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.ptx-runestone-container .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.runestone-sphinx .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.runestone-sphinx .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-left-radius:0;border-bottom-right-radius:0}.ptx-runestone-container .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child,.runestone-sphinx .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.ptx-runestone-container .btn-group-justified,.runestone-sphinx .btn-group-justified{border-collapse:separate;display:table;table-layout:fixed;width:100%}.ptx-runestone-container .btn-group-justified>.btn,.ptx-runestone-container .btn-group-justified>.btn-group,.runestone-sphinx .btn-group-justified>.btn,.runestone-sphinx .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.ptx-runestone-container .btn-group-justified>.btn-group .btn,.runestone-sphinx .btn-group-justified>.btn-group .btn{width:100%}.ptx-runestone-container .btn-group-justified>.btn-group .dropdown-menu,.runestone-sphinx .btn-group-justified>.btn-group .dropdown-menu{left:auto}.ptx-runestone-container [data-toggle=buttons]>.btn input[type=checkbox],.ptx-runestone-container [data-toggle=buttons]>.btn input[type=radio],.ptx-runestone-container [data-toggle=buttons]>.btn-group>.btn input[type=checkbox],.ptx-runestone-container [data-toggle=buttons]>.btn-group>.btn input[type=radio],.runestone-sphinx [data-toggle=buttons]>.btn input[type=checkbox],.runestone-sphinx [data-toggle=buttons]>.btn input[type=radio],.runestone-sphinx [data-toggle=buttons]>.btn-group>.btn input[type=checkbox],.runestone-sphinx [data-toggle=buttons]>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.ptx-runestone-container .input-group,.runestone-sphinx .input-group{border-collapse:separate;display:table;position:relative}.ptx-runestone-container .input-group[class*=col-],.runestone-sphinx .input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.ptx-runestone-container .input-group .form-control,.runestone-sphinx .input-group .form-control{float:left;margin-bottom:0;position:relative;width:100%;z-index:2}.ptx-runestone-container .input-group .form-control:focus,.runestone-sphinx .input-group .form-control:focus{z-index:3}.ptx-runestone-container .input-group-lg>.form-control,.ptx-runestone-container .input-group-lg>.input-group-addon,.ptx-runestone-container .input-group-lg>.input-group-btn>.btn,.runestone-sphinx .input-group-lg>.form-control,.runestone-sphinx .input-group-lg>.input-group-addon,.runestone-sphinx .input-group-lg>.input-group-btn>.btn{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container select.input-group-lg>.form-control,.ptx-runestone-container select.input-group-lg>.input-group-addon,.ptx-runestone-container select.input-group-lg>.input-group-btn>.btn,.runestone-sphinx select.input-group-lg>.form-control,.runestone-sphinx select.input-group-lg>.input-group-addon,.runestone-sphinx select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.ptx-runestone-container select[multiple].input-group-lg>.form-control,.ptx-runestone-container select[multiple].input-group-lg>.input-group-addon,.ptx-runestone-container select[multiple].input-group-lg>.input-group-btn>.btn,.ptx-runestone-container textarea.input-group-lg>.form-control,.ptx-runestone-container textarea.input-group-lg>.input-group-addon,.ptx-runestone-container textarea.input-group-lg>.input-group-btn>.btn,.runestone-sphinx select[multiple].input-group-lg>.form-control,.runestone-sphinx select[multiple].input-group-lg>.input-group-addon,.runestone-sphinx select[multiple].input-group-lg>.input-group-btn>.btn,.runestone-sphinx textarea.input-group-lg>.form-control,.runestone-sphinx textarea.input-group-lg>.input-group-addon,.runestone-sphinx textarea.input-group-lg>.input-group-btn>.btn{height:auto}.ptx-runestone-container .input-group-sm>.form-control,.ptx-runestone-container .input-group-sm>.input-group-addon,.ptx-runestone-container .input-group-sm>.input-group-btn>.btn,.runestone-sphinx .input-group-sm>.form-control,.runestone-sphinx .input-group-sm>.input-group-addon,.runestone-sphinx .input-group-sm>.input-group-btn>.btn{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}.ptx-runestone-container select.input-group-sm>.form-control,.ptx-runestone-container select.input-group-sm>.input-group-addon,.ptx-runestone-container select.input-group-sm>.input-group-btn>.btn,.runestone-sphinx select.input-group-sm>.form-control,.runestone-sphinx select.input-group-sm>.input-group-addon,.runestone-sphinx select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.ptx-runestone-container select[multiple].input-group-sm>.form-control,.ptx-runestone-container select[multiple].input-group-sm>.input-group-addon,.ptx-runestone-container select[multiple].input-group-sm>.input-group-btn>.btn,.ptx-runestone-container textarea.input-group-sm>.form-control,.ptx-runestone-container textarea.input-group-sm>.input-group-addon,.ptx-runestone-container textarea.input-group-sm>.input-group-btn>.btn,.runestone-sphinx select[multiple].input-group-sm>.form-control,.runestone-sphinx select[multiple].input-group-sm>.input-group-addon,.runestone-sphinx select[multiple].input-group-sm>.input-group-btn>.btn,.runestone-sphinx textarea.input-group-sm>.form-control,.runestone-sphinx textarea.input-group-sm>.input-group-addon,.runestone-sphinx textarea.input-group-sm>.input-group-btn>.btn{height:auto}.ptx-runestone-container .input-group .form-control,.ptx-runestone-container .input-group-addon,.ptx-runestone-container .input-group-btn,.runestone-sphinx .input-group .form-control,.runestone-sphinx .input-group-addon,.runestone-sphinx .input-group-btn{display:table-cell}.ptx-runestone-container .input-group .form-control:not(:first-child):not(:last-child),.ptx-runestone-container .input-group-addon:not(:first-child):not(:last-child),.ptx-runestone-container .input-group-btn:not(:first-child):not(:last-child),.runestone-sphinx .input-group .form-control:not(:first-child):not(:last-child),.runestone-sphinx .input-group-addon:not(:first-child):not(:last-child),.runestone-sphinx .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.ptx-runestone-container .input-group-addon,.ptx-runestone-container .input-group-btn,.runestone-sphinx .input-group-addon,.runestone-sphinx .input-group-btn{vertical-align:middle;white-space:nowrap;width:1%}.ptx-runestone-container .input-group-addon,.runestone-sphinx .input-group-addon{background-color:#eee;border:1px solid #ccc;border-radius:4px;color:#555;font-size:14px;font-weight:400;line-height:1;padding:6px 12px;text-align:center}.ptx-runestone-container .input-group-addon.input-sm,.runestone-sphinx .input-group-addon.input-sm{border-radius:3px;font-size:12px;padding:5px 10px}.ptx-runestone-container .input-group-addon.input-lg,.runestone-sphinx .input-group-addon.input-lg{border-radius:6px;font-size:18px;padding:10px 16px}.ptx-runestone-container .input-group-addon input[type=checkbox],.ptx-runestone-container .input-group-addon input[type=radio],.runestone-sphinx .input-group-addon input[type=checkbox],.runestone-sphinx .input-group-addon input[type=radio]{margin-top:0}.ptx-runestone-container .input-group .form-control:first-child,.ptx-runestone-container .input-group-addon:first-child,.ptx-runestone-container .input-group-btn:first-child>.btn,.ptx-runestone-container .input-group-btn:first-child>.btn-group>.btn,.ptx-runestone-container .input-group-btn:first-child>.dropdown-toggle,.ptx-runestone-container .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.ptx-runestone-container .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.runestone-sphinx .input-group .form-control:first-child,.runestone-sphinx .input-group-addon:first-child,.runestone-sphinx .input-group-btn:first-child>.btn,.runestone-sphinx .input-group-btn:first-child>.btn-group>.btn,.runestone-sphinx .input-group-btn:first-child>.dropdown-toggle,.runestone-sphinx .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.runestone-sphinx .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.ptx-runestone-container .input-group-addon:first-child,.runestone-sphinx .input-group-addon:first-child{border-right:0}.ptx-runestone-container .input-group .form-control:last-child,.ptx-runestone-container .input-group-addon:last-child,.ptx-runestone-container .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.ptx-runestone-container .input-group-btn:first-child>.btn:not(:first-child),.ptx-runestone-container .input-group-btn:last-child>.btn,.ptx-runestone-container .input-group-btn:last-child>.btn-group>.btn,.ptx-runestone-container .input-group-btn:last-child>.dropdown-toggle,.runestone-sphinx .input-group .form-control:last-child,.runestone-sphinx .input-group-addon:last-child,.runestone-sphinx .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.runestone-sphinx .input-group-btn:first-child>.btn:not(:first-child),.runestone-sphinx .input-group-btn:last-child>.btn,.runestone-sphinx .input-group-btn:last-child>.btn-group>.btn,.runestone-sphinx .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.ptx-runestone-container .input-group-addon:last-child,.runestone-sphinx .input-group-addon:last-child{border-left:0}.ptx-runestone-container .input-group-btn,.runestone-sphinx .input-group-btn{font-size:0;position:relative;white-space:nowrap}.ptx-runestone-container .input-group-btn>.btn,.runestone-sphinx .input-group-btn>.btn{position:relative}.ptx-runestone-container .input-group-btn>.btn+.btn,.runestone-sphinx .input-group-btn>.btn+.btn{margin-left:-1px}.ptx-runestone-container .input-group-btn>.btn:active,.ptx-runestone-container .input-group-btn>.btn:focus,.ptx-runestone-container .input-group-btn>.btn:hover,.runestone-sphinx .input-group-btn>.btn:active,.runestone-sphinx .input-group-btn>.btn:focus,.runestone-sphinx .input-group-btn>.btn:hover{z-index:2}.ptx-runestone-container .input-group-btn:first-child>.btn,.ptx-runestone-container .input-group-btn:first-child>.btn-group,.runestone-sphinx .input-group-btn:first-child>.btn,.runestone-sphinx .input-group-btn:first-child>.btn-group{margin-right:-1px}.ptx-runestone-container .input-group-btn:last-child>.btn,.ptx-runestone-container .input-group-btn:last-child>.btn-group,.runestone-sphinx .input-group-btn:last-child>.btn,.runestone-sphinx .input-group-btn:last-child>.btn-group{margin-left:-1px;z-index:2}.ptx-runestone-container .nav,.runestone-sphinx .nav{list-style:none;margin-bottom:0;padding-left:0}.ptx-runestone-container .nav>li,.runestone-sphinx .nav>li{display:block;position:relative}.ptx-runestone-container .nav>li>a,.runestone-sphinx .nav>li>a{display:block;padding:10px 15px;position:relative}.ptx-runestone-container .nav>li>a:focus,.ptx-runestone-container .nav>li>a:hover,.runestone-sphinx .nav>li>a:focus,.runestone-sphinx .nav>li>a:hover{background-color:#eee;text-decoration:none}.ptx-runestone-container .nav>li.disabled>a,.runestone-sphinx .nav>li.disabled>a{color:#777}.ptx-runestone-container .nav>li.disabled>a:focus,.ptx-runestone-container .nav>li.disabled>a:hover,.runestone-sphinx .nav>li.disabled>a:focus,.runestone-sphinx .nav>li.disabled>a:hover{background-color:transparent;color:#777;cursor:not-allowed;text-decoration:none}.ptx-runestone-container .nav .open>a,.ptx-runestone-container .nav .open>a:focus,.ptx-runestone-container .nav .open>a:hover,.runestone-sphinx .nav .open>a,.runestone-sphinx .nav .open>a:focus,.runestone-sphinx .nav .open>a:hover{background-color:#eee;border-color:#337ab7}.ptx-runestone-container .nav .nav-divider,.runestone-sphinx .nav .nav-divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.ptx-runestone-container .nav>li>a>img,.runestone-sphinx .nav>li>a>img{max-width:none}.ptx-runestone-container .nav-tabs,.runestone-sphinx .nav-tabs{border-bottom:1px solid #ddd}.ptx-runestone-container .nav-tabs>li,.runestone-sphinx .nav-tabs>li{float:left;margin-bottom:-1px}.ptx-runestone-container .nav-tabs>li>a,.runestone-sphinx .nav-tabs>li>a{border:1px solid transparent;border-radius:4px 4px 0 0;line-height:1.42857143;margin-right:2px}.ptx-runestone-container .nav-tabs>li>a:hover,.runestone-sphinx .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.ptx-runestone-container .nav-tabs>li.active>a,.ptx-runestone-container .nav-tabs>li.active>a:focus,.ptx-runestone-container .nav-tabs>li.active>a:hover,.runestone-sphinx .nav-tabs>li.active>a,.runestone-sphinx .nav-tabs>li.active>a:focus,.runestone-sphinx .nav-tabs>li.active>a:hover{background-color:#fff;border:1px solid;border-color:#ddd #ddd transparent;color:#555;cursor:default}.ptx-runestone-container .nav-tabs.nav-justified,.runestone-sphinx .nav-tabs.nav-justified{border-bottom:0;width:100%}.ptx-runestone-container .nav-tabs.nav-justified>li,.runestone-sphinx .nav-tabs.nav-justified>li{float:none}.ptx-runestone-container .nav-tabs.nav-justified>li>a,.runestone-sphinx .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.ptx-runestone-container .nav-tabs.nav-justified>.dropdown .dropdown-menu,.runestone-sphinx .nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.ptx-runestone-container .nav-tabs.nav-justified>li,.runestone-sphinx .nav-tabs.nav-justified>li{display:table-cell;width:1%}.ptx-runestone-container .nav-tabs.nav-justified>li>a,.runestone-sphinx .nav-tabs.nav-justified>li>a{margin-bottom:0}}.ptx-runestone-container .nav-tabs.nav-justified>li>a,.runestone-sphinx .nav-tabs.nav-justified>li>a{border-radius:4px;margin-right:0}.ptx-runestone-container .nav-tabs.nav-justified>.active>a,.ptx-runestone-container .nav-tabs.nav-justified>.active>a:focus,.ptx-runestone-container .nav-tabs.nav-justified>.active>a:hover,.runestone-sphinx .nav-tabs.nav-justified>.active>a,.runestone-sphinx .nav-tabs.nav-justified>.active>a:focus,.runestone-sphinx .nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.ptx-runestone-container .nav-tabs.nav-justified>li>a,.runestone-sphinx .nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.ptx-runestone-container .nav-tabs.nav-justified>.active>a,.ptx-runestone-container .nav-tabs.nav-justified>.active>a:focus,.ptx-runestone-container .nav-tabs.nav-justified>.active>a:hover,.runestone-sphinx .nav-tabs.nav-justified>.active>a,.runestone-sphinx .nav-tabs.nav-justified>.active>a:focus,.runestone-sphinx .nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.ptx-runestone-container .nav-pills>li,.runestone-sphinx .nav-pills>li{float:left}.ptx-runestone-container .nav-pills>li>a,.runestone-sphinx .nav-pills>li>a{border-radius:4px}.ptx-runestone-container .nav-pills>li+li,.runestone-sphinx .nav-pills>li+li{margin-left:2px}.ptx-runestone-container .nav-pills>li.active>a,.ptx-runestone-container .nav-pills>li.active>a:focus,.ptx-runestone-container .nav-pills>li.active>a:hover,.runestone-sphinx .nav-pills>li.active>a,.runestone-sphinx .nav-pills>li.active>a:focus,.runestone-sphinx .nav-pills>li.active>a:hover{background-color:#337ab7;color:#fff}.ptx-runestone-container .nav-stacked>li,.runestone-sphinx .nav-stacked>li{float:none}.ptx-runestone-container .nav-stacked>li+li,.runestone-sphinx .nav-stacked>li+li{margin-left:0;margin-top:2px}.ptx-runestone-container .nav-justified,.runestone-sphinx .nav-justified{width:100%}.ptx-runestone-container .nav-justified>li,.runestone-sphinx .nav-justified>li{float:none}.ptx-runestone-container .nav-justified>li>a,.runestone-sphinx .nav-justified>li>a{margin-bottom:5px;text-align:center}.ptx-runestone-container .nav-justified>.dropdown .dropdown-menu,.runestone-sphinx .nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.ptx-runestone-container .nav-justified>li,.runestone-sphinx .nav-justified>li{display:table-cell;width:1%}.ptx-runestone-container .nav-justified>li>a,.runestone-sphinx .nav-justified>li>a{margin-bottom:0}}.ptx-runestone-container .nav-tabs-justified,.runestone-sphinx .nav-tabs-justified{border-bottom:0}.ptx-runestone-container .nav-tabs-justified>li>a,.runestone-sphinx .nav-tabs-justified>li>a{border-radius:4px;margin-right:0}.ptx-runestone-container .nav-tabs-justified>.active>a,.ptx-runestone-container .nav-tabs-justified>.active>a:focus,.ptx-runestone-container .nav-tabs-justified>.active>a:hover,.runestone-sphinx .nav-tabs-justified>.active>a,.runestone-sphinx .nav-tabs-justified>.active>a:focus,.runestone-sphinx .nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.ptx-runestone-container .nav-tabs-justified>li>a,.runestone-sphinx .nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.ptx-runestone-container .nav-tabs-justified>.active>a,.ptx-runestone-container .nav-tabs-justified>.active>a:focus,.ptx-runestone-container .nav-tabs-justified>.active>a:hover,.runestone-sphinx .nav-tabs-justified>.active>a,.runestone-sphinx .nav-tabs-justified>.active>a:focus,.runestone-sphinx .nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.ptx-runestone-container .tab-content>.tab-pane,.runestone-sphinx .tab-content>.tab-pane{display:none}.ptx-runestone-container .tab-content>.active,.runestone-sphinx .tab-content>.active{display:block}.ptx-runestone-container .nav-tabs .dropdown-menu,.runestone-sphinx .nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.ptx-runestone-container .navbar,.runestone-sphinx .navbar{border:1px solid transparent;margin-bottom:20px;min-height:50px;position:relative}@media (min-width:768px){.ptx-runestone-container .navbar,.runestone-sphinx .navbar{border-radius:4px}.ptx-runestone-container .navbar-header,.runestone-sphinx .navbar-header{float:left}}.ptx-runestone-container .navbar-collapse,.runestone-sphinx .navbar-collapse{-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);overflow-x:visible;padding-left:15px;padding-right:15px}.ptx-runestone-container .navbar-collapse.in,.runestone-sphinx .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.ptx-runestone-container .navbar-collapse,.runestone-sphinx .navbar-collapse{border-top:0;-webkit-box-shadow:none;box-shadow:none;width:auto}.ptx-runestone-container .navbar-collapse.collapse,.runestone-sphinx .navbar-collapse.collapse{display:block!important;height:auto!important;overflow:visible!important;padding-bottom:0}.ptx-runestone-container .navbar-collapse.in,.runestone-sphinx .navbar-collapse.in{overflow-y:visible}.ptx-runestone-container .navbar-fixed-bottom .navbar-collapse,.ptx-runestone-container .navbar-fixed-top .navbar-collapse,.ptx-runestone-container .navbar-static-top .navbar-collapse,.runestone-sphinx .navbar-fixed-bottom .navbar-collapse,.runestone-sphinx .navbar-fixed-top .navbar-collapse,.runestone-sphinx .navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.ptx-runestone-container .navbar-fixed-bottom,.ptx-runestone-container .navbar-fixed-top,.runestone-sphinx .navbar-fixed-bottom,.runestone-sphinx .navbar-fixed-top{left:0;position:fixed;right:0;z-index:1030}.ptx-runestone-container .navbar-fixed-bottom .navbar-collapse,.ptx-runestone-container .navbar-fixed-top .navbar-collapse,.runestone-sphinx .navbar-fixed-bottom .navbar-collapse,.runestone-sphinx .navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.ptx-runestone-container .navbar-fixed-bottom .navbar-collapse,.ptx-runestone-container .navbar-fixed-top .navbar-collapse,.runestone-sphinx .navbar-fixed-bottom .navbar-collapse,.runestone-sphinx .navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.ptx-runestone-container .navbar-fixed-bottom,.ptx-runestone-container .navbar-fixed-top,.runestone-sphinx .navbar-fixed-bottom,.runestone-sphinx .navbar-fixed-top{border-radius:0}}.ptx-runestone-container .navbar-fixed-top,.runestone-sphinx .navbar-fixed-top{border-width:0 0 1px;top:0}.ptx-runestone-container .navbar-fixed-bottom,.runestone-sphinx .navbar-fixed-bottom{border-width:1px 0 0;bottom:0;margin-bottom:0}.ptx-runestone-container .container-fluid>.navbar-collapse,.ptx-runestone-container .container-fluid>.navbar-header,.ptx-runestone-container .container>.navbar-collapse,.ptx-runestone-container .container>.navbar-header,.runestone-sphinx .container-fluid>.navbar-collapse,.runestone-sphinx .container-fluid>.navbar-header,.runestone-sphinx .container>.navbar-collapse,.runestone-sphinx .container>.navbar-header{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.ptx-runestone-container .container-fluid>.navbar-collapse,.ptx-runestone-container .container-fluid>.navbar-header,.ptx-runestone-container .container>.navbar-collapse,.ptx-runestone-container .container>.navbar-header,.runestone-sphinx .container-fluid>.navbar-collapse,.runestone-sphinx .container-fluid>.navbar-header,.runestone-sphinx .container>.navbar-collapse,.runestone-sphinx .container>.navbar-header{margin-left:0;margin-right:0}}.ptx-runestone-container .navbar-static-top,.runestone-sphinx .navbar-static-top{border-width:0 0 1px;z-index:1000}@media (min-width:768px){.ptx-runestone-container .navbar-static-top,.runestone-sphinx .navbar-static-top{border-radius:0}}.ptx-runestone-container .navbar-brand,.runestone-sphinx .navbar-brand{float:left;font-size:18px;height:50px;line-height:20px;padding:15px}.ptx-runestone-container .navbar-brand:focus,.ptx-runestone-container .navbar-brand:hover,.runestone-sphinx .navbar-brand:focus,.runestone-sphinx .navbar-brand:hover{text-decoration:none}.ptx-runestone-container .navbar-brand>img,.runestone-sphinx .navbar-brand>img{display:block}@media (min-width:768px){.ptx-runestone-container .navbar>.container .navbar-brand,.ptx-runestone-container .navbar>.container-fluid .navbar-brand,.runestone-sphinx .navbar>.container .navbar-brand,.runestone-sphinx .navbar>.container-fluid .navbar-brand{margin-left:-15px}}.ptx-runestone-container .navbar-toggle,.runestone-sphinx .navbar-toggle{background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px;float:right;margin-bottom:8px;margin-right:15px;margin-top:8px;padding:9px 10px;position:relative}.ptx-runestone-container .navbar-toggle:focus,.runestone-sphinx .navbar-toggle:focus{outline:0}.ptx-runestone-container .navbar-toggle .icon-bar,.runestone-sphinx .navbar-toggle .icon-bar{border-radius:1px;display:block;height:2px;width:22px}.ptx-runestone-container .navbar-toggle .icon-bar+.icon-bar,.runestone-sphinx .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.ptx-runestone-container .navbar-toggle,.runestone-sphinx .navbar-toggle{display:none}}.ptx-runestone-container .navbar-nav,.runestone-sphinx .navbar-nav{margin:7.5px -15px}.ptx-runestone-container .navbar-nav>li>a,.runestone-sphinx .navbar-nav>li>a{line-height:20px;padding-bottom:10px;padding-top:10px}@media (max-width:767px){.ptx-runestone-container .navbar-nav .open .dropdown-menu,.runestone-sphinx .navbar-nav .open .dropdown-menu{background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none;float:none;margin-top:0;position:static;width:auto}.ptx-runestone-container .navbar-nav .open .dropdown-menu .dropdown-header,.ptx-runestone-container .navbar-nav .open .dropdown-menu>li>a,.runestone-sphinx .navbar-nav .open .dropdown-menu .dropdown-header,.runestone-sphinx .navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.ptx-runestone-container .navbar-nav .open .dropdown-menu>li>a,.runestone-sphinx .navbar-nav .open .dropdown-menu>li>a{line-height:20px}.ptx-runestone-container .navbar-nav .open .dropdown-menu>li>a:focus,.ptx-runestone-container .navbar-nav .open .dropdown-menu>li>a:hover,.runestone-sphinx .navbar-nav .open .dropdown-menu>li>a:focus,.runestone-sphinx .navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.ptx-runestone-container .navbar-nav,.runestone-sphinx .navbar-nav{float:left;margin:0}.ptx-runestone-container .navbar-nav>li,.runestone-sphinx .navbar-nav>li{float:left}.ptx-runestone-container .navbar-nav>li>a,.runestone-sphinx .navbar-nav>li>a{padding-bottom:15px;padding-top:15px}}.ptx-runestone-container .navbar-form,.runestone-sphinx .navbar-form{border-bottom:1px solid transparent;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);margin:8px -15px;padding:10px 15px}@media (min-width:768px){.ptx-runestone-container .navbar-form .form-group,.runestone-sphinx .navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.ptx-runestone-container .navbar-form .form-control,.runestone-sphinx .navbar-form .form-control{display:inline-block;vertical-align:middle;width:auto}.ptx-runestone-container .navbar-form .form-control-static,.runestone-sphinx .navbar-form .form-control-static{display:inline-block}.ptx-runestone-container .navbar-form .input-group,.runestone-sphinx .navbar-form .input-group{display:inline-table;vertical-align:middle}.ptx-runestone-container .navbar-form .input-group .form-control,.ptx-runestone-container .navbar-form .input-group .input-group-addon,.ptx-runestone-container .navbar-form .input-group .input-group-btn,.runestone-sphinx .navbar-form .input-group .form-control,.runestone-sphinx .navbar-form .input-group .input-group-addon,.runestone-sphinx .navbar-form .input-group .input-group-btn{width:auto}.ptx-runestone-container .navbar-form .input-group>.form-control,.runestone-sphinx .navbar-form .input-group>.form-control{width:100%}.ptx-runestone-container .navbar-form .control-label,.runestone-sphinx .navbar-form .control-label{margin-bottom:0;vertical-align:middle}.ptx-runestone-container .navbar-form .checkbox,.ptx-runestone-container .navbar-form .radio,.runestone-sphinx .navbar-form .checkbox,.runestone-sphinx .navbar-form .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.ptx-runestone-container .navbar-form .checkbox label,.ptx-runestone-container .navbar-form .radio label,.runestone-sphinx .navbar-form .checkbox label,.runestone-sphinx .navbar-form .radio label{padding-left:0}.ptx-runestone-container .navbar-form .checkbox input[type=checkbox],.ptx-runestone-container .navbar-form .radio input[type=radio],.runestone-sphinx .navbar-form .checkbox input[type=checkbox],.runestone-sphinx .navbar-form .radio input[type=radio]{margin-left:0;position:relative}.ptx-runestone-container .navbar-form .has-feedback .form-control-feedback,.runestone-sphinx .navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.ptx-runestone-container .navbar-form .form-group,.runestone-sphinx .navbar-form .form-group{margin-bottom:5px}.ptx-runestone-container .navbar-form .form-group:last-child,.runestone-sphinx .navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.ptx-runestone-container .navbar-form,.runestone-sphinx .navbar-form{border:0;-webkit-box-shadow:none;box-shadow:none;margin-left:0;margin-right:0;padding-bottom:0;padding-top:0;width:auto}}.ptx-runestone-container .navbar-nav>li>.dropdown-menu,.runestone-sphinx .navbar-nav>li>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.ptx-runestone-container .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu,.runestone-sphinx .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;margin-bottom:0}.ptx-runestone-container .navbar-btn,.runestone-sphinx .navbar-btn{margin-bottom:8px;margin-top:8px}.ptx-runestone-container .navbar-btn.btn-sm,.runestone-sphinx .navbar-btn.btn-sm{margin-bottom:10px;margin-top:10px}.ptx-runestone-container .navbar-btn.btn-xs,.runestone-sphinx .navbar-btn.btn-xs{margin-bottom:14px;margin-top:14px}.ptx-runestone-container .navbar-text,.runestone-sphinx .navbar-text{margin-bottom:15px;margin-top:15px}@media (min-width:768px){.ptx-runestone-container .navbar-text,.runestone-sphinx .navbar-text{float:left;margin-left:15px;margin-right:15px}.ptx-runestone-container .navbar-left,.runestone-sphinx .navbar-left{float:left!important}.ptx-runestone-container .navbar-right,.runestone-sphinx .navbar-right{float:right!important;margin-right:-15px}.ptx-runestone-container .navbar-right~.navbar-right,.runestone-sphinx .navbar-right~.navbar-right{margin-right:0}}.ptx-runestone-container .navbar-default,.runestone-sphinx .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.ptx-runestone-container .navbar-default .navbar-brand,.runestone-sphinx .navbar-default .navbar-brand{color:#777}.ptx-runestone-container .navbar-default .navbar-brand:focus,.ptx-runestone-container .navbar-default .navbar-brand:hover,.runestone-sphinx .navbar-default .navbar-brand:focus,.runestone-sphinx .navbar-default .navbar-brand:hover{background-color:transparent;color:#5e5e5e}.ptx-runestone-container .navbar-default .navbar-nav>li>a,.ptx-runestone-container .navbar-default .navbar-text,.runestone-sphinx .navbar-default .navbar-nav>li>a,.runestone-sphinx .navbar-default .navbar-text{color:#777}.ptx-runestone-container .navbar-default .navbar-nav>li>a:focus,.ptx-runestone-container .navbar-default .navbar-nav>li>a:hover,.runestone-sphinx .navbar-default .navbar-nav>li>a:focus,.runestone-sphinx .navbar-default .navbar-nav>li>a:hover{background-color:transparent;color:#333}.ptx-runestone-container .navbar-default .navbar-nav>.active>a,.ptx-runestone-container .navbar-default .navbar-nav>.active>a:focus,.ptx-runestone-container .navbar-default .navbar-nav>.active>a:hover,.runestone-sphinx .navbar-default .navbar-nav>.active>a,.runestone-sphinx .navbar-default .navbar-nav>.active>a:focus,.runestone-sphinx .navbar-default .navbar-nav>.active>a:hover{background-color:#e7e7e7;color:#555}.ptx-runestone-container .navbar-default .navbar-nav>.disabled>a,.ptx-runestone-container .navbar-default .navbar-nav>.disabled>a:focus,.ptx-runestone-container .navbar-default .navbar-nav>.disabled>a:hover,.runestone-sphinx .navbar-default .navbar-nav>.disabled>a,.runestone-sphinx .navbar-default .navbar-nav>.disabled>a:focus,.runestone-sphinx .navbar-default .navbar-nav>.disabled>a:hover{background-color:transparent;color:#ccc}.ptx-runestone-container .navbar-default .navbar-nav>.open>a,.ptx-runestone-container .navbar-default .navbar-nav>.open>a:focus,.ptx-runestone-container .navbar-default .navbar-nav>.open>a:hover,.runestone-sphinx .navbar-default .navbar-nav>.open>a,.runestone-sphinx .navbar-default .navbar-nav>.open>a:focus,.runestone-sphinx .navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>li>a,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#333}.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.active>a,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.active>a,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#e7e7e7;color:#555}.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#ccc}}.ptx-runestone-container .navbar-default .navbar-toggle,.runestone-sphinx .navbar-default .navbar-toggle{border-color:#ddd}.ptx-runestone-container .navbar-default .navbar-toggle:focus,.ptx-runestone-container .navbar-default .navbar-toggle:hover,.runestone-sphinx .navbar-default .navbar-toggle:focus,.runestone-sphinx .navbar-default .navbar-toggle:hover{background-color:#ddd}.ptx-runestone-container .navbar-default .navbar-toggle .icon-bar,.runestone-sphinx .navbar-default .navbar-toggle .icon-bar{background-color:#888}.ptx-runestone-container .navbar-default .navbar-collapse,.ptx-runestone-container .navbar-default .navbar-form,.runestone-sphinx .navbar-default .navbar-collapse,.runestone-sphinx .navbar-default .navbar-form{border-color:#e7e7e7}.ptx-runestone-container .navbar-default .navbar-link,.runestone-sphinx .navbar-default .navbar-link{color:#777}.ptx-runestone-container .navbar-default .navbar-link:hover,.runestone-sphinx .navbar-default .navbar-link:hover{color:#333}.ptx-runestone-container .navbar-default .btn-link,.runestone-sphinx .navbar-default .btn-link{color:#777}.ptx-runestone-container .navbar-default .btn-link:focus,.ptx-runestone-container .navbar-default .btn-link:hover,.runestone-sphinx .navbar-default .btn-link:focus,.runestone-sphinx .navbar-default .btn-link:hover{color:#333}.ptx-runestone-container .navbar-default .btn-link[disabled]:focus,.ptx-runestone-container .navbar-default .btn-link[disabled]:hover,.ptx-runestone-container fieldset[disabled] .navbar-default .btn-link:focus,.ptx-runestone-container fieldset[disabled] .navbar-default .btn-link:hover,.runestone-sphinx .navbar-default .btn-link[disabled]:focus,.runestone-sphinx .navbar-default .btn-link[disabled]:hover,.runestone-sphinx fieldset[disabled] .navbar-default .btn-link:focus,.runestone-sphinx fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.ptx-runestone-container .navbar-inverse,.runestone-sphinx .navbar-inverse{background-color:#222;border-color:#080808}.ptx-runestone-container .navbar-inverse .navbar-brand,.runestone-sphinx .navbar-inverse .navbar-brand{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .navbar-brand:focus,.ptx-runestone-container .navbar-inverse .navbar-brand:hover,.runestone-sphinx .navbar-inverse .navbar-brand:focus,.runestone-sphinx .navbar-inverse .navbar-brand:hover{background-color:transparent;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav>li>a,.ptx-runestone-container .navbar-inverse .navbar-text,.runestone-sphinx .navbar-inverse .navbar-nav>li>a,.runestone-sphinx .navbar-inverse .navbar-text{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .navbar-nav>li>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav>li>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav>li>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav>li>a:hover{background-color:transparent;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav>.active>a,.ptx-runestone-container .navbar-inverse .navbar-nav>.active>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav>.active>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav>.active>a,.runestone-sphinx .navbar-inverse .navbar-nav>.active>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav>.active>a:hover{background-color:#080808;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav>.disabled>a,.ptx-runestone-container .navbar-inverse .navbar-nav>.disabled>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav>.disabled>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav>.disabled>a,.runestone-sphinx .navbar-inverse .navbar-nav>.disabled>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav>.disabled>a:hover{background-color:transparent;color:#444}.ptx-runestone-container .navbar-inverse .navbar-nav>.open>a,.ptx-runestone-container .navbar-inverse .navbar-nav>.open>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav>.open>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav>.open>a,.runestone-sphinx .navbar-inverse .navbar-nav>.open>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:767px){.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu .divider,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>li>a,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#080808;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#444}}.ptx-runestone-container .navbar-inverse .navbar-toggle,.runestone-sphinx .navbar-inverse .navbar-toggle{border-color:#333}.ptx-runestone-container .navbar-inverse .navbar-toggle:focus,.ptx-runestone-container .navbar-inverse .navbar-toggle:hover,.runestone-sphinx .navbar-inverse .navbar-toggle:focus,.runestone-sphinx .navbar-inverse .navbar-toggle:hover{background-color:#333}.ptx-runestone-container .navbar-inverse .navbar-toggle .icon-bar,.runestone-sphinx .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.ptx-runestone-container .navbar-inverse .navbar-collapse,.ptx-runestone-container .navbar-inverse .navbar-form,.runestone-sphinx .navbar-inverse .navbar-collapse,.runestone-sphinx .navbar-inverse .navbar-form{border-color:#101010}.ptx-runestone-container .navbar-inverse .navbar-link,.runestone-sphinx .navbar-inverse .navbar-link{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .navbar-link:hover,.runestone-sphinx .navbar-inverse .navbar-link:hover{color:#fff}.ptx-runestone-container .navbar-inverse .btn-link,.runestone-sphinx .navbar-inverse .btn-link{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .btn-link:focus,.ptx-runestone-container .navbar-inverse .btn-link:hover,.runestone-sphinx .navbar-inverse .btn-link:focus,.runestone-sphinx .navbar-inverse .btn-link:hover{color:#fff}.ptx-runestone-container .navbar-inverse .btn-link[disabled]:focus,.ptx-runestone-container .navbar-inverse .btn-link[disabled]:hover,.ptx-runestone-container fieldset[disabled] .navbar-inverse .btn-link:focus,.ptx-runestone-container fieldset[disabled] .navbar-inverse .btn-link:hover,.runestone-sphinx .navbar-inverse .btn-link[disabled]:focus,.runestone-sphinx .navbar-inverse .btn-link[disabled]:hover,.runestone-sphinx fieldset[disabled] .navbar-inverse .btn-link:focus,.runestone-sphinx fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.ptx-runestone-container .breadcrumb,.runestone-sphinx .breadcrumb{background-color:#f5f5f5;border-radius:4px;list-style:none;margin-bottom:20px;padding:8px 15px}.ptx-runestone-container .breadcrumb>li,.runestone-sphinx .breadcrumb>li{display:inline-block}.ptx-runestone-container .breadcrumb>li+li:before,.runestone-sphinx .breadcrumb>li+li:before{color:#ccc;content:"/\00a0";padding:0 5px}.ptx-runestone-container .breadcrumb>.active,.runestone-sphinx .breadcrumb>.active{color:#777}.ptx-runestone-container .pagination,.runestone-sphinx .pagination{border-radius:4px;display:inline-block;margin:20px 0;padding-left:0}.ptx-runestone-container .pagination>li,.runestone-sphinx .pagination>li{display:inline}.ptx-runestone-container .pagination>li>a,.ptx-runestone-container .pagination>li>span,.runestone-sphinx .pagination>li>a,.runestone-sphinx .pagination>li>span{background-color:#fff;border:1px solid #ddd;color:#337ab7;float:left;line-height:1.42857143;margin-left:-1px;padding:6px 12px;position:relative;text-decoration:none}.ptx-runestone-container .pagination>li>a:focus,.ptx-runestone-container .pagination>li>a:hover,.ptx-runestone-container .pagination>li>span:focus,.ptx-runestone-container .pagination>li>span:hover,.runestone-sphinx .pagination>li>a:focus,.runestone-sphinx .pagination>li>a:hover,.runestone-sphinx .pagination>li>span:focus,.runestone-sphinx .pagination>li>span:hover{background-color:#eee;border-color:#ddd;color:#23527c;z-index:2}.ptx-runestone-container .pagination>li:first-child>a,.ptx-runestone-container .pagination>li:first-child>span,.runestone-sphinx .pagination>li:first-child>a,.runestone-sphinx .pagination>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-left:0}.ptx-runestone-container .pagination>li:last-child>a,.ptx-runestone-container .pagination>li:last-child>span,.runestone-sphinx .pagination>li:last-child>a,.runestone-sphinx .pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.ptx-runestone-container .pagination>.active>a,.ptx-runestone-container .pagination>.active>a:focus,.ptx-runestone-container .pagination>.active>a:hover,.ptx-runestone-container .pagination>.active>span,.ptx-runestone-container .pagination>.active>span:focus,.ptx-runestone-container .pagination>.active>span:hover,.runestone-sphinx .pagination>.active>a,.runestone-sphinx .pagination>.active>a:focus,.runestone-sphinx .pagination>.active>a:hover,.runestone-sphinx .pagination>.active>span,.runestone-sphinx .pagination>.active>span:focus,.runestone-sphinx .pagination>.active>span:hover{background-color:#337ab7;border-color:#337ab7;color:#fff;cursor:default;z-index:3}.ptx-runestone-container .pagination>.disabled>a,.ptx-runestone-container .pagination>.disabled>a:focus,.ptx-runestone-container .pagination>.disabled>a:hover,.ptx-runestone-container .pagination>.disabled>span,.ptx-runestone-container .pagination>.disabled>span:focus,.ptx-runestone-container .pagination>.disabled>span:hover,.runestone-sphinx .pagination>.disabled>a,.runestone-sphinx .pagination>.disabled>a:focus,.runestone-sphinx .pagination>.disabled>a:hover,.runestone-sphinx .pagination>.disabled>span,.runestone-sphinx .pagination>.disabled>span:focus,.runestone-sphinx .pagination>.disabled>span:hover{background-color:#fff;border-color:#ddd;color:#777;cursor:not-allowed}.ptx-runestone-container .pagination-lg>li>a,.ptx-runestone-container .pagination-lg>li>span,.runestone-sphinx .pagination-lg>li>a,.runestone-sphinx .pagination-lg>li>span{font-size:18px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container .pagination-lg>li:first-child>a,.ptx-runestone-container .pagination-lg>li:first-child>span,.runestone-sphinx .pagination-lg>li:first-child>a,.runestone-sphinx .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.ptx-runestone-container .pagination-lg>li:last-child>a,.ptx-runestone-container .pagination-lg>li:last-child>span,.runestone-sphinx .pagination-lg>li:last-child>a,.runestone-sphinx .pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.ptx-runestone-container .pagination-sm>li>a,.ptx-runestone-container .pagination-sm>li>span,.runestone-sphinx .pagination-sm>li>a,.runestone-sphinx .pagination-sm>li>span{font-size:12px;line-height:1.5;padding:5px 10px}.ptx-runestone-container .pagination-sm>li:first-child>a,.ptx-runestone-container .pagination-sm>li:first-child>span,.runestone-sphinx .pagination-sm>li:first-child>a,.runestone-sphinx .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.ptx-runestone-container .pagination-sm>li:last-child>a,.ptx-runestone-container .pagination-sm>li:last-child>span,.runestone-sphinx .pagination-sm>li:last-child>a,.runestone-sphinx .pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.ptx-runestone-container .pager,.runestone-sphinx .pager{list-style:none;margin:20px 0;padding-left:0;text-align:center}.ptx-runestone-container .pager li,.runestone-sphinx .pager li{display:inline}.ptx-runestone-container .pager li>a,.ptx-runestone-container .pager li>span,.runestone-sphinx .pager li>a,.runestone-sphinx .pager li>span{background-color:#fff;border:1px solid #ddd;border-radius:15px;display:inline-block;padding:5px 14px}.ptx-runestone-container .pager li>a:focus,.ptx-runestone-container .pager li>a:hover,.runestone-sphinx .pager li>a:focus,.runestone-sphinx .pager li>a:hover{background-color:#eee;text-decoration:none}.ptx-runestone-container .pager .next>a,.ptx-runestone-container .pager .next>span,.runestone-sphinx .pager .next>a,.runestone-sphinx .pager .next>span{float:right}.ptx-runestone-container .pager .previous>a,.ptx-runestone-container .pager .previous>span,.runestone-sphinx .pager .previous>a,.runestone-sphinx .pager .previous>span{float:left}.ptx-runestone-container .pager .disabled>a,.ptx-runestone-container .pager .disabled>a:focus,.ptx-runestone-container .pager .disabled>a:hover,.ptx-runestone-container .pager .disabled>span,.runestone-sphinx .pager .disabled>a,.runestone-sphinx .pager .disabled>a:focus,.runestone-sphinx .pager .disabled>a:hover,.runestone-sphinx .pager .disabled>span{background-color:#fff;color:#777;cursor:not-allowed}.ptx-runestone-container .label,.runestone-sphinx .label{border-radius:.25em;color:#fff;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:baseline;white-space:nowrap}.ptx-runestone-container a.label:focus,.ptx-runestone-container a.label:hover,.runestone-sphinx a.label:focus,.runestone-sphinx a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.ptx-runestone-container .label:empty,.runestone-sphinx .label:empty{display:none}.ptx-runestone-container .btn .label,.runestone-sphinx .btn .label{position:relative;top:-1px}.ptx-runestone-container .label-default,.runestone-sphinx .label-default{background-color:#777}.ptx-runestone-container .label-default[href]:focus,.ptx-runestone-container .label-default[href]:hover,.runestone-sphinx .label-default[href]:focus,.runestone-sphinx .label-default[href]:hover{background-color:#5e5e5e}.ptx-runestone-container .label-primary,.runestone-sphinx .label-primary{background-color:#337ab7}.ptx-runestone-container .label-primary[href]:focus,.ptx-runestone-container .label-primary[href]:hover,.runestone-sphinx .label-primary[href]:focus,.runestone-sphinx .label-primary[href]:hover{background-color:#286090}.ptx-runestone-container .label-success,.runestone-sphinx .label-success{background-color:#5cb85c}.ptx-runestone-container .label-success[href]:focus,.ptx-runestone-container .label-success[href]:hover,.runestone-sphinx .label-success[href]:focus,.runestone-sphinx .label-success[href]:hover{background-color:#449d44}.ptx-runestone-container .label-info,.runestone-sphinx .label-info{background-color:#5bc0de}.ptx-runestone-container .label-info[href]:focus,.ptx-runestone-container .label-info[href]:hover,.runestone-sphinx .label-info[href]:focus,.runestone-sphinx .label-info[href]:hover{background-color:#31b0d5}.ptx-runestone-container .label-warning,.runestone-sphinx .label-warning{background-color:#f0ad4e}.ptx-runestone-container .label-warning[href]:focus,.ptx-runestone-container .label-warning[href]:hover,.runestone-sphinx .label-warning[href]:focus,.runestone-sphinx .label-warning[href]:hover{background-color:#ec971f}.ptx-runestone-container .label-danger,.runestone-sphinx .label-danger{background-color:#d9534f}.ptx-runestone-container .label-danger[href]:focus,.ptx-runestone-container .label-danger[href]:hover,.runestone-sphinx .label-danger[href]:focus,.runestone-sphinx .label-danger[href]:hover{background-color:#c9302c}.ptx-runestone-container .badge,.runestone-sphinx .badge{background-color:#777;border-radius:10px;color:#fff;display:inline-block;font-size:12px;font-weight:700;line-height:1;min-width:10px;padding:3px 7px;text-align:center;vertical-align:middle;white-space:nowrap}.ptx-runestone-container .badge:empty,.runestone-sphinx .badge:empty{display:none}.ptx-runestone-container .btn .badge,.runestone-sphinx .btn .badge{position:relative;top:-1px}.ptx-runestone-container .btn-group-xs>.btn .badge,.ptx-runestone-container .btn-xs .badge,.runestone-sphinx .btn-group-xs>.btn .badge,.runestone-sphinx .btn-xs .badge{padding:1px 5px;top:0}.ptx-runestone-container a.badge:focus,.ptx-runestone-container a.badge:hover,.runestone-sphinx a.badge:focus,.runestone-sphinx a.badge:hover{color:#fff;cursor:pointer;text-decoration:none}.ptx-runestone-container .list-group-item.active>.badge,.ptx-runestone-container .nav-pills>.active>a>.badge,.runestone-sphinx .list-group-item.active>.badge,.runestone-sphinx .nav-pills>.active>a>.badge{background-color:#fff;color:#337ab7}.ptx-runestone-container .list-group-item>.badge,.runestone-sphinx .list-group-item>.badge{float:right}.ptx-runestone-container .list-group-item>.badge+.badge,.runestone-sphinx .list-group-item>.badge+.badge{margin-right:5px}.ptx-runestone-container .nav-pills>li>a>.badge,.runestone-sphinx .nav-pills>li>a>.badge{margin-left:3px}.ptx-runestone-container .jumbotron,.runestone-sphinx .jumbotron{background-color:#eee;color:inherit;margin-bottom:30px;padding-bottom:30px;padding-top:30px}.ptx-runestone-container .jumbotron .h1,.ptx-runestone-container .jumbotron h1,.runestone-sphinx .jumbotron .h1,.runestone-sphinx .jumbotron h1{color:inherit}.ptx-runestone-container .jumbotron p,.runestone-sphinx .jumbotron p{font-size:21px;font-weight:200;margin-bottom:15px}.ptx-runestone-container .jumbotron>hr,.runestone-sphinx .jumbotron>hr{border-top-color:#d5d5d5}.ptx-runestone-container .container .jumbotron,.ptx-runestone-container .container-fluid .jumbotron,.runestone-sphinx .container .jumbotron,.runestone-sphinx .container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.ptx-runestone-container .jumbotron .container,.runestone-sphinx .jumbotron .container{max-width:100%}@media screen and (min-width:768px){.ptx-runestone-container .jumbotron,.runestone-sphinx .jumbotron{padding-bottom:48px;padding-top:48px}.ptx-runestone-container .container .jumbotron,.ptx-runestone-container .container-fluid .jumbotron,.runestone-sphinx .container .jumbotron,.runestone-sphinx .container-fluid .jumbotron{padding-left:60px;padding-right:60px}.ptx-runestone-container .jumbotron .h1,.ptx-runestone-container .jumbotron h1,.runestone-sphinx .jumbotron .h1,.runestone-sphinx .jumbotron h1{font-size:63px}}.ptx-runestone-container .thumbnail,.runestone-sphinx .thumbnail{background-color:#fff;border:1px solid #ddd;border-radius:4px;display:block;line-height:1.42857143;margin-bottom:20px;padding:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.ptx-runestone-container .thumbnail a>img,.ptx-runestone-container .thumbnail>img,.runestone-sphinx .thumbnail a>img,.runestone-sphinx .thumbnail>img{margin-left:auto;margin-right:auto}.ptx-runestone-container a.thumbnail.active,.ptx-runestone-container a.thumbnail:focus,.ptx-runestone-container a.thumbnail:hover,.runestone-sphinx a.thumbnail.active,.runestone-sphinx a.thumbnail:focus,.runestone-sphinx a.thumbnail:hover{border-color:#337ab7}.ptx-runestone-container .thumbnail .caption,.runestone-sphinx .thumbnail .caption{color:#333;padding:9px}.ptx-runestone-container .alert,.runestone-sphinx .alert{border:1px solid transparent;border-radius:4px;margin-bottom:20px;padding:15px}.ptx-runestone-container .alert h4,.runestone-sphinx .alert h4{color:inherit;margin-top:0}.ptx-runestone-container .alert .alert-link,.runestone-sphinx .alert .alert-link{font-weight:700}.ptx-runestone-container .alert>p,.ptx-runestone-container .alert>ul,.runestone-sphinx .alert>p,.runestone-sphinx .alert>ul{margin-bottom:0}.ptx-runestone-container .alert>p+p,.runestone-sphinx .alert>p+p{margin-top:5px}.ptx-runestone-container .alert-dismissable,.ptx-runestone-container .alert-dismissible,.runestone-sphinx .alert-dismissable,.runestone-sphinx .alert-dismissible{padding-right:35px}.ptx-runestone-container .alert-dismissable .close,.ptx-runestone-container .alert-dismissible .close,.runestone-sphinx .alert-dismissable .close,.runestone-sphinx .alert-dismissible .close{color:inherit;position:relative;right:-21px;top:-2px}.ptx-runestone-container .alert-success,.runestone-sphinx .alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.ptx-runestone-container .alert-success hr,.runestone-sphinx .alert-success hr{border-top-color:#c9e2b3}.ptx-runestone-container .alert-success .alert-link,.runestone-sphinx .alert-success .alert-link{color:#2b542c}.ptx-runestone-container .alert-info,.runestone-sphinx .alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.ptx-runestone-container .alert-info hr,.runestone-sphinx .alert-info hr{border-top-color:#a6e1ec}.ptx-runestone-container .alert-info .alert-link,.runestone-sphinx .alert-info .alert-link{color:#245269}.ptx-runestone-container .alert-warning,.runestone-sphinx .alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.ptx-runestone-container .alert-warning hr,.runestone-sphinx .alert-warning hr{border-top-color:#f7e1b5}.ptx-runestone-container .alert-warning .alert-link,.runestone-sphinx .alert-warning .alert-link{color:#66512c}.ptx-runestone-container .alert-danger,.runestone-sphinx .alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.ptx-runestone-container .alert-danger hr,.runestone-sphinx .alert-danger hr{border-top-color:#e4b9c0}.ptx-runestone-container .alert-danger .alert-link,.runestone-sphinx .alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.ptx-runestone-container .progress,.runestone-sphinx .progress{background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);height:20px;margin-bottom:20px;overflow:hidden}.ptx-runestone-container .progress-bar,.runestone-sphinx .progress-bar{background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);color:#fff;float:left;font-size:12px;height:100%;line-height:20px;text-align:center;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease;width:0}.ptx-runestone-container .progress-bar-striped,.ptx-runestone-container .progress-striped .progress-bar,.runestone-sphinx .progress-bar-striped,.runestone-sphinx .progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.ptx-runestone-container .progress-bar.active,.ptx-runestone-container .progress.active .progress-bar,.runestone-sphinx .progress-bar.active,.runestone-sphinx .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.ptx-runestone-container .progress-bar-success,.runestone-sphinx .progress-bar-success{background-color:#5cb85c}.ptx-runestone-container .progress-striped .progress-bar-success,.runestone-sphinx .progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.ptx-runestone-container .progress-bar-info,.runestone-sphinx .progress-bar-info{background-color:#5bc0de}.ptx-runestone-container .progress-striped .progress-bar-info,.runestone-sphinx .progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.ptx-runestone-container .progress-bar-warning,.runestone-sphinx .progress-bar-warning{background-color:#f0ad4e}.ptx-runestone-container .progress-striped .progress-bar-warning,.runestone-sphinx .progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.ptx-runestone-container .progress-bar-danger,.runestone-sphinx .progress-bar-danger{background-color:#d9534f}.ptx-runestone-container .progress-striped .progress-bar-danger,.runestone-sphinx .progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.ptx-runestone-container .media,.runestone-sphinx .media{margin-top:15px}.ptx-runestone-container .media:first-child,.runestone-sphinx .media:first-child{margin-top:0}.ptx-runestone-container .media,.ptx-runestone-container .media-body,.runestone-sphinx .media,.runestone-sphinx .media-body{zoom:1;overflow:hidden}.ptx-runestone-container .media-body,.runestone-sphinx .media-body{width:10000px}.ptx-runestone-container .media-object,.runestone-sphinx .media-object{display:block}.ptx-runestone-container .media-object.img-thumbnail,.runestone-sphinx .media-object.img-thumbnail{max-width:none}.ptx-runestone-container .media-right,.ptx-runestone-container .media>.pull-right,.runestone-sphinx .media-right,.runestone-sphinx .media>.pull-right{padding-left:10px}.ptx-runestone-container .media-left,.ptx-runestone-container .media>.pull-left,.runestone-sphinx .media-left,.runestone-sphinx .media>.pull-left{padding-right:10px}.ptx-runestone-container .media-body,.ptx-runestone-container .media-left,.ptx-runestone-container .media-right,.runestone-sphinx .media-body,.runestone-sphinx .media-left,.runestone-sphinx .media-right{display:table-cell;vertical-align:top}.ptx-runestone-container .media-middle,.runestone-sphinx .media-middle{vertical-align:middle}.ptx-runestone-container .media-bottom,.runestone-sphinx .media-bottom{vertical-align:bottom}.ptx-runestone-container .media-heading,.runestone-sphinx .media-heading{margin-bottom:5px;margin-top:0}.ptx-runestone-container .media-list,.runestone-sphinx .media-list{list-style:none;padding-left:0}.ptx-runestone-container .list-group,.runestone-sphinx .list-group{margin-bottom:20px;padding-left:0}.ptx-runestone-container .list-group-item,.runestone-sphinx .list-group-item{background-color:#fff;border:1px solid #ddd;display:block;margin-bottom:-1px;padding:10px 15px;position:relative}.ptx-runestone-container .list-group-item:first-child,.runestone-sphinx .list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.ptx-runestone-container .list-group-item:last-child,.runestone-sphinx .list-group-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;margin-bottom:0}.ptx-runestone-container .list-group-item.disabled,.ptx-runestone-container .list-group-item.disabled:focus,.ptx-runestone-container .list-group-item.disabled:hover,.runestone-sphinx .list-group-item.disabled,.runestone-sphinx .list-group-item.disabled:focus,.runestone-sphinx .list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.ptx-runestone-container .list-group-item.disabled .list-group-item-heading,.ptx-runestone-container .list-group-item.disabled:focus .list-group-item-heading,.ptx-runestone-container .list-group-item.disabled:hover .list-group-item-heading,.runestone-sphinx .list-group-item.disabled .list-group-item-heading,.runestone-sphinx .list-group-item.disabled:focus .list-group-item-heading,.runestone-sphinx .list-group-item.disabled:hover .list-group-item-heading{color:inherit}.ptx-runestone-container .list-group-item.disabled .list-group-item-text,.ptx-runestone-container .list-group-item.disabled:focus .list-group-item-text,.ptx-runestone-container .list-group-item.disabled:hover .list-group-item-text,.runestone-sphinx .list-group-item.disabled .list-group-item-text,.runestone-sphinx .list-group-item.disabled:focus .list-group-item-text,.runestone-sphinx .list-group-item.disabled:hover .list-group-item-text{color:#777}.ptx-runestone-container .list-group-item.active,.ptx-runestone-container .list-group-item.active:focus,.ptx-runestone-container .list-group-item.active:hover,.runestone-sphinx .list-group-item.active,.runestone-sphinx .list-group-item.active:focus,.runestone-sphinx .list-group-item.active:hover{background-color:#337ab7;border-color:#337ab7;color:#fff;z-index:2}.ptx-runestone-container .list-group-item.active .list-group-item-heading,.ptx-runestone-container .list-group-item.active .list-group-item-heading>.small,.ptx-runestone-container .list-group-item.active .list-group-item-heading>small,.ptx-runestone-container .list-group-item.active:focus .list-group-item-heading,.ptx-runestone-container .list-group-item.active:focus .list-group-item-heading>.small,.ptx-runestone-container .list-group-item.active:focus .list-group-item-heading>small,.ptx-runestone-container .list-group-item.active:hover .list-group-item-heading,.ptx-runestone-container .list-group-item.active:hover .list-group-item-heading>.small,.ptx-runestone-container .list-group-item.active:hover .list-group-item-heading>small,.runestone-sphinx .list-group-item.active .list-group-item-heading,.runestone-sphinx .list-group-item.active .list-group-item-heading>.small,.runestone-sphinx .list-group-item.active .list-group-item-heading>small,.runestone-sphinx .list-group-item.active:focus .list-group-item-heading,.runestone-sphinx .list-group-item.active:focus .list-group-item-heading>.small,.runestone-sphinx .list-group-item.active:focus .list-group-item-heading>small,.runestone-sphinx .list-group-item.active:hover .list-group-item-heading,.runestone-sphinx .list-group-item.active:hover .list-group-item-heading>.small,.runestone-sphinx .list-group-item.active:hover .list-group-item-heading>small{color:inherit}.ptx-runestone-container .list-group-item.active .list-group-item-text,.ptx-runestone-container .list-group-item.active:focus .list-group-item-text,.ptx-runestone-container .list-group-item.active:hover .list-group-item-text,.runestone-sphinx .list-group-item.active .list-group-item-text,.runestone-sphinx .list-group-item.active:focus .list-group-item-text,.runestone-sphinx .list-group-item.active:hover .list-group-item-text{color:#c7ddef}.ptx-runestone-container a.list-group-item,.ptx-runestone-container button.list-group-item,.runestone-sphinx a.list-group-item,.runestone-sphinx button.list-group-item{color:#555}.ptx-runestone-container a.list-group-item .list-group-item-heading,.ptx-runestone-container button.list-group-item .list-group-item-heading,.runestone-sphinx a.list-group-item .list-group-item-heading,.runestone-sphinx button.list-group-item .list-group-item-heading{color:#333}.ptx-runestone-container a.list-group-item:focus,.ptx-runestone-container a.list-group-item:hover,.ptx-runestone-container button.list-group-item:focus,.ptx-runestone-container button.list-group-item:hover,.runestone-sphinx a.list-group-item:focus,.runestone-sphinx a.list-group-item:hover,.runestone-sphinx button.list-group-item:focus,.runestone-sphinx button.list-group-item:hover{background-color:#f5f5f5;color:#555;text-decoration:none}.ptx-runestone-container button.list-group-item,.runestone-sphinx button.list-group-item{text-align:left;width:100%}.ptx-runestone-container .list-group-item-success,.runestone-sphinx .list-group-item-success{background-color:#dff0d8;color:#3c763d}.ptx-runestone-container a.list-group-item-success,.ptx-runestone-container button.list-group-item-success,.runestone-sphinx a.list-group-item-success,.runestone-sphinx button.list-group-item-success{color:#3c763d}.ptx-runestone-container a.list-group-item-success .list-group-item-heading,.ptx-runestone-container button.list-group-item-success .list-group-item-heading,.runestone-sphinx a.list-group-item-success .list-group-item-heading,.runestone-sphinx button.list-group-item-success .list-group-item-heading{color:inherit}.ptx-runestone-container a.list-group-item-success:focus,.ptx-runestone-container a.list-group-item-success:hover,.ptx-runestone-container button.list-group-item-success:focus,.ptx-runestone-container button.list-group-item-success:hover,.runestone-sphinx a.list-group-item-success:focus,.runestone-sphinx a.list-group-item-success:hover,.runestone-sphinx button.list-group-item-success:focus,.runestone-sphinx button.list-group-item-success:hover{background-color:#d0e9c6;color:#3c763d}.ptx-runestone-container a.list-group-item-success.active,.ptx-runestone-container a.list-group-item-success.active:focus,.ptx-runestone-container a.list-group-item-success.active:hover,.ptx-runestone-container button.list-group-item-success.active,.ptx-runestone-container button.list-group-item-success.active:focus,.ptx-runestone-container button.list-group-item-success.active:hover,.runestone-sphinx a.list-group-item-success.active,.runestone-sphinx a.list-group-item-success.active:focus,.runestone-sphinx a.list-group-item-success.active:hover,.runestone-sphinx button.list-group-item-success.active,.runestone-sphinx button.list-group-item-success.active:focus,.runestone-sphinx button.list-group-item-success.active:hover{background-color:#3c763d;border-color:#3c763d;color:#fff}.ptx-runestone-container .list-group-item-info,.runestone-sphinx .list-group-item-info{background-color:#d9edf7;color:#31708f}.ptx-runestone-container a.list-group-item-info,.ptx-runestone-container button.list-group-item-info,.runestone-sphinx a.list-group-item-info,.runestone-sphinx button.list-group-item-info{color:#31708f}.ptx-runestone-container a.list-group-item-info .list-group-item-heading,.ptx-runestone-container button.list-group-item-info .list-group-item-heading,.runestone-sphinx a.list-group-item-info .list-group-item-heading,.runestone-sphinx button.list-group-item-info .list-group-item-heading{color:inherit}.ptx-runestone-container a.list-group-item-info:focus,.ptx-runestone-container a.list-group-item-info:hover,.ptx-runestone-container button.list-group-item-info:focus,.ptx-runestone-container button.list-group-item-info:hover,.runestone-sphinx a.list-group-item-info:focus,.runestone-sphinx a.list-group-item-info:hover,.runestone-sphinx button.list-group-item-info:focus,.runestone-sphinx button.list-group-item-info:hover{background-color:#c4e3f3;color:#31708f}.ptx-runestone-container a.list-group-item-info.active,.ptx-runestone-container a.list-group-item-info.active:focus,.ptx-runestone-container a.list-group-item-info.active:hover,.ptx-runestone-container button.list-group-item-info.active,.ptx-runestone-container button.list-group-item-info.active:focus,.ptx-runestone-container button.list-group-item-info.active:hover,.runestone-sphinx a.list-group-item-info.active,.runestone-sphinx a.list-group-item-info.active:focus,.runestone-sphinx a.list-group-item-info.active:hover,.runestone-sphinx button.list-group-item-info.active,.runestone-sphinx button.list-group-item-info.active:focus,.runestone-sphinx button.list-group-item-info.active:hover{background-color:#31708f;border-color:#31708f;color:#fff}.ptx-runestone-container .list-group-item-warning,.runestone-sphinx .list-group-item-warning{background-color:#fcf8e3;color:#8a6d3b}.ptx-runestone-container a.list-group-item-warning,.ptx-runestone-container button.list-group-item-warning,.runestone-sphinx a.list-group-item-warning,.runestone-sphinx button.list-group-item-warning{color:#8a6d3b}.ptx-runestone-container a.list-group-item-warning .list-group-item-heading,.ptx-runestone-container button.list-group-item-warning .list-group-item-heading,.runestone-sphinx a.list-group-item-warning .list-group-item-heading,.runestone-sphinx button.list-group-item-warning .list-group-item-heading{color:inherit}.ptx-runestone-container a.list-group-item-warning:focus,.ptx-runestone-container a.list-group-item-warning:hover,.ptx-runestone-container button.list-group-item-warning:focus,.ptx-runestone-container button.list-group-item-warning:hover,.runestone-sphinx a.list-group-item-warning:focus,.runestone-sphinx a.list-group-item-warning:hover,.runestone-sphinx button.list-group-item-warning:focus,.runestone-sphinx button.list-group-item-warning:hover{background-color:#faf2cc;color:#8a6d3b}.ptx-runestone-container a.list-group-item-warning.active,.ptx-runestone-container a.list-group-item-warning.active:focus,.ptx-runestone-container a.list-group-item-warning.active:hover,.ptx-runestone-container button.list-group-item-warning.active,.ptx-runestone-container button.list-group-item-warning.active:focus,.ptx-runestone-container button.list-group-item-warning.active:hover,.runestone-sphinx a.list-group-item-warning.active,.runestone-sphinx a.list-group-item-warning.active:focus,.runestone-sphinx a.list-group-item-warning.active:hover,.runestone-sphinx button.list-group-item-warning.active,.runestone-sphinx button.list-group-item-warning.active:focus,.runestone-sphinx button.list-group-item-warning.active:hover{background-color:#8a6d3b;border-color:#8a6d3b;color:#fff}.ptx-runestone-container .list-group-item-danger,.runestone-sphinx .list-group-item-danger{background-color:#f2dede;color:#a94442}.ptx-runestone-container a.list-group-item-danger,.ptx-runestone-container button.list-group-item-danger,.runestone-sphinx a.list-group-item-danger,.runestone-sphinx button.list-group-item-danger{color:#a94442}.ptx-runestone-container a.list-group-item-danger .list-group-item-heading,.ptx-runestone-container button.list-group-item-danger .list-group-item-heading,.runestone-sphinx a.list-group-item-danger .list-group-item-heading,.runestone-sphinx button.list-group-item-danger .list-group-item-heading{color:inherit}.ptx-runestone-container a.list-group-item-danger:focus,.ptx-runestone-container a.list-group-item-danger:hover,.ptx-runestone-container button.list-group-item-danger:focus,.ptx-runestone-container button.list-group-item-danger:hover,.runestone-sphinx a.list-group-item-danger:focus,.runestone-sphinx a.list-group-item-danger:hover,.runestone-sphinx button.list-group-item-danger:focus,.runestone-sphinx button.list-group-item-danger:hover{background-color:#ebcccc;color:#a94442}.ptx-runestone-container a.list-group-item-danger.active,.ptx-runestone-container a.list-group-item-danger.active:focus,.ptx-runestone-container a.list-group-item-danger.active:hover,.ptx-runestone-container button.list-group-item-danger.active,.ptx-runestone-container button.list-group-item-danger.active:focus,.ptx-runestone-container button.list-group-item-danger.active:hover,.runestone-sphinx a.list-group-item-danger.active,.runestone-sphinx a.list-group-item-danger.active:focus,.runestone-sphinx a.list-group-item-danger.active:hover,.runestone-sphinx button.list-group-item-danger.active,.runestone-sphinx button.list-group-item-danger.active:focus,.runestone-sphinx button.list-group-item-danger.active:hover{background-color:#a94442;border-color:#a94442;color:#fff}.ptx-runestone-container .list-group-item-heading,.runestone-sphinx .list-group-item-heading{margin-bottom:5px;margin-top:0}.ptx-runestone-container .list-group-item-text,.runestone-sphinx .list-group-item-text{line-height:1.3;margin-bottom:0}.ptx-runestone-container .panel,.runestone-sphinx .panel{background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05);margin-bottom:20px}.ptx-runestone-container .panel-body,.runestone-sphinx .panel-body{padding:15px}.ptx-runestone-container .panel-heading,.runestone-sphinx .panel-heading{border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px;padding:10px 15px}.ptx-runestone-container .panel-heading>.dropdown .dropdown-toggle,.runestone-sphinx .panel-heading>.dropdown .dropdown-toggle{color:inherit}.ptx-runestone-container .panel-title,.runestone-sphinx .panel-title{color:inherit;font-size:16px;margin-bottom:0;margin-top:0}.ptx-runestone-container .panel-title>.small,.ptx-runestone-container .panel-title>.small>a,.ptx-runestone-container .panel-title>a,.ptx-runestone-container .panel-title>small,.ptx-runestone-container .panel-title>small>a,.runestone-sphinx .panel-title>.small,.runestone-sphinx .panel-title>.small>a,.runestone-sphinx .panel-title>a,.runestone-sphinx .panel-title>small,.runestone-sphinx .panel-title>small>a{color:inherit}.ptx-runestone-container .panel-footer,.runestone-sphinx .panel-footer{background-color:#f5f5f5;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #ddd;padding:10px 15px}.ptx-runestone-container .panel>.list-group,.ptx-runestone-container .panel>.panel-collapse>.list-group,.runestone-sphinx .panel>.list-group,.runestone-sphinx .panel>.panel-collapse>.list-group{margin-bottom:0}.ptx-runestone-container .panel>.list-group .list-group-item,.ptx-runestone-container .panel>.panel-collapse>.list-group .list-group-item,.runestone-sphinx .panel>.list-group .list-group-item,.runestone-sphinx .panel>.panel-collapse>.list-group .list-group-item{border-radius:0;border-width:1px 0}.ptx-runestone-container .panel>.list-group:first-child .list-group-item:first-child,.ptx-runestone-container .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child,.runestone-sphinx .panel>.list-group:first-child .list-group-item:first-child,.runestone-sphinx .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.ptx-runestone-container .panel>.list-group:last-child .list-group-item:last-child,.ptx-runestone-container .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child,.runestone-sphinx .panel>.list-group:last-child .list-group-item:last-child,.runestone-sphinx .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.ptx-runestone-container .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child,.runestone-sphinx .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.ptx-runestone-container .list-group+.panel-footer,.ptx-runestone-container .panel-heading+.list-group .list-group-item:first-child,.runestone-sphinx .list-group+.panel-footer,.runestone-sphinx .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.ptx-runestone-container .panel>.panel-collapse>.table,.ptx-runestone-container .panel>.table,.ptx-runestone-container .panel>.table-responsive>.table,.runestone-sphinx .panel>.panel-collapse>.table,.runestone-sphinx .panel>.table,.runestone-sphinx .panel>.table-responsive>.table{margin-bottom:0}.ptx-runestone-container .panel>.panel-collapse>.table caption,.ptx-runestone-container .panel>.table caption,.ptx-runestone-container .panel>.table-responsive>.table caption,.runestone-sphinx .panel>.panel-collapse>.table caption,.runestone-sphinx .panel>.table caption,.runestone-sphinx .panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.ptx-runestone-container .panel>.table:first-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.runestone-sphinx .panel>.table:first-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.ptx-runestone-container .panel>.table:last-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.runestone-sphinx .panel>.table:last-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.ptx-runestone-container .panel>.panel-body+.table,.ptx-runestone-container .panel>.panel-body+.table-responsive,.ptx-runestone-container .panel>.table+.panel-body,.ptx-runestone-container .panel>.table-responsive+.panel-body,.runestone-sphinx .panel>.panel-body+.table,.runestone-sphinx .panel>.panel-body+.table-responsive,.runestone-sphinx .panel>.table+.panel-body,.runestone-sphinx .panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.ptx-runestone-container .panel>.table>tbody:first-child>tr:first-child td,.ptx-runestone-container .panel>.table>tbody:first-child>tr:first-child th,.runestone-sphinx .panel>.table>tbody:first-child>tr:first-child td,.runestone-sphinx .panel>.table>tbody:first-child>tr:first-child th{border-top:0}.ptx-runestone-container .panel>.table-bordered,.ptx-runestone-container .panel>.table-responsive>.table-bordered,.runestone-sphinx .panel>.table-bordered,.runestone-sphinx .panel>.table-responsive>.table-bordered{border:0}.ptx-runestone-container .panel>.table-bordered>tbody>tr>td:first-child,.ptx-runestone-container .panel>.table-bordered>tbody>tr>th:first-child,.ptx-runestone-container .panel>.table-bordered>tfoot>tr>td:first-child,.ptx-runestone-container .panel>.table-bordered>tfoot>tr>th:first-child,.ptx-runestone-container .panel>.table-bordered>thead>tr>td:first-child,.ptx-runestone-container .panel>.table-bordered>thead>tr>th:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.runestone-sphinx .panel>.table-bordered>tbody>tr>td:first-child,.runestone-sphinx .panel>.table-bordered>tbody>tr>th:first-child,.runestone-sphinx .panel>.table-bordered>tfoot>tr>td:first-child,.runestone-sphinx .panel>.table-bordered>tfoot>tr>th:first-child,.runestone-sphinx .panel>.table-bordered>thead>tr>td:first-child,.runestone-sphinx .panel>.table-bordered>thead>tr>th:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.ptx-runestone-container .panel>.table-bordered>tbody>tr>td:last-child,.ptx-runestone-container .panel>.table-bordered>tbody>tr>th:last-child,.ptx-runestone-container .panel>.table-bordered>tfoot>tr>td:last-child,.ptx-runestone-container .panel>.table-bordered>tfoot>tr>th:last-child,.ptx-runestone-container .panel>.table-bordered>thead>tr>td:last-child,.ptx-runestone-container .panel>.table-bordered>thead>tr>th:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.runestone-sphinx .panel>.table-bordered>tbody>tr>td:last-child,.runestone-sphinx .panel>.table-bordered>tbody>tr>th:last-child,.runestone-sphinx .panel>.table-bordered>tfoot>tr>td:last-child,.runestone-sphinx .panel>.table-bordered>tfoot>tr>th:last-child,.runestone-sphinx .panel>.table-bordered>thead>tr>td:last-child,.runestone-sphinx .panel>.table-bordered>thead>tr>th:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.ptx-runestone-container .panel>.table-bordered>tbody>tr:first-child>td,.ptx-runestone-container .panel>.table-bordered>tbody>tr:first-child>th,.ptx-runestone-container .panel>.table-bordered>tbody>tr:last-child>td,.ptx-runestone-container .panel>.table-bordered>tbody>tr:last-child>th,.ptx-runestone-container .panel>.table-bordered>tfoot>tr:last-child>td,.ptx-runestone-container .panel>.table-bordered>tfoot>tr:last-child>th,.ptx-runestone-container .panel>.table-bordered>thead>tr:first-child>td,.ptx-runestone-container .panel>.table-bordered>thead>tr:first-child>th,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.runestone-sphinx .panel>.table-bordered>tbody>tr:first-child>td,.runestone-sphinx .panel>.table-bordered>tbody>tr:first-child>th,.runestone-sphinx .panel>.table-bordered>tbody>tr:last-child>td,.runestone-sphinx .panel>.table-bordered>tbody>tr:last-child>th,.runestone-sphinx .panel>.table-bordered>tfoot>tr:last-child>td,.runestone-sphinx .panel>.table-bordered>tfoot>tr:last-child>th,.runestone-sphinx .panel>.table-bordered>thead>tr:first-child>td,.runestone-sphinx .panel>.table-bordered>thead>tr:first-child>th,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.ptx-runestone-container .panel>.table-responsive,.runestone-sphinx .panel>.table-responsive{border:0;margin-bottom:0}.ptx-runestone-container .panel-group,.runestone-sphinx .panel-group{margin-bottom:20px}.ptx-runestone-container .panel-group .panel,.runestone-sphinx .panel-group .panel{border-radius:4px;margin-bottom:0}.ptx-runestone-container .panel-group .panel+.panel,.runestone-sphinx .panel-group .panel+.panel{margin-top:5px}.ptx-runestone-container .panel-group .panel-heading,.runestone-sphinx .panel-group .panel-heading{border-bottom:0}.ptx-runestone-container .panel-group .panel-heading+.panel-collapse>.list-group,.ptx-runestone-container .panel-group .panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-group .panel-heading+.panel-collapse>.list-group,.runestone-sphinx .panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.ptx-runestone-container .panel-group .panel-footer,.runestone-sphinx .panel-group .panel-footer{border-top:0}.ptx-runestone-container .panel-group .panel-footer+.panel-collapse .panel-body,.runestone-sphinx .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.ptx-runestone-container .panel-default,.runestone-sphinx .panel-default{border-color:#ddd}.ptx-runestone-container .panel-default>.panel-heading,.runestone-sphinx .panel-default>.panel-heading{background-color:#f5f5f5;border-color:#ddd;color:#333}.ptx-runestone-container .panel-default>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.ptx-runestone-container .panel-default>.panel-heading .badge,.runestone-sphinx .panel-default>.panel-heading .badge{background-color:#333;color:#f5f5f5}.ptx-runestone-container .panel-default>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.ptx-runestone-container .panel-primary,.runestone-sphinx .panel-primary{border-color:#337ab7}.ptx-runestone-container .panel-primary>.panel-heading,.runestone-sphinx .panel-primary>.panel-heading{background-color:#337ab7;border-color:#337ab7;color:#fff}.ptx-runestone-container .panel-primary>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.ptx-runestone-container .panel-primary>.panel-heading .badge,.runestone-sphinx .panel-primary>.panel-heading .badge{background-color:#fff;color:#337ab7}.ptx-runestone-container .panel-primary>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.ptx-runestone-container .panel-success,.runestone-sphinx .panel-success{border-color:#d6e9c6}.ptx-runestone-container .panel-success>.panel-heading,.runestone-sphinx .panel-success>.panel-heading{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.ptx-runestone-container .panel-success>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.ptx-runestone-container .panel-success>.panel-heading .badge,.runestone-sphinx .panel-success>.panel-heading .badge{background-color:#3c763d;color:#dff0d8}.ptx-runestone-container .panel-success>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.ptx-runestone-container .panel-info,.runestone-sphinx .panel-info{border-color:#bce8f1}.ptx-runestone-container .panel-info>.panel-heading,.runestone-sphinx .panel-info>.panel-heading{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.ptx-runestone-container .panel-info>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.ptx-runestone-container .panel-info>.panel-heading .badge,.runestone-sphinx .panel-info>.panel-heading .badge{background-color:#31708f;color:#d9edf7}.ptx-runestone-container .panel-info>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.ptx-runestone-container .panel-warning,.runestone-sphinx .panel-warning{border-color:#faebcc}.ptx-runestone-container .panel-warning>.panel-heading,.runestone-sphinx .panel-warning>.panel-heading{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.ptx-runestone-container .panel-warning>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.ptx-runestone-container .panel-warning>.panel-heading .badge,.runestone-sphinx .panel-warning>.panel-heading .badge{background-color:#8a6d3b;color:#fcf8e3}.ptx-runestone-container .panel-warning>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.ptx-runestone-container .panel-danger,.runestone-sphinx .panel-danger{border-color:#ebccd1}.ptx-runestone-container .panel-danger>.panel-heading,.runestone-sphinx .panel-danger>.panel-heading{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.ptx-runestone-container .panel-danger>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.ptx-runestone-container .panel-danger>.panel-heading .badge,.runestone-sphinx .panel-danger>.panel-heading .badge{background-color:#a94442;color:#f2dede}.ptx-runestone-container .panel-danger>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.ptx-runestone-container .embed-responsive,.runestone-sphinx .embed-responsive{display:block;height:0;overflow:hidden;padding:0;position:relative}.ptx-runestone-container .embed-responsive .embed-responsive-item,.ptx-runestone-container .embed-responsive embed,.ptx-runestone-container .embed-responsive iframe,.ptx-runestone-container .embed-responsive object,.ptx-runestone-container .embed-responsive video,.runestone-sphinx .embed-responsive .embed-responsive-item,.runestone-sphinx .embed-responsive embed,.runestone-sphinx .embed-responsive iframe,.runestone-sphinx .embed-responsive object,.runestone-sphinx .embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.ptx-runestone-container .embed-responsive-16by9,.runestone-sphinx .embed-responsive-16by9{padding-bottom:56.25%}.ptx-runestone-container .embed-responsive-4by3,.runestone-sphinx .embed-responsive-4by3{padding-bottom:75%}.ptx-runestone-container .well,.runestone-sphinx .well{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);margin-bottom:20px;min-height:20px;padding:19px}.ptx-runestone-container .well blockquote,.runestone-sphinx .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.ptx-runestone-container .well-lg,.runestone-sphinx .well-lg{border-radius:6px;padding:24px}.ptx-runestone-container .well-sm,.runestone-sphinx .well-sm{border-radius:3px;padding:9px}.ptx-runestone-container .close,.runestone-sphinx .close{color:#000;filter:alpha(opacity=20);float:right;font-size:21px;font-weight:700;line-height:1;opacity:.2;text-shadow:0 1px 0 #fff}.ptx-runestone-container .close:focus,.ptx-runestone-container .close:hover,.runestone-sphinx .close:focus,.runestone-sphinx .close:hover{color:#000;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}.ptx-runestone-container button.close,.runestone-sphinx button.close{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;cursor:pointer;padding:0}.ptx-runestone-container .modal-open,.runestone-sphinx .modal-open{overflow:hidden}.ptx-runestone-container .modal,.runestone-sphinx .modal{-webkit-overflow-scrolling:touch;bottom:0;display:none;left:0;outline:0;overflow:hidden;position:fixed;right:0;top:0;z-index:1050}.ptx-runestone-container .modal.fade .modal-dialog,.runestone-sphinx .modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out}.ptx-runestone-container .modal.in .modal-dialog,.runestone-sphinx .modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.ptx-runestone-container .modal-open .modal,.runestone-sphinx .modal-open .modal{overflow-x:hidden;overflow-y:auto}.ptx-runestone-container .modal-dialog,.runestone-sphinx .modal-dialog{margin:10px;position:relative;width:auto}.ptx-runestone-container .modal-content,.runestone-sphinx .modal-content{background-clip:padding-box;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0;position:relative}.ptx-runestone-container .modal-backdrop,.runestone-sphinx .modal-backdrop{background-color:#000;bottom:0;left:0;position:fixed;right:0;top:0;z-index:1040}.ptx-runestone-container .modal-backdrop.fade,.runestone-sphinx .modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.ptx-runestone-container .modal-backdrop.in,.runestone-sphinx .modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.ptx-runestone-container .modal-header,.runestone-sphinx .modal-header{border-bottom:1px solid #e5e5e5;padding:15px}.ptx-runestone-container .modal-header .close,.runestone-sphinx .modal-header .close{margin-top:-2px}.ptx-runestone-container .modal-title,.runestone-sphinx .modal-title{line-height:1.42857143;margin:0}.ptx-runestone-container .modal-body,.runestone-sphinx .modal-body{padding:15px;position:relative}.ptx-runestone-container .modal-footer,.runestone-sphinx .modal-footer{border-top:1px solid #e5e5e5;padding:15px;text-align:right}.ptx-runestone-container .modal-footer .btn+.btn,.runestone-sphinx .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.ptx-runestone-container .modal-footer .btn-group .btn+.btn,.runestone-sphinx .modal-footer .btn-group .btn+.btn{margin-left:-1px}.ptx-runestone-container .modal-footer .btn-block+.btn-block,.runestone-sphinx .modal-footer .btn-block+.btn-block{margin-left:0}.ptx-runestone-container .modal-scrollbar-measure,.runestone-sphinx .modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:768px){.ptx-runestone-container .modal-dialog,.runestone-sphinx .modal-dialog{margin:30px auto;width:600px}.ptx-runestone-container .modal-content,.runestone-sphinx .modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.ptx-runestone-container .modal-sm,.runestone-sphinx .modal-sm{width:300px}}@media (min-width:992px){.ptx-runestone-container .modal-lg,.runestone-sphinx .modal-lg{width:900px}}.ptx-runestone-container .tooltip,.runestone-sphinx .tooltip{word-wrap:normal;display:block;filter:alpha(opacity=0);font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1070}.ptx-runestone-container .tooltip.in,.runestone-sphinx .tooltip.in{filter:alpha(opacity=90);opacity:.9}.ptx-runestone-container .tooltip.top,.runestone-sphinx .tooltip.top{margin-top:-3px;padding:5px 0}.ptx-runestone-container .tooltip.right,.runestone-sphinx .tooltip.right{margin-left:3px;padding:0 5px}.ptx-runestone-container .tooltip.bottom,.runestone-sphinx .tooltip.bottom{margin-top:3px;padding:5px 0}.ptx-runestone-container .tooltip.left,.runestone-sphinx .tooltip.left{margin-left:-3px;padding:0 5px}.ptx-runestone-container .tooltip.top .tooltip-arrow,.runestone-sphinx .tooltip.top .tooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:50%;margin-left:-5px}.ptx-runestone-container .tooltip.top-left .tooltip-arrow,.runestone-sphinx .tooltip.top-left .tooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;margin-bottom:-5px;right:5px}.ptx-runestone-container .tooltip.top-right .tooltip-arrow,.runestone-sphinx .tooltip.top-right .tooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:5px;margin-bottom:-5px}.ptx-runestone-container .tooltip.right .tooltip-arrow,.runestone-sphinx .tooltip.right .tooltip-arrow{border-right-color:#000;border-width:5px 5px 5px 0;left:0;margin-top:-5px;top:50%}.ptx-runestone-container .tooltip.left .tooltip-arrow,.runestone-sphinx .tooltip.left .tooltip-arrow{border-left-color:#000;border-width:5px 0 5px 5px;margin-top:-5px;right:0;top:50%}.ptx-runestone-container .tooltip.bottom .tooltip-arrow,.runestone-sphinx .tooltip.bottom .tooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:50%;margin-left:-5px;top:0}.ptx-runestone-container .tooltip.bottom-left .tooltip-arrow,.runestone-sphinx .tooltip.bottom-left .tooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;margin-top:-5px;right:5px;top:0}.ptx-runestone-container .tooltip.bottom-right .tooltip-arrow,.runestone-sphinx .tooltip.bottom-right .tooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:5px;margin-top:-5px;top:0}.ptx-runestone-container .tooltip-inner,.runestone-sphinx .tooltip-inner{background-color:#000;border-radius:4px;color:#fff;max-width:200px;padding:3px 8px;text-align:center}.ptx-runestone-container .tooltip-arrow,.runestone-sphinx .tooltip-arrow{border-color:transparent;border-style:solid;height:0;position:absolute;width:0}.ptx-runestone-container .popover,.runestone-sphinx .popover{word-wrap:normal;background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.42857143;max-width:276px;padding:1px;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1060}.ptx-runestone-container .popover.top,.runestone-sphinx .popover.top{margin-top:-10px}.ptx-runestone-container .popover.right,.runestone-sphinx .popover.right{margin-left:10px}.ptx-runestone-container .popover.bottom,.runestone-sphinx .popover.bottom{margin-top:10px}.ptx-runestone-container .popover.left,.runestone-sphinx .popover.left{margin-left:-10px}.ptx-runestone-container .popover>.arrow,.runestone-sphinx .popover>.arrow{border-width:11px}.ptx-runestone-container .popover>.arrow,.ptx-runestone-container .popover>.arrow:after,.runestone-sphinx .popover>.arrow,.runestone-sphinx .popover>.arrow:after{border-color:transparent;border-style:solid;display:block;height:0;position:absolute;width:0}.ptx-runestone-container .popover>.arrow:after,.runestone-sphinx .popover>.arrow:after{border-width:10px;content:""}.ptx-runestone-container .popover.top>.arrow,.runestone-sphinx .popover.top>.arrow{border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px;left:50%;margin-left:-11px}.ptx-runestone-container .popover.top>.arrow:after,.runestone-sphinx .popover.top>.arrow:after{border-bottom-width:0;border-top-color:#fff;bottom:1px;content:" ";margin-left:-10px}.ptx-runestone-container .popover.right>.arrow,.runestone-sphinx .popover.right>.arrow{border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25);left:-11px;margin-top:-11px;top:50%}.ptx-runestone-container .popover.right>.arrow:after,.runestone-sphinx .popover.right>.arrow:after{border-left-width:0;border-right-color:#fff;bottom:-10px;content:" ";left:1px}.ptx-runestone-container .popover.bottom>.arrow,.runestone-sphinx .popover.bottom>.arrow{border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);border-top-width:0;left:50%;margin-left:-11px;top:-11px}.ptx-runestone-container .popover.bottom>.arrow:after,.runestone-sphinx .popover.bottom>.arrow:after{border-bottom-color:#fff;border-top-width:0;content:" ";margin-left:-10px;top:1px}.ptx-runestone-container .popover.left>.arrow,.runestone-sphinx .popover.left>.arrow{border-left-color:#999;border-left-color:rgba(0,0,0,.25);border-right-width:0;margin-top:-11px;right:-11px;top:50%}.ptx-runestone-container .popover.left>.arrow:after,.runestone-sphinx .popover.left>.arrow:after{border-left-color:#fff;border-right-width:0;bottom:-10px;content:" ";right:1px}.ptx-runestone-container .popover-title,.runestone-sphinx .popover-title{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0;font-size:14px;margin:0;padding:8px 14px}.ptx-runestone-container .popover-content,.runestone-sphinx .popover-content{padding:9px 14px}.ptx-runestone-container .carousel,.runestone-sphinx .carousel{position:relative}.ptx-runestone-container .carousel-inner,.runestone-sphinx .carousel-inner{overflow:hidden;position:relative;width:100%}.ptx-runestone-container .carousel-inner>.item,.runestone-sphinx .carousel-inner>.item{display:none;position:relative;-webkit-transition:left .6s ease-in-out;-o-transition:left .6s ease-in-out;transition:left .6s ease-in-out}.ptx-runestone-container .carousel-inner>.item>a>img,.ptx-runestone-container .carousel-inner>.item>img,.runestone-sphinx .carousel-inner>.item>a>img,.runestone-sphinx .carousel-inner>.item>img{line-height:1}@media (-webkit-transform-3d),(transform-3d){.ptx-runestone-container .carousel-inner>.item,.runestone-sphinx .carousel-inner>.item{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px;-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out}.ptx-runestone-container .carousel-inner>.item.active.right,.ptx-runestone-container .carousel-inner>.item.next,.runestone-sphinx .carousel-inner>.item.active.right,.runestone-sphinx .carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.ptx-runestone-container .carousel-inner>.item.active.left,.ptx-runestone-container .carousel-inner>.item.prev,.runestone-sphinx .carousel-inner>.item.active.left,.runestone-sphinx .carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.ptx-runestone-container .carousel-inner>.item.active,.ptx-runestone-container .carousel-inner>.item.next.left,.ptx-runestone-container .carousel-inner>.item.prev.right,.runestone-sphinx .carousel-inner>.item.active,.runestone-sphinx .carousel-inner>.item.next.left,.runestone-sphinx .carousel-inner>.item.prev.right{left:0;-webkit-transform:translateZ(0);transform:translateZ(0)}}.ptx-runestone-container .carousel-inner>.active,.ptx-runestone-container .carousel-inner>.next,.ptx-runestone-container .carousel-inner>.prev,.runestone-sphinx .carousel-inner>.active,.runestone-sphinx .carousel-inner>.next,.runestone-sphinx .carousel-inner>.prev{display:block}.ptx-runestone-container .carousel-inner>.active,.runestone-sphinx .carousel-inner>.active{left:0}.ptx-runestone-container .carousel-inner>.next,.ptx-runestone-container .carousel-inner>.prev,.runestone-sphinx .carousel-inner>.next,.runestone-sphinx .carousel-inner>.prev{position:absolute;top:0;width:100%}.ptx-runestone-container .carousel-inner>.next,.runestone-sphinx .carousel-inner>.next{left:100%}.ptx-runestone-container .carousel-inner>.prev,.runestone-sphinx .carousel-inner>.prev{left:-100%}.ptx-runestone-container .carousel-inner>.next.left,.ptx-runestone-container .carousel-inner>.prev.right,.runestone-sphinx .carousel-inner>.next.left,.runestone-sphinx .carousel-inner>.prev.right{left:0}.ptx-runestone-container .carousel-inner>.active.left,.runestone-sphinx .carousel-inner>.active.left{left:-100%}.ptx-runestone-container .carousel-inner>.active.right,.runestone-sphinx .carousel-inner>.active.right{left:100%}.ptx-runestone-container .carousel-control,.runestone-sphinx .carousel-control{background-color:transparent;bottom:0;color:#fff;filter:alpha(opacity=50);font-size:20px;left:0;opacity:.5;position:absolute;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);top:0;width:15%}.ptx-runestone-container .carousel-control.left,.runestone-sphinx .carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,transparent 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(90deg,rgba(0,0,0,.5) 0,transparent);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000",endColorstr="#00000000",GradientType=1)}.ptx-runestone-container .carousel-control.right,.runestone-sphinx .carousel-control.right{background-image:-webkit-linear-gradient(left,transparent,rgba(0,0,0,.5));background-image:-o-linear-gradient(left,transparent 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(transparent),to(rgba(0,0,0,.5)));background-image:linear-gradient(90deg,transparent 0,rgba(0,0,0,.5));background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000",endColorstr="#80000000",GradientType=1);left:auto;right:0}.ptx-runestone-container .carousel-control:focus,.ptx-runestone-container .carousel-control:hover,.runestone-sphinx .carousel-control:focus,.runestone-sphinx .carousel-control:hover{color:#fff;filter:alpha(opacity=90);opacity:.9;outline:0;text-decoration:none}.ptx-runestone-container .carousel-control .glyphicon-chevron-left,.ptx-runestone-container .carousel-control .glyphicon-chevron-right,.ptx-runestone-container .carousel-control .icon-next,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .glyphicon-chevron-left,.runestone-sphinx .carousel-control .glyphicon-chevron-right,.runestone-sphinx .carousel-control .icon-next,.runestone-sphinx .carousel-control .icon-prev{display:inline-block;margin-top:-10px;position:absolute;top:50%;z-index:5}.ptx-runestone-container .carousel-control .glyphicon-chevron-left,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .glyphicon-chevron-left,.runestone-sphinx .carousel-control .icon-prev{left:50%;margin-left:-10px}.ptx-runestone-container .carousel-control .glyphicon-chevron-right,.ptx-runestone-container .carousel-control .icon-next,.runestone-sphinx .carousel-control .glyphicon-chevron-right,.runestone-sphinx .carousel-control .icon-next{margin-right:-10px;right:50%}.ptx-runestone-container .carousel-control .icon-next,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .icon-next,.runestone-sphinx .carousel-control .icon-prev{font-family:serif;height:20px;line-height:1;width:20px}.ptx-runestone-container .carousel-control .icon-prev:before,.runestone-sphinx .carousel-control .icon-prev:before{content:"\2039"}.ptx-runestone-container .carousel-control .icon-next:before,.runestone-sphinx .carousel-control .icon-next:before{content:"\203a"}.ptx-runestone-container .carousel-indicators,.runestone-sphinx .carousel-indicators{bottom:10px;left:50%;list-style:none;margin-left:-30%;padding-left:0;position:absolute;text-align:center;width:60%;z-index:15}.ptx-runestone-container .carousel-indicators li,.runestone-sphinx .carousel-indicators li{background-color:#000\9;background-color:transparent;border:1px solid #fff;border-radius:10px;cursor:pointer;display:inline-block;height:10px;margin:1px;text-indent:-999px;width:10px}.ptx-runestone-container .carousel-indicators .active,.runestone-sphinx .carousel-indicators .active{background-color:#fff;height:12px;margin:0;width:12px}.ptx-runestone-container .carousel-caption,.runestone-sphinx .carousel-caption{bottom:20px;color:#fff;left:15%;padding-bottom:20px;padding-top:20px;position:absolute;right:15%;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);z-index:10}.ptx-runestone-container .carousel-caption .btn,.runestone-sphinx .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.ptx-runestone-container .carousel-control .glyphicon-chevron-left,.ptx-runestone-container .carousel-control .glyphicon-chevron-right,.ptx-runestone-container .carousel-control .icon-next,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .glyphicon-chevron-left,.runestone-sphinx .carousel-control .glyphicon-chevron-right,.runestone-sphinx .carousel-control .icon-next,.runestone-sphinx .carousel-control .icon-prev{font-size:30px;height:30px;margin-top:-10px;width:30px}.ptx-runestone-container .carousel-control .glyphicon-chevron-left,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .glyphicon-chevron-left,.runestone-sphinx .carousel-control .icon-prev{margin-left:-10px}.ptx-runestone-container .carousel-control .glyphicon-chevron-right,.ptx-runestone-container .carousel-control .icon-next,.runestone-sphinx .carousel-control .glyphicon-chevron-right,.runestone-sphinx .carousel-control .icon-next{margin-right:-10px}.ptx-runestone-container .carousel-caption,.runestone-sphinx .carousel-caption{left:20%;padding-bottom:30px;right:20%}.ptx-runestone-container .carousel-indicators,.runestone-sphinx .carousel-indicators{bottom:20px}}.ptx-runestone-container .btn-group-vertical>.btn-group:after,.ptx-runestone-container .btn-group-vertical>.btn-group:before,.ptx-runestone-container .btn-toolbar:after,.ptx-runestone-container .btn-toolbar:before,.ptx-runestone-container .clearfix:after,.ptx-runestone-container .clearfix:before,.ptx-runestone-container .container-fluid:after,.ptx-runestone-container .container-fluid:before,.ptx-runestone-container .container:after,.ptx-runestone-container .container:before,.ptx-runestone-container .dl-horizontal dd:after,.ptx-runestone-container .dl-horizontal dd:before,.ptx-runestone-container .form-horizontal .form-group:after,.ptx-runestone-container .form-horizontal .form-group:before,.ptx-runestone-container .modal-footer:after,.ptx-runestone-container .modal-footer:before,.ptx-runestone-container .modal-header:after,.ptx-runestone-container .modal-header:before,.ptx-runestone-container .nav:after,.ptx-runestone-container .nav:before,.ptx-runestone-container .navbar-collapse:after,.ptx-runestone-container .navbar-collapse:before,.ptx-runestone-container .navbar-header:after,.ptx-runestone-container .navbar-header:before,.ptx-runestone-container .navbar:after,.ptx-runestone-container .navbar:before,.ptx-runestone-container .pager:after,.ptx-runestone-container .pager:before,.ptx-runestone-container .panel-body:after,.ptx-runestone-container .panel-body:before,.ptx-runestone-container .row:after,.ptx-runestone-container .row:before,.runestone-sphinx .btn-group-vertical>.btn-group:after,.runestone-sphinx .btn-group-vertical>.btn-group:before,.runestone-sphinx .btn-toolbar:after,.runestone-sphinx .btn-toolbar:before,.runestone-sphinx .clearfix:after,.runestone-sphinx .clearfix:before,.runestone-sphinx .container-fluid:after,.runestone-sphinx .container-fluid:before,.runestone-sphinx .container:after,.runestone-sphinx .container:before,.runestone-sphinx .dl-horizontal dd:after,.runestone-sphinx .dl-horizontal dd:before,.runestone-sphinx .form-horizontal .form-group:after,.runestone-sphinx .form-horizontal .form-group:before,.runestone-sphinx .modal-footer:after,.runestone-sphinx .modal-footer:before,.runestone-sphinx .modal-header:after,.runestone-sphinx .modal-header:before,.runestone-sphinx .nav:after,.runestone-sphinx .nav:before,.runestone-sphinx .navbar-collapse:after,.runestone-sphinx .navbar-collapse:before,.runestone-sphinx .navbar-header:after,.runestone-sphinx .navbar-header:before,.runestone-sphinx .navbar:after,.runestone-sphinx .navbar:before,.runestone-sphinx .pager:after,.runestone-sphinx .pager:before,.runestone-sphinx .panel-body:after,.runestone-sphinx .panel-body:before,.runestone-sphinx .row:after,.runestone-sphinx .row:before{content:" ";display:table}.ptx-runestone-container .btn-group-vertical>.btn-group:after,.ptx-runestone-container .btn-toolbar:after,.ptx-runestone-container .clearfix:after,.ptx-runestone-container .container-fluid:after,.ptx-runestone-container .container:after,.ptx-runestone-container .dl-horizontal dd:after,.ptx-runestone-container .form-horizontal .form-group:after,.ptx-runestone-container .modal-footer:after,.ptx-runestone-container .modal-header:after,.ptx-runestone-container .nav:after,.ptx-runestone-container .navbar-collapse:after,.ptx-runestone-container .navbar-header:after,.ptx-runestone-container .navbar:after,.ptx-runestone-container .pager:after,.ptx-runestone-container .panel-body:after,.ptx-runestone-container .row:after,.runestone-sphinx .btn-group-vertical>.btn-group:after,.runestone-sphinx .btn-toolbar:after,.runestone-sphinx .clearfix:after,.runestone-sphinx .container-fluid:after,.runestone-sphinx .container:after,.runestone-sphinx .dl-horizontal dd:after,.runestone-sphinx .form-horizontal .form-group:after,.runestone-sphinx .modal-footer:after,.runestone-sphinx .modal-header:after,.runestone-sphinx .nav:after,.runestone-sphinx .navbar-collapse:after,.runestone-sphinx .navbar-header:after,.runestone-sphinx .navbar:after,.runestone-sphinx .pager:after,.runestone-sphinx .panel-body:after,.runestone-sphinx .row:after{clear:both}.ptx-runestone-container .center-block,.runestone-sphinx .center-block{display:block;margin-left:auto;margin-right:auto}.ptx-runestone-container .pull-right,.runestone-sphinx .pull-right{float:right!important}.ptx-runestone-container .pull-left,.runestone-sphinx .pull-left{float:left!important}.ptx-runestone-container .hide,.runestone-sphinx .hide{display:none!important}.ptx-runestone-container .show,.runestone-sphinx .show{display:block!important}.ptx-runestone-container .invisible,.runestone-sphinx .invisible{visibility:hidden}.ptx-runestone-container .text-hide,.runestone-sphinx .text-hide{background-color:transparent;border:0;color:transparent;font:0/0 a;text-shadow:none}.ptx-runestone-container .hidden,.runestone-sphinx .hidden{display:none!important}.ptx-runestone-container .affix,.runestone-sphinx .affix{position:fixed}@-ms-viewport{width:device-width}.ptx-runestone-container .visible-lg,.ptx-runestone-container .visible-lg-block,.ptx-runestone-container .visible-lg-inline,.ptx-runestone-container .visible-lg-inline-block,.ptx-runestone-container .visible-md,.ptx-runestone-container .visible-md-block,.ptx-runestone-container .visible-md-inline,.ptx-runestone-container .visible-md-inline-block,.ptx-runestone-container .visible-sm,.ptx-runestone-container .visible-sm-block,.ptx-runestone-container .visible-sm-inline,.ptx-runestone-container .visible-sm-inline-block,.ptx-runestone-container .visible-xs,.ptx-runestone-container .visible-xs-block,.ptx-runestone-container .visible-xs-inline,.ptx-runestone-container .visible-xs-inline-block,.runestone-sphinx .visible-lg,.runestone-sphinx .visible-lg-block,.runestone-sphinx .visible-lg-inline,.runestone-sphinx .visible-lg-inline-block,.runestone-sphinx .visible-md,.runestone-sphinx .visible-md-block,.runestone-sphinx .visible-md-inline,.runestone-sphinx .visible-md-inline-block,.runestone-sphinx .visible-sm,.runestone-sphinx .visible-sm-block,.runestone-sphinx .visible-sm-inline,.runestone-sphinx .visible-sm-inline-block,.runestone-sphinx .visible-xs,.runestone-sphinx .visible-xs-block,.runestone-sphinx .visible-xs-inline,.runestone-sphinx .visible-xs-inline-block{display:none!important}@media (max-width:767px){.ptx-runestone-container .visible-xs,.runestone-sphinx .visible-xs{display:block!important}.ptx-runestone-container table.visible-xs,.runestone-sphinx table.visible-xs{display:table!important}.ptx-runestone-container tr.visible-xs,.runestone-sphinx tr.visible-xs{display:table-row!important}.ptx-runestone-container td.visible-xs,.ptx-runestone-container th.visible-xs,.runestone-sphinx td.visible-xs,.runestone-sphinx th.visible-xs{display:table-cell!important}.ptx-runestone-container .visible-xs-block,.runestone-sphinx .visible-xs-block{display:block!important}.ptx-runestone-container .visible-xs-inline,.runestone-sphinx .visible-xs-inline{display:inline!important}.ptx-runestone-container .visible-xs-inline-block,.runestone-sphinx .visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.ptx-runestone-container .visible-sm,.runestone-sphinx .visible-sm{display:block!important}.ptx-runestone-container table.visible-sm,.runestone-sphinx table.visible-sm{display:table!important}.ptx-runestone-container tr.visible-sm,.runestone-sphinx tr.visible-sm{display:table-row!important}.ptx-runestone-container td.visible-sm,.ptx-runestone-container th.visible-sm,.runestone-sphinx td.visible-sm,.runestone-sphinx th.visible-sm{display:table-cell!important}.ptx-runestone-container .visible-sm-block,.runestone-sphinx .visible-sm-block{display:block!important}.ptx-runestone-container .visible-sm-inline,.runestone-sphinx .visible-sm-inline{display:inline!important}.ptx-runestone-container .visible-sm-inline-block,.runestone-sphinx .visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.ptx-runestone-container .visible-md,.runestone-sphinx .visible-md{display:block!important}.ptx-runestone-container table.visible-md,.runestone-sphinx table.visible-md{display:table!important}.ptx-runestone-container tr.visible-md,.runestone-sphinx tr.visible-md{display:table-row!important}.ptx-runestone-container td.visible-md,.ptx-runestone-container th.visible-md,.runestone-sphinx td.visible-md,.runestone-sphinx th.visible-md{display:table-cell!important}.ptx-runestone-container .visible-md-block,.runestone-sphinx .visible-md-block{display:block!important}.ptx-runestone-container .visible-md-inline,.runestone-sphinx .visible-md-inline{display:inline!important}.ptx-runestone-container .visible-md-inline-block,.runestone-sphinx .visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.ptx-runestone-container .visible-lg,.runestone-sphinx .visible-lg{display:block!important}.ptx-runestone-container table.visible-lg,.runestone-sphinx table.visible-lg{display:table!important}.ptx-runestone-container tr.visible-lg,.runestone-sphinx tr.visible-lg{display:table-row!important}.ptx-runestone-container td.visible-lg,.ptx-runestone-container th.visible-lg,.runestone-sphinx td.visible-lg,.runestone-sphinx th.visible-lg{display:table-cell!important}.ptx-runestone-container .visible-lg-block,.runestone-sphinx .visible-lg-block{display:block!important}.ptx-runestone-container .visible-lg-inline,.runestone-sphinx .visible-lg-inline{display:inline!important}.ptx-runestone-container .visible-lg-inline-block,.runestone-sphinx .visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.ptx-runestone-container .hidden-xs,.runestone-sphinx .hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.ptx-runestone-container .hidden-sm,.runestone-sphinx .hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.ptx-runestone-container .hidden-md,.runestone-sphinx .hidden-md{display:none!important}}@media (min-width:1200px){.ptx-runestone-container .hidden-lg,.runestone-sphinx .hidden-lg{display:none!important}}.ptx-runestone-container .visible-print,.runestone-sphinx .visible-print{display:none!important}@media print{.ptx-runestone-container .visible-print,.runestone-sphinx .visible-print{display:block!important}.ptx-runestone-container table.visible-print,.runestone-sphinx table.visible-print{display:table!important}.ptx-runestone-container tr.visible-print,.runestone-sphinx tr.visible-print{display:table-row!important}.ptx-runestone-container td.visible-print,.ptx-runestone-container th.visible-print,.runestone-sphinx td.visible-print,.runestone-sphinx th.visible-print{display:table-cell!important}}.ptx-runestone-container .visible-print-block,.runestone-sphinx .visible-print-block{display:none!important}@media print{.ptx-runestone-container .visible-print-block,.runestone-sphinx .visible-print-block{display:block!important}}.ptx-runestone-container .visible-print-inline,.runestone-sphinx .visible-print-inline{display:none!important}@media print{.ptx-runestone-container .visible-print-inline,.runestone-sphinx .visible-print-inline{display:inline!important}}.ptx-runestone-container .visible-print-inline-block,.runestone-sphinx .visible-print-inline-block{display:none!important}@media print{.ptx-runestone-container .visible-print-inline-block,.runestone-sphinx .visible-print-inline-block{display:inline-block!important}.ptx-runestone-container .hidden-print,.runestone-sphinx .hidden-print{display:none!important}}.ptx-runestone-container :root,.runestone-sphinx :root{--background:#fff;--outerBackground:#eee;--links:#0645ad;--bodyFont:#000;--tooltip:#fff;--grayToWhite:#333;--navbar:#f8f8f8;--navbarFont:#707070;--navbarFontHover:#000;--alerts:#d9edf7;--completionButton:#f19711;--completionButtonHover:#ff9f19;--admonition:#fcf8e3;--admonitionBorder:#fbeed5;--codeButtons:#474949;--codeButtonsBorder:#474949;--dangerAlerts:#f2dede;--successAlerts:#dff0d8;--contentWidthRegular:660px;--contentWidthWide:1060px;--componentBgColor:#f0f8ff;--componentBorderColor:#000;--questionBgColor:#e1efff}.ptx-runestone-container [data-theme=dark],.runestone-sphinx [data-theme=dark]{--background:#2c2f33;--outerBackground:#23272a;--links:#7289da;--bodyFont:#99aab5;--tooltip:#000;--grayToWhite:#fff;--navbar:#3d3d3d;--navbarFont:#fff;--navbarFontHover:#d6d6d6;--alerts:#714082;--completionButton:#650087;--completionButtonHover:#560073;--admonition:#3d3d3d;--admonitionBorder:#262626;--codeButtons:#7289da;--codeButtonsBorder:#fff;--dangerAlerts:#8c2626;--successAlerts:#217300;--componentBgColor:#07467d;--componentBorderColor:#939090;--questionBgColor:#17555d}.ptx-runestone-container div.assignment-nav,.runestone-sphinx div.assignment-nav{background-color:var(--componentBgColor);border-color:var(--componentBorderColor);border-style:solid;border-width:1px;padding-bottom:5px;padding-top:5px}.ptx-runestone-container td.linenos pre,.runestone-sphinx td.linenos pre{color:#6b6b6b}.ptx-runestone-container .str,.runestone-sphinx .str{color:#006b00}.ptx-runestone-container .parsons .block,.runestone-sphinx .parsons .block{background-color:#fafafa}.ptx-runestone-container .highlight .c1,.runestone-sphinx .highlight .c1{color:#376a7b}.ptx-runestone-container .highlight .nn,.runestone-sphinx .highlight .nn{color:#0f6c95}.ptx-runestone-container .highlight .gp,.runestone-sphinx .highlight .gp{color:#a14c08}.ptx-runestone-container .highlight .si,.runestone-sphinx .highlight .si{color:#3c773d}.ptx-runestone-container .highlight .nc,.runestone-sphinx .highlight .nc{color:#0b719d}.ptx-runestone-container ul.search li div.context,.runestone-sphinx ul.search li div.context{color:#6b6b6b}.ptx-runestone-container span.highlighted,.runestone-sphinx span.highlighted{color:#4d4d4d}.ptx-runestone-container .CodeMirror-linenumber,.runestone-sphinx .CodeMirror-linenumber{color:#6b6b6b}.ptx-runestone-container .alert-warning,.runestone-sphinx .alert-warning{background-color:var(--admonition);border-color:var(--admonitionBorder)}.ptx-runestone-container div.ExecutionVisualizer table#pyCodeOutput .lineNo,.runestone-sphinx div.ExecutionVisualizer table#pyCodeOutput .lineNo{color:#6b6b6b}.ptx-runestone-container body,.runestone-sphinx body{background-color:var(--outerBackground);counter-reset:rscomponent;padding-top:60px}.ptx-runestone-container h5,.runestone-sphinx h5{font-weight:700;padding:10px 0}.ptx-runestone-container #table-of-contents a,.runestone-sphinx #table-of-contents a{color:var(--links)}.ptx-runestone-container #table-of-contents a:hover,.runestone-sphinx #table-of-contents a:hover{color:var(--links);text-decoration:underline}.ptx-runestone-container #table-of-contents.section,.runestone-sphinx #table-of-contents.section{font-size:16px}.ptx-runestone-container .navbar-default,.runestone-sphinx .navbar-default{background-color:var(--navbar)}.ptx-runestone-container .navbar-default .navbar-nav>li,.ptx-runestone-container .navbar-default .navbar-nav>li>a,.runestone-sphinx .navbar-default .navbar-nav>li,.runestone-sphinx .navbar-default .navbar-nav>li>a{color:var(--navbarFont)}.ptx-runestone-container .navbar-default .navbar-nav>li>a:hover,.runestone-sphinx .navbar-default .navbar-nav>li>a:hover{color:var(--navbarFontHover)}.ptx-runestone-container .navbar-default .navbar-brand,.runestone-sphinx .navbar-default .navbar-brand{color:var(--navbarFont)}.ptx-runestone-container .toctree-wrapper,.runestone-sphinx .toctree-wrapper{font-size:16px}.ptx-runestone-container .toctree-wrapper a,.runestone-sphinx .toctree-wrapper a{color:var(--links)}.ptx-runestone-container .toctree-wrapper a:hover,.runestone-sphinx .toctree-wrapper a:hover{color:var(--links);text-decoration:underline}.ptx-runestone-container #index-and-search.section,.runestone-sphinx #index-and-search.section{font-size:16px}.ptx-runestone-container #index-and-search.section a,.runestone-sphinx #index-and-search.section a{color:var(--links)}.ptx-runestone-container #index-and-search.section a:hover,.runestone-sphinx #index-and-search.section a:hover{color:var(--links);text-decoration:underline}.ptx-runestone-container a,.runestone-sphinx a{color:var(--links)}@media (max-width:768px){.ptx-runestone-container body,.runestone-sphinx body{padding-top:0}.ptx-runestone-container .navbar-fixed-top,.runestone-sphinx .navbar-fixed-top{position:static}}@media (min-width:768px){.ptx-runestone-container .navbar .divider-vertical,.runestone-sphinx .navbar .divider-vertical{border-left:1px solid #f2f2f2;margin:0 3px}.ptx-runestone-container .navbar-fixed-top .container,.runestone-sphinx .navbar-fixed-top .container{padding:0}}.ptx-runestone-container div.container,.runestone-sphinx div.container{background-color:var(--background)}.ptx-runestone-container .container,.runestone-sphinx .container{padding-left:10px;padding-right:10px}.ptx-runestone-container .runestone,.runestone-sphinx .runestone{background-color:var(--componentBgColor);border-color:var(--componentBorderColor);border-radius:10px;border-style:solid;clear:both;margin-bottom:20px;margin-top:20px;padding:15px}.ptx-runestone-container #main-content section>:not(section),.runestone-sphinx #main-content section>:not(section){margin-left:auto;margin-right:auto;max-width:var(--contentWidthRegular)}.ptx-runestone-container #main-content section>.codelens,.ptx-runestone-container #main-content section>.jupyterlite_sphinx_iframe_container,.ptx-runestone-container #main-content section>.question,.ptx-runestone-container #main-content section>.runestone.ac_section,.ptx-runestone-container #main-content section>.runestone.codelens,.ptx-runestone-container #main-content section>.runestone.parsons-container,.ptx-runestone-container #main-content section>.runestone.parsons-problems,.ptx-runestone-container #main-content section>.timedAssessment,.ptx-runestone-container #main-content section>section,.runestone-sphinx #main-content section>.codelens,.runestone-sphinx #main-content section>.jupyterlite_sphinx_iframe_container,.runestone-sphinx #main-content section>.question,.runestone-sphinx #main-content section>.runestone.ac_section,.runestone-sphinx #main-content section>.runestone.codelens,.runestone-sphinx #main-content section>.runestone.parsons-container,.runestone-sphinx #main-content section>.runestone.parsons-problems,.runestone-sphinx #main-content section>.timedAssessment,.runestone-sphinx #main-content section>section{margin-left:auto;margin-right:auto;max-width:var(--contentWidthWide)}.ptx-runestone-container #main-content section>.full-width,.runestone-sphinx #main-content section>.full-width{max-width:var(--contentWidthWide)}.ptx-runestone-container .container section>img,.runestone-sphinx .container section>img{display:block;margin-left:auto;margin-right:auto}.ptx-runestone-container .container-fluid>.navbar-collapse,.ptx-runestone-container .container-fluid>.navbar-header,.ptx-runestone-container .container>.navbar-collapse,.ptx-runestone-container .container>.navbar-header,.runestone-sphinx .container-fluid>.navbar-collapse,.runestone-sphinx .container-fluid>.navbar-header,.runestone-sphinx .container>.navbar-collapse,.runestone-sphinx .container>.navbar-header{margin-left:0;margin-right:0}.ptx-runestone-container .navbar>.container .navbar-brand,.runestone-sphinx .navbar>.container .navbar-brand{margin-left:0}.ptx-runestone-container .navbar>.container,.runestone-sphinx .navbar>.container{background-color:var(--navbar)}.ptx-runestone-container .navbar-toggle,.runestone-sphinx .navbar-toggle{margin-right:0}.ptx-runestone-container .footer>.container,.runestone-sphinx .footer>.container{background-color:var(--outerBackground)}.ptx-runestone-container .footer>.container p>a,.runestone-sphinx .footer>.container p>a{color:var(--links)}.ptx-runestone-container .brand-logo,.runestone-sphinx .brand-logo{display:block;float:left;margin-top:4px}.ptx-runestone-container .brand-logo img,.runestone-sphinx .brand-logo img{height:40px}.ptx-runestone-container .social-menu,.runestone-sphinx .social-menu{padding:10px 10px 15px 20px;width:220px}.ptx-runestone-container .fb-like,.runestone-sphinx .fb-like{margin-top:7px}.ptx-runestone-container .fb_iframe_widget iframe,.ptx-runestone-container .fb_iframe_widget span,.runestone-sphinx .fb_iframe_widget iframe,.runestone-sphinx .fb_iframe_widget span{height:20px!important;width:82px!important}.ptx-runestone-container .twitter-follow-button,.runestone-sphinx .twitter-follow-button{margin-top:10px}.ptx-runestone-container .gittip,.runestone-sphinx .gittip{margin-top:8px}.ptx-runestone-container .gittip-button,.runestone-sphinx .gittip-button{margin-bottom:-6px}.ptx-runestone-container .dropdown-menu>li>div,.ptx-runestone-container .dropdown-menu>li>label,.ptx-runestone-container .dropdown-menu>li>span,.runestone-sphinx .dropdown-menu>li>div,.runestone-sphinx .dropdown-menu>li>label,.runestone-sphinx .dropdown-menu>li>span{clear:both;color:var(--grayToWhite);display:block;font-weight:700;line-height:20px;padding:3px 20px;white-space:nowrap}.ptx-runestone-container .dropdown-menu>li>label:focus,.ptx-runestone-container .dropdown-menu>li>label:hover,.runestone-sphinx .dropdown-menu>li>label:focus,.runestone-sphinx .dropdown-menu>li>label:hover{background-color:#f5f5f5;color:#262626;text-decoration:none}.ptx-runestone-container .dropdown-menu>li>a,.runestone-sphinx .dropdown-menu>li>a{color:var(--grayToWhite)}.ptx-runestone-container .loggedinuser,.runestone-sphinx .loggedinuser{font-weight:700}.ptx-runestone-container .CodeMirror,.runestone-sphinx .CodeMirror{background-color:var(--background);clear:both;margin:0 0 1em}.ptx-runestone-container .ac_section .CodeMirror pre,.runestone-sphinx .ac_section .CodeMirror pre{word-wrap:normal;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;-o-border-radius:0;border-radius:0;border-width:0;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:inherit;margin:0;padding:0;white-space:pre}.ptx-runestone-container btn.btn-sm,.ptx-runestone-container button.btn,.ptx-runestone-container input[type=button].btn.btn-sm,.ptx-runestone-container input[type=submit].btn.btn-sm,.runestone-sphinx btn.btn-sm,.runestone-sphinx button.btn,.runestone-sphinx input[type=button].btn.btn-sm,.runestone-sphinx input[type=submit].btn.btn-sm{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:1em}.ptx-runestone-container .dropdown-menu .input-group .input-group-btn button.btn,.runestone-sphinx .dropdown-menu .input-group .input-group-btn button.btn{font-size:14px}.ptx-runestone-container .btn,.runestone-sphinx .btn{margin:5px}.ptx-runestone-container .btn.disabled,.runestone-sphinx .btn.disabled{pointer-events:auto}.ptx-runestone-container .btn-default,.ptx-runestone-container .btn-default.disabled,.ptx-runestone-container .btn-default.disabled:hover,.ptx-runestone-container .btn-default[disabled],.ptx-runestone-container .btn-default[disabled]:hover,.runestone-sphinx .btn-default,.runestone-sphinx .btn-default.disabled,.runestone-sphinx .btn-default.disabled:hover,.runestone-sphinx .btn-default[disabled],.runestone-sphinx .btn-default[disabled]:hover{background-color:var(--codeButtons);border-color:var(codeButtonsBorder);color:#fff}.ptx-runestone-container .btn-default.active,.ptx-runestone-container .btn-default:active,.ptx-runestone-container .btn-default:focus,.ptx-runestone-container .btn-default:hover,.runestone-sphinx .btn-default.active,.runestone-sphinx .btn-default:active,.runestone-sphinx .btn-default:focus,.runestone-sphinx .btn-default:hover{background-color:#3a3c3c;border-color:#2e2f2f;color:#fff}.ptx-runestone-container input[type=checkbox],.ptx-runestone-container input[type=radio],.runestone-sphinx input[type=checkbox],.runestone-sphinx input[type=radio]{margin-right:5px}.ptx-runestone-container .tooltip,.runestone-sphinx .tooltip{z-index:2000!important}.ptx-runestone-container .tooltip.in,.runestone-sphinx .tooltip.in{filter:alpha(opacity=80);opacity:.8}.ptx-runestone-container h2,.runestone-sphinx h2{margin-top:20px}.ptx-runestone-container .alert form,.runestone-sphinx .alert form{margin-bottom:0}.ptx-runestone-container .alert,.runestone-sphinx .alert{color:var(--grayToWhite);padding:10px}.ptx-runestone-container .alert-info,.runestone-sphinx .alert-info{background-color:var(--alerts)}.ptx-runestone-container .alert-danger,.runestone-sphinx .alert-danger{background-color:var(--dangerAlerts)}.ptx-runestone-container .alert-success,.runestone-sphinx .alert-success{background-color:var(--successAlerts)}.ptx-runestone-container .unittest-results.alert-danger,.runestone-sphinx .unittest-results.alert-danger{background-color:var(--dangerAlerts)!important}.ptx-runestone-container .unittest-results.alert-success,.runestone-sphinx .unittest-results.alert-success{background-color:var(--successAlerts)!important}.ptx-runestone-container .alert label,.runestone-sphinx .alert label{font-weight:400}.ptx-runestone-container .navbar_message,.runestone-sphinx .navbar_message{font-weight:700;margin-top:15px}.ptx-runestone-container dt.label>span.brackets:not(span.brackets>a),.ptx-runestone-container dt.label>span.fn-backref:not(span.fn-backref>a),.runestone-sphinx dt.label>span.brackets:not(span.brackets>a),.runestone-sphinx dt.label>span.fn-backref:not(span.fn-backref>a){color:#000}.ptx-runestone-container .admonition,.runestone-sphinx .admonition{background-color:var(--admonition);border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;margin-bottom:20px!important;margin-top:20px!important;padding:8px 35px 8px 14px!important;text-shadow:0 1px 0 hsla(0,0%,100%,.5)}.ptx-runestone-container .admonition.caution,.runestone-sphinx .admonition.caution{background-color:#f2dede;border-color:#eed3d7;color:#a33f3e}.ptx-runestone-container .admonition.note,.ptx-runestone-container .admonition.tip,.runestone-sphinx .admonition.note,.runestone-sphinx .admonition.tip{background-color:#d9edf7;border-color:#bce8f1;color:#333}.ptx-runestone-container div.flash,.runestone-sphinx div.flash{-webkit-font-smoothing:antialiased;background-color:#000;background-image:-webkit-linear-gradient(top,#222,#000);background-image:-o-linear-gradient(top,#222,#000);background-image:-moz-linear-gradient(90deg,#222,#000);background-image:linear-gradient(top,#222,#000);background-repeat:repeat-x;border:2px solid #fff;border-radius:8px;-moz-border-radius:8px;-webkit-border-radius:8px;color:#fff;cursor:pointer;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;margin:0 0 10px 10px;opacity:.95;padding:10px;position:fixed;right:45px;top:55px;vertical-align:middle;z-index:2000}.ptx-runestone-container #web2py_user_form,.runestone-sphinx #web2py_user_form{margin-top:10px}.ptx-runestone-container #web2py_user_form form,.runestone-sphinx #web2py_user_form form{float:left;margin-right:150px;padding-top:3px}.ptx-runestone-container #web2py_user_form td,.runestone-sphinx #web2py_user_form td{padding-bottom:15px}.ptx-runestone-container #web2py_user_form td.w2p_fw,.runestone-sphinx #web2py_user_form td.w2p_fw{width:299px}.ptx-runestone-container #auth-actions,.runestone-sphinx #auth-actions{margin-top:50px}.ptx-runestone-container #sign_in_text td,.runestone-sphinx #sign_in_text td{color:#333;font-family:lucida grande,Verdana,sans-serif;font-size:17px;padding-bottom:13px}.ptx-runestone-container #auth_user_remember,.runestone-sphinx #auth_user_remember{margin-top:-20px}.ptx-runestone-container #exercises>ol>li,.ptx-runestone-container #programming-exercises>ol>li,.runestone-sphinx #exercises>ol>li,.runestone-sphinx #programming-exercises>ol>li{margin-bottom:30px}.ptx-runestone-container #exercises>ol>li:nth-child(2n),.ptx-runestone-container #programming-exercises>ol>li:nth-child(2n),.runestone-sphinx #exercises>ol>li:nth-child(2n),.runestone-sphinx #programming-exercises>ol>li:nth-child(2n){background:#faf7df;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1.2em 1.4em}.ptx-runestone-container .scratch-ac-modal,.runestone-sphinx .scratch-ac-modal{max-height:90%;overflow-y:scroll;width:90%}.ptx-runestone-container .compare-modal .progress,.runestone-sphinx .compare-modal .progress{margin-bottom:0}.ptx-runestone-container .compare-me-progress,.runestone-sphinx .compare-me-progress{width:100%}.ptx-runestone-container .compare-me-progress .progress-bar,.ptx-runestone-container .unittest-results-progress .progress-bar,.runestone-sphinx .compare-me-progress .progress-bar,.runestone-sphinx .unittest-results-progress .progress-bar{color:#333}.ptx-runestone-container .unittest-results-progress,.runestone-sphinx .unittest-results-progress{width:25%}.ptx-runestone-container .compare-modal,.runestone-sphinx .compare-modal{width:350px}.ptx-runestone-container .compare-modal table,.runestone-sphinx .compare-modal table{border-collapse:separate;border-spacing:10px 5px}.ptx-runestone-container .codelens-modal,.runestone-sphinx .codelens-modal{bottom:auto;left:auto;right:20%;top:20%}@media (max-width:768px){.ptx-runestone-container .codelens-modal,.runestone-sphinx .codelens-modal{bottom:0!important;left:0!important;right:0!important;top:0!important}}.ptx-runestone-container .codelens-modal>.modal-dialog,.runestone-sphinx .codelens-modal>.modal-dialog{width:400px}.ptx-runestone-container .footnote.table,.runestone-sphinx .footnote.table{margin-bottom:10px;width:auto}.ptx-runestone-container .footnote.table td.label,.runestone-sphinx .footnote.table td.label{background-color:#d9edf7;padding:2px 5px}.ptx-runestone-container .ac-canvas,.runestone-sphinx .ac-canvas{background-color:#fff;display:inline-block}.ptx-runestone-container .video-play-overlay,.runestone-sphinx .video-play-overlay{background-position:50%;background-repeat:no-repeat;height:85px;left:44%;position:relative;top:-150px;width:130px}.ptx-runestone-container .video_popup video,.runestone-sphinx .video_popup video{cursor:pointer;width:var(--contentWidthRegular)}.ptx-runestone-container .ui-sortable-helper,.runestone-sphinx .ui-sortable-helper{height:auto!important;width:auto!important}.ptx-runestone-container .navLink,.runestone-sphinx .navLink{bottom:65px;display:inline;opacity:.4;position:fixed;z-index:2}.ptx-runestone-container .navLink:hover,.runestone-sphinx .navLink:hover{opacity:1}.ptx-runestone-container .navLink a,.runestone-sphinx .navLink a{background-color:#fff;border:2px solid #d3d3d3;display:inline-block;height:50px;width:100px}.ptx-runestone-container #relations-next,.runestone-sphinx #relations-next{right:35px}.ptx-runestone-container #relations-prev,.runestone-sphinx #relations-prev{left:35px}.ptx-runestone-container .nextprev-list,.runestone-sphinx .nextprev-list{height:50px;margin:10px;padding-left:0}@media (max-width:600px){.ptx-runestone-container .navLink,.runestone-sphinx .navLink{bottom:auto;display:inline-block;position:absolute}.ptx-runestone-container #relations-next,.ptx-runestone-container #relations-prev,.runestone-sphinx #relations-next,.runestone-sphinx #relations-prev{display:inline;padding:0 20px;width:25%}}.ptx-runestone-container #completionButton,.runestone-sphinx #completionButton{color:var(--completionButtonText);font-weight:700;margin-bottom:15px;margin-top:25px;padding-left:70px;padding-right:70px}.ptx-runestone-container .buttonAskCompletion,.runestone-sphinx .buttonAskCompletion{background-color:var(--completionButton);border-color:var(--completionButtonHover);font-weight:700}.ptx-runestone-container .buttonAskCompletion:hover,.runestone-sphinx .buttonAskCompletion:hover{background-color:var(--completionButtonHover);border-color:var(--completionButtonHover)}.ptx-runestone-container .buttonConfirmCompletion,.runestone-sphinx .buttonConfirmCompletion{background-color:#377e22;border-color:#3dc682;color:#fff!important}.ptx-runestone-container .buttonConfirmCompletion:hover,.runestone-sphinx .buttonConfirmCompletion:hover{background-color:#3dc682;border-color:#3dc682}.ptx-runestone-container .navLinkBg,.runestone-sphinx .navLinkBg{background-color:#fff;bottom:55px;-webkit-box-shadow:0 0 3px rgba(50,50,50,.5);-moz-box-shadow:0 0 3px rgba(50,50,50,.5);box-shadow:0 0 3px rgba(50,50,50,.5);color:#999;font-weight:700;height:40px;position:fixed;z-index:1}.ptx-runestone-container .navLinkBg:hover,.runestone-sphinx .navLinkBg:hover{color:#999}.ptx-runestone-container #navLinkBgRight,.runestone-sphinx #navLinkBgRight{padding:10px 15px 0 65px;right:-1000px}.ptx-runestone-container #navLinkBgLeft,.runestone-sphinx #navLinkBgLeft{left:-65px;padding-left:15px;padding-right:50px}.ptx-runestone-container .activehtml,.runestone-sphinx .activehtml{background-color:#fff;height:400px;width:100%}.ptx-runestone-container .container section>div.sidebar,.runestone-sphinx .container section>div.sidebar{margin:0 0 .5em 1em}.ptx-runestone-container a.disqus_thread_link,.runestone-sphinx a.disqus_thread_link{display:block}.ptx-runestone-container .reveal_button,.runestone-sphinx .reveal_button{display:block;margin-left:0}.ptx-runestone-container iframe[seamless],.runestone-sphinx iframe[seamless]{display:block}@media (min-width:768px){.ptx-runestone-container .container section>div.sidebar,.runestone-sphinx .container section>div.sidebar{margin:0 3em .5em 1em}}@media (min-width:992px){.ptx-runestone-container .container section>div.sidebar,.runestone-sphinx .container section>div.sidebar{margin:0 11em .5em 1em}}@media (min-width:1200px){.ptx-runestone-container .container section>div.sidebar,.runestone-sphinx .container section>div.sidebar{margin:0 18em .5em 1em}}.ptx-runestone-container div.ExecutionVisualizer table.visualizer,.runestone-sphinx div.ExecutionVisualizer table.visualizer{background-color:#fff;margin-left:auto;margin-right:auto;width:auto}.ptx-runestone-container .sltooltip,.runestone-sphinx .sltooltip{bottom:120%;display:block;font-size:11px;margin-left:-2em;margin-top:-2px;padding-bottom:5px;position:absolute;visibility:visible;z-index:1020}.ptx-runestone-container .sltooltip .sltooltip-arrow,.runestone-sphinx .sltooltip .sltooltip-arrow{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000;bottom:0;height:0;left:50%;margin-left:-5px;position:absolute;width:0}.ptx-runestone-container .sltooltip-inner,.runestone-sphinx .sltooltip-inner{background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:var(--tooltip);max-width:200px;padding:3px 8px;text-align:center;text-decoration:none}.ptx-runestone-container ul.dropdown-menu.globaltoc,.runestone-sphinx ul.dropdown-menu.globaltoc{max-height:700px;overflow:auto}.ptx-runestone-container .globaltoc span.caption-text,.runestone-sphinx .globaltoc span.caption-text{display:inline-block;font-size:large;font-weight:700}.ptx-runestone-container textarea.lp-result,.runestone-sphinx textarea.lp-result{font-family:monospace;height:10em;width:100%}.ptx-runestone-container .visuallyhidden,.runestone-sphinx .visuallyhidden{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.ptx-runestone-container .visuallyhidden.focusable:active,.ptx-runestone-container .visuallyhidden.focusable:focus,.runestone-sphinx .visuallyhidden.focusable:active,.runestone-sphinx .visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;white-space:inherit;width:auto}.ptx-runestone-container .blockquote,.runestone-sphinx .blockquote{font-size:large;font-style:italic;padding-left:2em;padding-right:2em;text-align:center}.ptx-runestone-container #subchapterprogress.ui-progressbar .ui-progressbar-value,.runestone-sphinx #subchapterprogress.ui-progressbar .ui-progressbar-value{border-radius:0;margin:0}.ptx-runestone-container #subchapterprogress>div,.runestone-sphinx #subchapterprogress>div{background:green}.ptx-runestone-container #subchapterprogress>div.loggedout,.runestone-sphinx #subchapterprogress>div.loggedout{background:#d3d3d3}.ptx-runestone-container .runestone_caption,.runestone-sphinx .runestone_caption{text-align:center}.ptx-runestone-container .runestone_caption_divid,.runestone-sphinx .runestone_caption_divid{opacity:50%}.ptx-runestone-container #questions .runestone_caption:before,.runestone-sphinx #questions .runestone_caption:before{content:"Problem: " counter(rscomponent) " -- ";counter-increment:rscomponent}.ptx-runestone-container body,.runestone-sphinx body{color:var(--bodyFont)}.ptx-runestone-container .jupyter_container .output,.runestone-sphinx .jupyter_container .output{margin-top:10px}.ptx-runestone-container .jupyter_container .output td,.ptx-runestone-container .jupyter_container .output th,.runestone-sphinx .jupyter_container .output td,.runestone-sphinx .jupyter_container .output th{padding-left:5px;padding-right:5px}.ptx-runestone-container .dropdown-menu>li>label.theme-switch,.runestone-sphinx .dropdown-menu>li>label.theme-switch{align-items:center;cursor:pointer;display:flex;font-weight:400}.ptx-runestone-container .theme-switch input,.runestone-sphinx .theme-switch input{display:none}.ptx-runestone-container .theme-switch .slider,.runestone-sphinx .theme-switch .slider{background-color:#ccc;height:1.25em;margin-right:3px;position:relative;transition:.4s;width:2em}.ptx-runestone-container .theme-switch .slider:before,.runestone-sphinx .theme-switch .slider:before{background-color:#fff;bottom:2px;content:"";height:calc(1.25em - 4px);left:2px;position:absolute;transition:.4s;width:calc(1.25em - 4px)}.ptx-runestone-container .theme-switch input:checked+.slider,.runestone-sphinx .theme-switch input:checked+.slider{background-color:#66bb6a}.ptx-runestone-container .theme-switch input:checked+.slider:before,.runestone-sphinx .theme-switch input:checked+.slider:before{transform:translateX(calc(.75em - 1px))}.ptx-runestone-container .theme-switch .slider.round,.ptx-runestone-container .theme-switch .slider.round:before,.runestone-sphinx .theme-switch .slider.round,.runestone-sphinx .theme-switch .slider.round:before{border-radius:1.25em}.ptx-runestone-container .adcopy,.runestone-sphinx .adcopy{background-color:#f2e0c3;border:2px solid #000;border-radius:10px;margin-left:auto;margin-right:auto;margin-top:10px;padding:10px;width:60%}.ptx-runestone-container .adcopy .donateb,.runestone-sphinx .adcopy .donateb{margin-left:30%}.ptx-runestone-container .isCorrect:before,.runestone-sphinx .isCorrect:before{content:"✅ ";float:right;padding-left:4px}.ptx-runestone-container .isInCorrect:before,.runestone-sphinx .isInCorrect:before{content:"⚠️ ";float:right;padding-left:4px}.ptx-runestone-container pre,.runestone-sphinx pre{background:inherit;color:inherit}.ptx-runestone-container summary.ptx-footnote__number,.runestone-sphinx summary.ptx-footnote__number{display:inline}.ptx-runestone-container summary.knowl__link,.runestone-sphinx summary.knowl__link{display:list-item inline}.ptx-runestone-container details.ptx-footnote,.runestone-sphinx details.ptx-footnote{display:inline}.ptx-runestone-container .handsontable td,.ptx-runestone-container .handsontable th,.runestone-sphinx .handsontable td,.runestone-sphinx .handsontable th{background-color:var(--content-background,#fff);color:var(--bodyFont,#000)}.ptx-runestone-container legend,.runestone-sphinx legend{border-bottom-color:var(--grayToWhite,#333);color:var(--grayToWhite,#333)}.ptx-runestone-container .autopermalink,.runestone-sphinx .autopermalink{display:none}.ptx-runestone-container :root,.runestone-sphinx :root{--codebuttons:#474949}.ptx-runestone-container [data-theme=dark],.runestone-sphinx [data-theme=dark]{--codebuttons:#2c0aa6}.ptx-runestone-container li.dropdown.open a.dropdown-toggle,.ptx-runestone-container li.dropdown.open a.dropdown-toggle:focus,.runestone-sphinx li.dropdown.open a.dropdown-toggle,.runestone-sphinx li.dropdown.open a.dropdown-toggle:focus{background-color:#2a5659!important;border:0!important;color:#f8f8f8!important}.ptx-runestone-container a.dropdown-toggle:focus,.runestone-sphinx a.dropdown-toggle:focus{background-color:#52a6ac!important;color:#f8f8f8!important}.ptx-runestone-container li.divider-vertical,.runestone-sphinx li.divider-vertical{margin:0!important}.ptx-runestone-container li.dropdown a.dropdown-toggle,.runestone-sphinx li.dropdown a.dropdown-toggle{padding:15px 18px!important}.ptx-runestone-container button.btn.btn-default:active,.ptx-runestone-container button.btn.btn-default:focus,.runestone-sphinx button.btn.btn-default:active,.runestone-sphinx button.btn.btn-default:focus{background-color:#fff!important;color:#474949!important}.ptx-runestone-container button.btn.btn-default,.runestone-sphinx button.btn.btn-default{background-color:#474949!important;color:#fff!important}.ptx-runestone-container button.btn.btn-default.btn-sm.disabled:active,.ptx-runestone-container button.btn.btn-default.btn-sm.disabled:focus,.runestone-sphinx button.btn.btn-default.btn-sm.disabled:active,.runestone-sphinx button.btn.btn-default.btn-sm.disabled:focus{background-color:#fff!important;color:#474949!important}.ptx-runestone-container button.btn.btn-default.btn-sm.disabled,.runestone-sphinx button.btn.btn-default.btn-sm.disabled{background-color:#474949!important;color:#fff!important}.ptx-runestone-container button.btn.btn-success:active,.ptx-runestone-container button.btn.btn-success:focus,.runestone-sphinx button.btn.btn-success:active,.runestone-sphinx button.btn.btn-success:focus{background-color:#fff!important;color:#427e44!important}.ptx-runestone-container button.btn.btn-success,.runestone-sphinx button.btn.btn-success{background-color:#427e44!important;color:#fff!important}.ptx-runestone-container button.btn.btn-primary:active,.ptx-runestone-container button.btn.btn-primary:focus,.runestone-sphinx button.btn.btn-primary:active,.runestone-sphinx button.btn.btn-primary:focus{background-color:#fff!important;color:#3379b6!important}.ptx-runestone-container button.btn.btn-primary,.runestone-sphinx button.btn.btn-primary{background-color:#3379b6!important;color:#fff!important}.ptx-runestone-container button.btn.btn-info:active,.ptx-runestone-container button.btn.btn-info:focus,.runestone-sphinx button.btn.btn-info:active,.runestone-sphinx button.btn.btn-info:focus{background-color:#fff!important;color:#1a6a83!important}.ptx-runestone-container button.btn.btn-info,.runestone-sphinx button.btn.btn-info{background-color:#1a6a83!important;color:#fff!important}.ptx-runestone-container button.btn.btn-warning:active,.ptx-runestone-container button.btn.btn-warning:focus,.runestone-sphinx button.btn.btn-warning:active,.runestone-sphinx button.btn.btn-warning:focus{background-color:#fff!important;color:#945c0e!important}.ptx-runestone-container button.btn.btn-warning,.runestone-sphinx button.btn.btn-warning{background-color:#945c0e!important;color:#fff!important}.ptx-runestone-container button.btn.btn-danger:active,.ptx-runestone-container button.btn.btn-danger:focus,.runestone-sphinx button.btn.btn-danger:active,.runestone-sphinx button.btn.btn-danger:focus{background-color:#fff!important;color:#d33a35!important}.ptx-runestone-container button.btn.btn-danger,.runestone-sphinx button.btn.btn-danger{background-color:#d33a35!important;color:#fff!important}.ptx-runestone-container button.btn.btn-link:active,.ptx-runestone-container button.btn.btn-link:focus,.runestone-sphinx button.btn.btn-link:active,.runestone-sphinx button.btn.btn-link:focus{background-color:#1a6a83!important;color:#fff!important}.ptx-runestone-container button.btn.btn-link,.runestone-sphinx button.btn.btn-link{background-color:#fff!important;color:#1a6a83!important}:root{--background:#fff;--outerBackground:#eee;--links:#0645ad;--bodyFont:var(--body-text-color,#000);--tooltip:#fff;--grayToWhite:#333;--navbar:#f8f8f8;--navbarFont:#707070;--navbarFontHover:#000;--alerts:#d9edf7;--completionButton:#f19711;--completionButtonHover:#ff9f19;--completionButtonText:#000;--admonition:#fcf8e3;--admonitionBorder:#fbeed5;--codeButtons:#474949;--codeButtonsBorder:#474949;--dangerAlerts:#f2dede;--successAlerts:#dff0d8;--contentWidthRegular:660px;--contentWidthWide:1060px;--componentBgColor:#f0f8ff;--componentBorderColor:#000;--questionBgColor:#e1efff;--parsonsBgColor:#ffa;--parsonsBorderColor:#ee0;--parsonsCorrectBgColor:#dff0d8;--parsonsCorrectBorderColor:#ade595;--parsonsIncorrectBgColor:#f2dede;--parsonsIncorrectBorderColor:#f2b6b6}:root.dark-mode{--background:#2c2f33;--outerBackground:#23272a;--links:#7289da;--bodyFont:var(--body-text-color,#99aab5);--tooltip:#000;--grayToWhite:#aaa;--navbar:#3d3d3d;--navbarFont:#fff;--navbarFontHover:#d6d6d6;--alerts:#714082;--completionButton:#650087;--completionButtonHover:#560073;--completionButtonText:#fff;--admonition:#3d3d3d;--admonitionBorder:#262626;--codeButtons:#67739d;--codeButtonsBorder:#fff;--dangerAlerts:#8c2626;--successAlerts:#217300;--componentBgColor:var(--rs-component-bg,var(--knowl-background,#07467d));--componentBorderColor:var(--rs-component-border,var(--knowl-border-color,#939090));--questionBgColor:var(--rs-component-bg,var(--knowl-nested-1-background,#0f5a9b));--parsonsBgColor:#e8e8b2;--parsonsBorderColor:#a8a82d;--parsonsCorrectBgColor:#a3c097;--parsonsCorrectBorderColor:#60904c;--parsonsIncorrectBgColor:#ae9090;--parsonsIncorrectBorderColor:#c16b6b}[data-theme=dark]{--background:#2c2f33;--outerBackground:#23272a;--links:#7289da;--bodyFont:#99aab5;--tooltip:#000;--grayToWhite:#fff;--navbar:#3d3d3d;--navbarFont:#fff;--navbarFontHover:#d6d6d6;--alerts:#714082;--completionButton:#650087;--completionButtonHover:#560073;--completionButtonText:#fff;--admonition:#3d3d3d;--admonitionBorder:#262626;--codeButtons:#7289da;--codeButtonsBorder:#fff;--dangerAlerts:#8c2626;--successAlerts:#217300;--componentBgColor:#07467d;--componentBorderColor:#939090;--questionBgColor:#17555d}#scprogresscontainer{margin:10px auto;max-width:500px;width:100%}#subchapterprogress{background-color:var(--alerts);border:1px solid var(--grayToWhite);border-radius:5px;height:20px;position:relative;width:100%}.exercise-statement{display:block;margin-bottom:1em}:root{--menu:#fff}[data-theme=dark]{--menu:#000}.my-highlighted-text{background-color:#ff9}.social-highlighted-text{background-color:#fcc}.highlight-option-box{left:0;position:absolute;top:0}.highlight-option-box li{height:24px}#continue-reading{display:none;padding-top:20px}#continue-reading a{float:right;margin-right:20px}li.completed{list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO5JREFUeNpi/P//PwMlgImBQjAwBthc4osH4skgNguJGrmA1BQgjgPiUJIMAGpWBVKrgNgAiL2P6H3aRrQBQM12QGo1EIsBcQxMM0oYABXxAjETFs2+QGobVHM9UPNSjEAEKgoEUjeBuBhNcwDUZm4gXg/U3IRuAcwLSkAsCcRdQE16QDoRiG2BGGQbOxA/BOIcbN5jhKVEoMYiINULFT8PxCJALAvlhwBtX4vXAKghpSBXoKlZCtQcQ1RCAirsBlJVSEIfgLiRpJQINKQdSNVCuTOB/Nt44xjkBWzY+iJvGRBr4pKHYUZKszNAgAEAln9yGpx/ZXMAAAAASUVORK5CYII=)}li.active{list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIlJREFUeNpi/P//PwMlgImBQjAMDGCBsxZIkaYz4RmaAZhAHYjNoOxTQHwTvwsQgAeIe4E4DU18FhAXAPF3QgbMB+IQLOIgA4WAOBRfIOri0AwDIDktfAbYEBF89jRNB0eI0HMEnwGXgXgNHs1roGrweiERGmUMWKIxkZh08AWI04G4j5iEBBBgAPddF58mobqdAAAAAElFTkSuQmCC)}.infoTextCompleted{color:#3dc682}.infoTextActive,.infoTextCompleted{display:none;font-size:.9em;font-style:italic;margin-left:10px;opacity:.7}.infoTextActive{color:#ff9f19}.dropdown-menu{background-clip:padding-box;background-color:var(--menu);border:1px solid rgba(0,0,0,.2);border-radius:5px 5px 5px 5px;box-shadow:0 5px 10px rgba(0,0,0,.2);display:none;list-style:none outside none;margin:1px 0 0;min-width:160px;padding:4px 0;position:absolute;top:100%;z-index:1000}.dropdown-menu ul{list-style:disc none outside;margin:0 0 9px 25px;padding:0}.sidebar-highlights{background-color:#ff9}div.documentwrapper{border:0}div.bodywrapper{border-right:0}div.sphinxsidebar{border-left:1px solid #ccc;padding-left:10px}.body>.section .section{padding-top:1px}#jump-to-chapter{border:1px solid #ccc;letter-spacing:.015em;line-height:120%;margin-left:auto;margin-right:auto;padding:.5em;width:80%}#navigation-links{background-color:#f8f8f8;border:1px solid #ccc;margin:10px;padding:10px}.matrixeq_container{margin:0 0 6px;padding:6px}span.matrix_table{border:2px solid #000;margin:0 0 4px;overflow:visible;padding:0 1px;text-align:center}span.matrix_column,span.matrix_table{background-color:inherit;display:inline-table}span.matrix_column{border-width:0;font-family:monospace;font-size:12px;margin:0 1px;padding:2px 8px;vertical-align:middle}span.matrix_column div{background-color:inherit;display:block;margin:1px;padding:2px}span.matrix_table .matrix_column{border-style:none;margin-left:5px;margin-right:5px}span.matrix_table:before{top:-2px}span.matrix_table:after,span.matrix_table:before{background-color:inherit;content:" ";display:block;height:2px;margin:0 auto;position:relative;text-align:center;width:85%;z-index:100}span.matrix_table:after{top:2px}span.matrix_column:before{top:-2px}span.matrix_column:after,span.matrix_column:before{content:" ";display:block;height:2px;position:relative;width:85%;z-index:100}span.matrix_column:after{top:2px}span.matrix_table span.matrix_column:after,span.matrix_table span.matrix_column:before{height:0}span.matrix_table input[type=text]{appearance:none;background-color:inherit;box-shadow:none;display:block;font-family:sans-serif;font-size:12px;height:24px;margin:0;text-align:right;width:50px}span.matrix_operator{font-family:monospace;font-size:18px;margin:0 4px;padding:0}span.matrix_label,span.matrix_operator{display:inline-table;vertical-align:middle}span.matrix_label{font-family:sans-serif;font-size:12px;margin:0 1px;padding:0 0 0 20px}.lightcyanColor{background-color:#e0ffff}.lightgreyColor{background-color:#d3d3d3}.purpleColor{background-color:#dfb5e8}.yellowColor{background-color:#fdff9d}.webgl_container{background-color:#fcf8e3;display:block;margin-bottom:1em}.webgl_cmds,.webgl_container{box-sizing:border-box;width:100%}.webgl_cmds{padding:6px;text-align:center}.webgl_row2{box-sizing:border-box;display:block;height:550px;padding:0 4px;width:100%}.webgl_canvas,.webgl_editors{box-sizing:border-box;display:block;float:left;visibility:visible;width:50%}.webgl_canvas{font-size:12px;font-weight:400;padding-left:5px}.webgl_output{box-sizing:border-box;float:left;margin-top:6px;padding:4px;width:100%}.webgl_nav_tabs{background-color:#cfccb8;border-color:#fbeed5;display:inline-flex;height:31px;margin:0;overflow:hidden;padding:6px 0 0;width:100%}.webgl_nav_tabs,.webgl_nav_tabs li{border-top-left-radius:4px;border-top-right-radius:4px;list-style-type:none}.webgl_nav_tabs li{background-color:#e6e2cc;float:left;font-size:9pt;margin:0 0 0 4px;padding:4px 1px 4px 4px;position:relative}.webgl_nav_tabs li>a{color:#555;padding:8px;text-decoration:none}.webgl_nav_tabs>li>a:hover{border-bottom-width:0;border-color:#b4b19d}.webgl_nav_tabs li.active{background-color:#fff;list-style-image:none;list-style-type:none}.webgl_tab_content{background-color:#fcf8e3;border:0;clear:both;color:#c09853;margin:0 0 20px;position:absolute;width:100%;z-index:1}.webgl_tab_content.active{z-index:2}.webgl_tab_content>*{margin-left:auto;margin-right:auto}.webgl_tab_content .clearfix{position:static}.webgl_tab_editor{background-color:#fcf8e3;border:0;clear:both;color:#c09853;margin:0 0 20px;padding:10px 4px;position:absolute;width:100%}.webgl_code{float:left;width:100%}.webgl_tab_contents_text{background-color:#fcf8e3;border:0;clear:both;color:#c09853;margin:0 0 20px;padding:10px 4px;position:absolute;width:100%;z-index:1}.webgl_errorMessages{color:red}.webgl_warningMessages{color:#aa22a4}.webgl_infoMessages{color:#189040}.webgl_output_div{background-color:#fff;border:1px solid #d3d3d3;font-size:12px;font-weight:400;height:14em;margin:2px;overflow:auto;padding-bottom:4px;padding-left:4px;padding-top:4px;width:100%}.webgl_editor_highlight{background-color:#eee}.webgl_btn{background-color:thistle;border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;font-size:12px;font-weight:400;margin-bottom:0;padding:3px 6px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.webgl_tabbed_editor{font-family:monospace,sans-serif;font-size:9pt;font-style:normal;resize:none;width:100%}.canvas3D{height:100%;width:100%}.CodeMirror.webgl-default{border:1px solid #eee;font-family:monospace,sans-serif;font-size:8pt;font-style:normal}button.btn.webgl-default{font-size:8pt}.runestone-sphinx .hidden{display:none}.runestone-sphinx .view-toggle{padding:.85em}.runestone-sphinx .presentation-mode section *{display:none}.runestone-sphinx .presentation-mode section .runestone,.runestone-sphinx .presentation-mode section .runestone *{display:initial}.runestone-sphinx .full-height,.runestone-sphinx .present{height:100vh}.runestone-sphinx .bottom{bottom:0;position:absolute}.runestone-sphinx #codeDisplayDiv{width:auto!important}.runestone-sphinx div.ExecutionVisualizer #dataViz{margin:0}.runestone-sphinx div.ExecutionVisualizer div#stackHeader{text-align:center}.runestone-sphinx #stackFrame{display:block!important}.runestone-sphinx #stackHeapTable{width:100%}.runestone-sphinx #stackHeapTable tr{justify-content:space-around}.runestone-sphinx div.ExecutionVisualizer td#heap_td,.runestone-sphinx div.ExecutionVisualizer td#stack_td{flex:1}.runestone-sphinx .presentation-title{display:none}.runestone-sphinx .present .presentation-title{display:block}.runestone-sphinx div.ExecutionVisualizer div#heap{float:none;padding-left:0}.runestone-sphinx #heap_td tr,.runestone-sphinx #stack_td tr{display:table-row}.runestone-sphinx #codeDisplayDiv{margin:0 auto}.runestone-sphinx #vizLayoutTd{flex:1}.runestone-sphinx #vizLayoutTdFirst{flex:2}.runestone-sphinx #vizLayoutTdSecond{flex:1}.runestone-sphinx #vizLayoutTdThird{flex:2}.runestone-sphinx #progOutputs{display:block!important;margin:0 20px;width:60%}.runestone-sphinx #pyStdout{width:100%!important}.runestone-sphinx div.ExecutionVisualizer #pyStdout{margin-bottom:1em}.runestone-sphinx div.ExecutionVisualizer table.visualizer{width:100%}.runestone-sphinx .present #vizLayoutTdThird{text-align:left}.runestone-sphinx .ac-block{display:flex;margin-bottom:1em}.runestone-sphinx .row-mode .ac-block{display:block;margin-bottom:0}.runestone-sphinx .row-mode .ac_code_div,.runestone-sphinx .row-mode .ac_output{display:block;float:none;max-width:none;width:auto}.runestone-sphinx .row-mode .ac_code_div{margin-bottom:1em}.runestone-sphinx .ac_section>*{max-width:100%}.runestone-sphinx .ac_output{display:block;max-width:100%}.runestone-sphinx .ac_output pre{min-height:60px;visibility:visible!important}.runestone-sphinx .CodeMirror{border-radius:3px;margin:0;max-width:100%;min-height:60px}.runestone-sphinx .container section>runestone:not(.ac_section){margin:0;max-width:none}.runestone-sphinx .presentation-options{align-items:center;display:flex;justify-content:flex-end}.runestone-sphinx .layout-btn{align-items:center;background-color:#fbeed5;border:2px solid #dfd4be;border-radius:2px;display:flex;justify-content:center;margin:0 .5rem;padding:.25rem;transition:all .2s ease}.runestone-sphinx .layout-btn.active-layout,.runestone-sphinx .layout-btn:focus{border:2px solid #979797;outline:none}.runestone-sphinx .sketchpad-container{min-height:300px;min-width:50%;padding:0 15px}.runestone-sphinx .card-mode .sketchpad-container{display:inline-block;margin:0;vertical-align:top;width:50%}.runestone-sphinx .row-mode .error{margin:20px 15px}.runestone-sphinx .card-mode .error{display:inline-block;margin:28px 0 0;padding:0 15px;vertical-align:top;width:50%}.runestone-sphinx .sketchpad{background:#fff;border:2px solid grey;border-radius:3px;display:block;min-height:300px;width:100%}.runestone-sphinx .btn-presenter{border-radius:3px;font-weight:500;margin:1.5rem 0 1.5rem 1.5rem;padding:.5rem 1rem}.runestone-sphinx .btn-grey-outline{background:#fff;border:2px solid grey;color:grey}.runestone-sphinx .btn-grey-solid{background:grey;border:2px solid grey;color:#fff}.runestone-sphinx body.present .ac_section>*{max-width:none}.runestone-sphinx body.present iframe{width:100%}.runestone-sphinx body.present #relations-next,.runestone-sphinx body.present #relations-prev,.runestone-sphinx body.present .navLinkBg{display:none}.runestone-sphinx body.present .btn-presenter{position:absolute}.runestone-sphinx body.present .btn-presenter.prev-exercise{left:0}.runestone-sphinx body.present .btn-presenter.next-exercise{right:0} -/*# sourceMappingURL=prefix-runestone.677a75a9120449ff.css.map*/ \ No newline at end of file + /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */}.ptx-runestone-container html,.runestone-sphinx html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-family:sans-serif}.ptx-runestone-container body,.runestone-sphinx body{margin:0}.ptx-runestone-container article,.ptx-runestone-container aside,.ptx-runestone-container details,.ptx-runestone-container figcaption,.ptx-runestone-container figure,.ptx-runestone-container footer,.ptx-runestone-container header,.ptx-runestone-container hgroup,.ptx-runestone-container main,.ptx-runestone-container menu,.ptx-runestone-container nav,.ptx-runestone-container section,.ptx-runestone-container summary,.runestone-sphinx article,.runestone-sphinx aside,.runestone-sphinx details,.runestone-sphinx figcaption,.runestone-sphinx figure,.runestone-sphinx footer,.runestone-sphinx header,.runestone-sphinx hgroup,.runestone-sphinx main,.runestone-sphinx menu,.runestone-sphinx nav,.runestone-sphinx section,.runestone-sphinx summary{display:block}.ptx-runestone-container audio,.ptx-runestone-container canvas,.ptx-runestone-container progress,.ptx-runestone-container video,.runestone-sphinx audio,.runestone-sphinx canvas,.runestone-sphinx progress,.runestone-sphinx video{display:inline-block;vertical-align:baseline}.ptx-runestone-container audio:not([controls]),.runestone-sphinx audio:not([controls]){display:none;height:0}.ptx-runestone-container [hidden],.ptx-runestone-container template,.runestone-sphinx [hidden],.runestone-sphinx template{display:none}.ptx-runestone-container a,.runestone-sphinx a{background-color:transparent}.ptx-runestone-container a:active,.ptx-runestone-container a:hover,.runestone-sphinx a:active,.runestone-sphinx a:hover{outline:0}.ptx-runestone-container abbr[title],.runestone-sphinx abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}.ptx-runestone-container b,.ptx-runestone-container strong,.runestone-sphinx b,.runestone-sphinx strong{font-weight:700}.ptx-runestone-container dfn,.runestone-sphinx dfn{font-style:italic}.ptx-runestone-container h1,.runestone-sphinx h1{font-size:2em;margin:.67em 0}.ptx-runestone-container mark,.runestone-sphinx mark{background:#ff0;color:#000}.ptx-runestone-container small,.runestone-sphinx small{font-size:80%}.ptx-runestone-container sub,.ptx-runestone-container sup,.runestone-sphinx sub,.runestone-sphinx sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.ptx-runestone-container sup,.runestone-sphinx sup{top:-.5em}.ptx-runestone-container sub,.runestone-sphinx sub{bottom:-.25em}.ptx-runestone-container img,.runestone-sphinx img{border:0}.ptx-runestone-container svg:not(:root),.runestone-sphinx svg:not(:root){overflow:hidden}.ptx-runestone-container figure,.runestone-sphinx figure{margin:1em 40px}.ptx-runestone-container hr,.runestone-sphinx hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}.ptx-runestone-container pre,.runestone-sphinx pre{overflow:auto}.ptx-runestone-container code,.ptx-runestone-container kbd,.ptx-runestone-container pre,.ptx-runestone-container samp,.runestone-sphinx code,.runestone-sphinx kbd,.runestone-sphinx pre,.runestone-sphinx samp{font-family:monospace,monospace;font-size:1em}.ptx-runestone-container button,.ptx-runestone-container input,.ptx-runestone-container optgroup,.ptx-runestone-container select,.ptx-runestone-container textarea,.runestone-sphinx button,.runestone-sphinx input,.runestone-sphinx optgroup,.runestone-sphinx select,.runestone-sphinx textarea{color:inherit;font:inherit;margin:0}.ptx-runestone-container button,.runestone-sphinx button{overflow:visible}.ptx-runestone-container button,.ptx-runestone-container select,.runestone-sphinx button,.runestone-sphinx select{text-transform:none}.ptx-runestone-container button,.ptx-runestone-container html input[type=button],.ptx-runestone-container input[type=reset],.ptx-runestone-container input[type=submit],.runestone-sphinx button,.runestone-sphinx html input[type=button],.runestone-sphinx input[type=reset],.runestone-sphinx input[type=submit]{-webkit-appearance:button;cursor:pointer}.ptx-runestone-container button[disabled],.ptx-runestone-container html input[disabled],.runestone-sphinx button[disabled],.runestone-sphinx html input[disabled]{cursor:default}.ptx-runestone-container button::-moz-focus-inner,.ptx-runestone-container input::-moz-focus-inner,.runestone-sphinx button::-moz-focus-inner,.runestone-sphinx input::-moz-focus-inner{border:0;padding:0}.ptx-runestone-container input,.runestone-sphinx input{line-height:normal}.ptx-runestone-container input[type=checkbox],.ptx-runestone-container input[type=radio],.runestone-sphinx input[type=checkbox],.runestone-sphinx input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}.ptx-runestone-container input[type=number]::-webkit-inner-spin-button,.ptx-runestone-container input[type=number]::-webkit-outer-spin-button,.runestone-sphinx input[type=number]::-webkit-inner-spin-button,.runestone-sphinx input[type=number]::-webkit-outer-spin-button{height:auto}.ptx-runestone-container input[type=search],.runestone-sphinx input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.ptx-runestone-container input[type=search]::-webkit-search-cancel-button,.ptx-runestone-container input[type=search]::-webkit-search-decoration,.runestone-sphinx input[type=search]::-webkit-search-cancel-button,.runestone-sphinx input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.ptx-runestone-container fieldset,.runestone-sphinx fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}.ptx-runestone-container textarea,.runestone-sphinx textarea{overflow:auto}.ptx-runestone-container optgroup,.runestone-sphinx optgroup{font-weight:700}.ptx-runestone-container table,.runestone-sphinx table{border-collapse:collapse;border-spacing:0}.ptx-runestone-container td,.ptx-runestone-container th,.runestone-sphinx td,.runestone-sphinx th{padding:0}@media print{.ptx-runestone-container *,.ptx-runestone-container :after,.ptx-runestone-container :before,.runestone-sphinx *,.runestone-sphinx :after,.runestone-sphinx :before{background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important;color:#000!important;text-shadow:none!important}.ptx-runestone-container a,.ptx-runestone-container a:visited,.runestone-sphinx a,.runestone-sphinx a:visited{text-decoration:underline}.ptx-runestone-container a[href]:after,.runestone-sphinx a[href]:after{content:" (" attr(href) ")"}.ptx-runestone-container abbr[title]:after,.runestone-sphinx abbr[title]:after{content:" (" attr(title) ")"}.ptx-runestone-container a[href^="#"]:after,.ptx-runestone-container a[href^="javascript:"]:after,.runestone-sphinx a[href^="#"]:after,.runestone-sphinx a[href^="javascript:"]:after{content:""}.ptx-runestone-container blockquote,.ptx-runestone-container pre,.runestone-sphinx blockquote,.runestone-sphinx pre{border:1px solid #999;page-break-inside:avoid}.ptx-runestone-container thead,.runestone-sphinx thead{display:table-header-group}.ptx-runestone-container img,.ptx-runestone-container tr,.runestone-sphinx img,.runestone-sphinx tr{page-break-inside:avoid}.ptx-runestone-container img,.runestone-sphinx img{max-width:100%!important}.ptx-runestone-container h2,.ptx-runestone-container h3,.ptx-runestone-container p,.runestone-sphinx h2,.runestone-sphinx h3,.runestone-sphinx p{orphans:3;widows:3}.ptx-runestone-container h2,.ptx-runestone-container h3,.runestone-sphinx h2,.runestone-sphinx h3{page-break-after:avoid}.ptx-runestone-container .navbar,.runestone-sphinx .navbar{display:none}.ptx-runestone-container .btn>.caret,.ptx-runestone-container .dropup>.btn>.caret,.runestone-sphinx .btn>.caret,.runestone-sphinx .dropup>.btn>.caret{border-top-color:#000!important}.ptx-runestone-container .label,.runestone-sphinx .label{border:1px solid #000}.ptx-runestone-container .table,.runestone-sphinx .table{border-collapse:collapse!important}.ptx-runestone-container .table td,.ptx-runestone-container .table th,.runestone-sphinx .table td,.runestone-sphinx .table th{background-color:#fff!important}.ptx-runestone-container .table-bordered td,.ptx-runestone-container .table-bordered th,.runestone-sphinx .table-bordered td,.runestone-sphinx .table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:Glyphicons Halflings;src:url(7a0f4b092e86cb52.eot);src:url(7a0f4b092e86cb52.eot?#iefix) format("embedded-opentype"),url(b70781972ce7320b.woff2) format("woff2"),url(4ba85deaf3670942.woff) format("woff"),url(009b407a9881be10.ttf) format("truetype"),url(85f0466cb4ab3a4d.svg#glyphicons_halflingsregular) format("svg")}.ptx-runestone-container .glyphicon,.runestone-sphinx .glyphicon{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;position:relative;top:1px}.ptx-runestone-container .glyphicon-asterisk:before,.runestone-sphinx .glyphicon-asterisk:before{content:"\002a"}.ptx-runestone-container .glyphicon-plus:before,.runestone-sphinx .glyphicon-plus:before{content:"\002b"}.ptx-runestone-container .glyphicon-eur:before,.ptx-runestone-container .glyphicon-euro:before,.runestone-sphinx .glyphicon-eur:before,.runestone-sphinx .glyphicon-euro:before{content:"\20ac"}.ptx-runestone-container .glyphicon-minus:before,.runestone-sphinx .glyphicon-minus:before{content:"\2212"}.ptx-runestone-container .glyphicon-cloud:before,.runestone-sphinx .glyphicon-cloud:before{content:"\2601"}.ptx-runestone-container .glyphicon-envelope:before,.runestone-sphinx .glyphicon-envelope:before{content:"\2709"}.ptx-runestone-container .glyphicon-pencil:before,.runestone-sphinx .glyphicon-pencil:before{content:"\270f"}.ptx-runestone-container .glyphicon-glass:before,.runestone-sphinx .glyphicon-glass:before{content:"\e001"}.ptx-runestone-container .glyphicon-music:before,.runestone-sphinx .glyphicon-music:before{content:"\e002"}.ptx-runestone-container .glyphicon-search:before,.runestone-sphinx .glyphicon-search:before{content:"\e003"}.ptx-runestone-container .glyphicon-heart:before,.runestone-sphinx .glyphicon-heart:before{content:"\e005"}.ptx-runestone-container .glyphicon-star:before,.runestone-sphinx .glyphicon-star:before{content:"\e006"}.ptx-runestone-container .glyphicon-star-empty:before,.runestone-sphinx .glyphicon-star-empty:before{content:"\e007"}.ptx-runestone-container .glyphicon-user:before,.runestone-sphinx .glyphicon-user:before{content:"\e008"}.ptx-runestone-container .glyphicon-film:before,.runestone-sphinx .glyphicon-film:before{content:"\e009"}.ptx-runestone-container .glyphicon-th-large:before,.runestone-sphinx .glyphicon-th-large:before{content:"\e010"}.ptx-runestone-container .glyphicon-th:before,.runestone-sphinx .glyphicon-th:before{content:"\e011"}.ptx-runestone-container .glyphicon-th-list:before,.runestone-sphinx .glyphicon-th-list:before{content:"\e012"}.ptx-runestone-container .glyphicon-ok:before,.runestone-sphinx .glyphicon-ok:before{content:"\e013"}.ptx-runestone-container .glyphicon-remove:before,.runestone-sphinx .glyphicon-remove:before{content:"\e014"}.ptx-runestone-container .glyphicon-zoom-in:before,.runestone-sphinx .glyphicon-zoom-in:before{content:"\e015"}.ptx-runestone-container .glyphicon-zoom-out:before,.runestone-sphinx .glyphicon-zoom-out:before{content:"\e016"}.ptx-runestone-container .glyphicon-off:before,.runestone-sphinx .glyphicon-off:before{content:"\e017"}.ptx-runestone-container .glyphicon-signal:before,.runestone-sphinx .glyphicon-signal:before{content:"\e018"}.ptx-runestone-container .glyphicon-cog:before,.runestone-sphinx .glyphicon-cog:before{content:"\e019"}.ptx-runestone-container .glyphicon-trash:before,.runestone-sphinx .glyphicon-trash:before{content:"\e020"}.ptx-runestone-container .glyphicon-home:before,.runestone-sphinx .glyphicon-home:before{content:"\e021"}.ptx-runestone-container .glyphicon-file:before,.runestone-sphinx .glyphicon-file:before{content:"\e022"}.ptx-runestone-container .glyphicon-time:before,.runestone-sphinx .glyphicon-time:before{content:"\e023"}.ptx-runestone-container .glyphicon-road:before,.runestone-sphinx .glyphicon-road:before{content:"\e024"}.ptx-runestone-container .glyphicon-download-alt:before,.runestone-sphinx .glyphicon-download-alt:before{content:"\e025"}.ptx-runestone-container .glyphicon-download:before,.runestone-sphinx .glyphicon-download:before{content:"\e026"}.ptx-runestone-container .glyphicon-upload:before,.runestone-sphinx .glyphicon-upload:before{content:"\e027"}.ptx-runestone-container .glyphicon-inbox:before,.runestone-sphinx .glyphicon-inbox:before{content:"\e028"}.ptx-runestone-container .glyphicon-play-circle:before,.runestone-sphinx .glyphicon-play-circle:before{content:"\e029"}.ptx-runestone-container .glyphicon-repeat:before,.runestone-sphinx .glyphicon-repeat:before{content:"\e030"}.ptx-runestone-container .glyphicon-refresh:before,.runestone-sphinx .glyphicon-refresh:before{content:"\e031"}.ptx-runestone-container .glyphicon-list-alt:before,.runestone-sphinx .glyphicon-list-alt:before{content:"\e032"}.ptx-runestone-container .glyphicon-lock:before,.runestone-sphinx .glyphicon-lock:before{content:"\e033"}.ptx-runestone-container .glyphicon-flag:before,.runestone-sphinx .glyphicon-flag:before{content:"\e034"}.ptx-runestone-container .glyphicon-headphones:before,.runestone-sphinx .glyphicon-headphones:before{content:"\e035"}.ptx-runestone-container .glyphicon-volume-off:before,.runestone-sphinx .glyphicon-volume-off:before{content:"\e036"}.ptx-runestone-container .glyphicon-volume-down:before,.runestone-sphinx .glyphicon-volume-down:before{content:"\e037"}.ptx-runestone-container .glyphicon-volume-up:before,.runestone-sphinx .glyphicon-volume-up:before{content:"\e038"}.ptx-runestone-container .glyphicon-qrcode:before,.runestone-sphinx .glyphicon-qrcode:before{content:"\e039"}.ptx-runestone-container .glyphicon-barcode:before,.runestone-sphinx .glyphicon-barcode:before{content:"\e040"}.ptx-runestone-container .glyphicon-tag:before,.runestone-sphinx .glyphicon-tag:before{content:"\e041"}.ptx-runestone-container .glyphicon-tags:before,.runestone-sphinx .glyphicon-tags:before{content:"\e042"}.ptx-runestone-container .glyphicon-book:before,.runestone-sphinx .glyphicon-book:before{content:"\e043"}.ptx-runestone-container .glyphicon-bookmark:before,.runestone-sphinx .glyphicon-bookmark:before{content:"\e044"}.ptx-runestone-container .glyphicon-print:before,.runestone-sphinx .glyphicon-print:before{content:"\e045"}.ptx-runestone-container .glyphicon-camera:before,.runestone-sphinx .glyphicon-camera:before{content:"\e046"}.ptx-runestone-container .glyphicon-font:before,.runestone-sphinx .glyphicon-font:before{content:"\e047"}.ptx-runestone-container .glyphicon-bold:before,.runestone-sphinx .glyphicon-bold:before{content:"\e048"}.ptx-runestone-container .glyphicon-italic:before,.runestone-sphinx .glyphicon-italic:before{content:"\e049"}.ptx-runestone-container .glyphicon-text-height:before,.runestone-sphinx .glyphicon-text-height:before{content:"\e050"}.ptx-runestone-container .glyphicon-text-width:before,.runestone-sphinx .glyphicon-text-width:before{content:"\e051"}.ptx-runestone-container .glyphicon-align-left:before,.runestone-sphinx .glyphicon-align-left:before{content:"\e052"}.ptx-runestone-container .glyphicon-align-center:before,.runestone-sphinx .glyphicon-align-center:before{content:"\e053"}.ptx-runestone-container .glyphicon-align-right:before,.runestone-sphinx .glyphicon-align-right:before{content:"\e054"}.ptx-runestone-container .glyphicon-align-justify:before,.runestone-sphinx .glyphicon-align-justify:before{content:"\e055"}.ptx-runestone-container .glyphicon-list:before,.runestone-sphinx .glyphicon-list:before{content:"\e056"}.ptx-runestone-container .glyphicon-indent-left:before,.runestone-sphinx .glyphicon-indent-left:before{content:"\e057"}.ptx-runestone-container .glyphicon-indent-right:before,.runestone-sphinx .glyphicon-indent-right:before{content:"\e058"}.ptx-runestone-container .glyphicon-facetime-video:before,.runestone-sphinx .glyphicon-facetime-video:before{content:"\e059"}.ptx-runestone-container .glyphicon-picture:before,.runestone-sphinx .glyphicon-picture:before{content:"\e060"}.ptx-runestone-container .glyphicon-map-marker:before,.runestone-sphinx .glyphicon-map-marker:before{content:"\e062"}.ptx-runestone-container .glyphicon-adjust:before,.runestone-sphinx .glyphicon-adjust:before{content:"\e063"}.ptx-runestone-container .glyphicon-tint:before,.runestone-sphinx .glyphicon-tint:before{content:"\e064"}.ptx-runestone-container .glyphicon-edit:before,.runestone-sphinx .glyphicon-edit:before{content:"\e065"}.ptx-runestone-container .glyphicon-share:before,.runestone-sphinx .glyphicon-share:before{content:"\e066"}.ptx-runestone-container .glyphicon-check:before,.runestone-sphinx .glyphicon-check:before{content:"\e067"}.ptx-runestone-container .glyphicon-move:before,.runestone-sphinx .glyphicon-move:before{content:"\e068"}.ptx-runestone-container .glyphicon-step-backward:before,.runestone-sphinx .glyphicon-step-backward:before{content:"\e069"}.ptx-runestone-container .glyphicon-fast-backward:before,.runestone-sphinx .glyphicon-fast-backward:before{content:"\e070"}.ptx-runestone-container .glyphicon-backward:before,.runestone-sphinx .glyphicon-backward:before{content:"\e071"}.ptx-runestone-container .glyphicon-play:before,.runestone-sphinx .glyphicon-play:before{content:"\e072"}.ptx-runestone-container .glyphicon-pause:before,.runestone-sphinx .glyphicon-pause:before{content:"\e073"}.ptx-runestone-container .glyphicon-stop:before,.runestone-sphinx .glyphicon-stop:before{content:"\e074"}.ptx-runestone-container .glyphicon-forward:before,.runestone-sphinx .glyphicon-forward:before{content:"\e075"}.ptx-runestone-container .glyphicon-fast-forward:before,.runestone-sphinx .glyphicon-fast-forward:before{content:"\e076"}.ptx-runestone-container .glyphicon-step-forward:before,.runestone-sphinx .glyphicon-step-forward:before{content:"\e077"}.ptx-runestone-container .glyphicon-eject:before,.runestone-sphinx .glyphicon-eject:before{content:"\e078"}.ptx-runestone-container .glyphicon-chevron-left:before,.runestone-sphinx .glyphicon-chevron-left:before{content:"\e079"}.ptx-runestone-container .glyphicon-chevron-right:before,.runestone-sphinx .glyphicon-chevron-right:before{content:"\e080"}.ptx-runestone-container .glyphicon-plus-sign:before,.runestone-sphinx .glyphicon-plus-sign:before{content:"\e081"}.ptx-runestone-container .glyphicon-minus-sign:before,.runestone-sphinx .glyphicon-minus-sign:before{content:"\e082"}.ptx-runestone-container .glyphicon-remove-sign:before,.runestone-sphinx .glyphicon-remove-sign:before{content:"\e083"}.ptx-runestone-container .glyphicon-ok-sign:before,.runestone-sphinx .glyphicon-ok-sign:before{content:"\e084"}.ptx-runestone-container .glyphicon-question-sign:before,.runestone-sphinx .glyphicon-question-sign:before{content:"\e085"}.ptx-runestone-container .glyphicon-info-sign:before,.runestone-sphinx .glyphicon-info-sign:before{content:"\e086"}.ptx-runestone-container .glyphicon-screenshot:before,.runestone-sphinx .glyphicon-screenshot:before{content:"\e087"}.ptx-runestone-container .glyphicon-remove-circle:before,.runestone-sphinx .glyphicon-remove-circle:before{content:"\e088"}.ptx-runestone-container .glyphicon-ok-circle:before,.runestone-sphinx .glyphicon-ok-circle:before{content:"\e089"}.ptx-runestone-container .glyphicon-ban-circle:before,.runestone-sphinx .glyphicon-ban-circle:before{content:"\e090"}.ptx-runestone-container .glyphicon-arrow-left:before,.runestone-sphinx .glyphicon-arrow-left:before{content:"\e091"}.ptx-runestone-container .glyphicon-arrow-right:before,.runestone-sphinx .glyphicon-arrow-right:before{content:"\e092"}.ptx-runestone-container .glyphicon-arrow-up:before,.runestone-sphinx .glyphicon-arrow-up:before{content:"\e093"}.ptx-runestone-container .glyphicon-arrow-down:before,.runestone-sphinx .glyphicon-arrow-down:before{content:"\e094"}.ptx-runestone-container .glyphicon-share-alt:before,.runestone-sphinx .glyphicon-share-alt:before{content:"\e095"}.ptx-runestone-container .glyphicon-resize-full:before,.runestone-sphinx .glyphicon-resize-full:before{content:"\e096"}.ptx-runestone-container .glyphicon-resize-small:before,.runestone-sphinx .glyphicon-resize-small:before{content:"\e097"}.ptx-runestone-container .glyphicon-exclamation-sign:before,.runestone-sphinx .glyphicon-exclamation-sign:before{content:"\e101"}.ptx-runestone-container .glyphicon-gift:before,.runestone-sphinx .glyphicon-gift:before{content:"\e102"}.ptx-runestone-container .glyphicon-leaf:before,.runestone-sphinx .glyphicon-leaf:before{content:"\e103"}.ptx-runestone-container .glyphicon-fire:before,.runestone-sphinx .glyphicon-fire:before{content:"\e104"}.ptx-runestone-container .glyphicon-eye-open:before,.runestone-sphinx .glyphicon-eye-open:before{content:"\e105"}.ptx-runestone-container .glyphicon-eye-close:before,.runestone-sphinx .glyphicon-eye-close:before{content:"\e106"}.ptx-runestone-container .glyphicon-warning-sign:before,.runestone-sphinx .glyphicon-warning-sign:before{content:"\e107"}.ptx-runestone-container .glyphicon-plane:before,.runestone-sphinx .glyphicon-plane:before{content:"\e108"}.ptx-runestone-container .glyphicon-calendar:before,.runestone-sphinx .glyphicon-calendar:before{content:"\e109"}.ptx-runestone-container .glyphicon-random:before,.runestone-sphinx .glyphicon-random:before{content:"\e110"}.ptx-runestone-container .glyphicon-comment:before,.runestone-sphinx .glyphicon-comment:before{content:"\e111"}.ptx-runestone-container .glyphicon-magnet:before,.runestone-sphinx .glyphicon-magnet:before{content:"\e112"}.ptx-runestone-container .glyphicon-chevron-up:before,.runestone-sphinx .glyphicon-chevron-up:before{content:"\e113"}.ptx-runestone-container .glyphicon-chevron-down:before,.runestone-sphinx .glyphicon-chevron-down:before{content:"\e114"}.ptx-runestone-container .glyphicon-retweet:before,.runestone-sphinx .glyphicon-retweet:before{content:"\e115"}.ptx-runestone-container .glyphicon-shopping-cart:before,.runestone-sphinx .glyphicon-shopping-cart:before{content:"\e116"}.ptx-runestone-container .glyphicon-folder-close:before,.runestone-sphinx .glyphicon-folder-close:before{content:"\e117"}.ptx-runestone-container .glyphicon-folder-open:before,.runestone-sphinx .glyphicon-folder-open:before{content:"\e118"}.ptx-runestone-container .glyphicon-resize-vertical:before,.runestone-sphinx .glyphicon-resize-vertical:before{content:"\e119"}.ptx-runestone-container .glyphicon-resize-horizontal:before,.runestone-sphinx .glyphicon-resize-horizontal:before{content:"\e120"}.ptx-runestone-container .glyphicon-hdd:before,.runestone-sphinx .glyphicon-hdd:before{content:"\e121"}.ptx-runestone-container .glyphicon-bullhorn:before,.runestone-sphinx .glyphicon-bullhorn:before{content:"\e122"}.ptx-runestone-container .glyphicon-bell:before,.runestone-sphinx .glyphicon-bell:before{content:"\e123"}.ptx-runestone-container .glyphicon-certificate:before,.runestone-sphinx .glyphicon-certificate:before{content:"\e124"}.ptx-runestone-container .glyphicon-thumbs-up:before,.runestone-sphinx .glyphicon-thumbs-up:before{content:"\e125"}.ptx-runestone-container .glyphicon-thumbs-down:before,.runestone-sphinx .glyphicon-thumbs-down:before{content:"\e126"}.ptx-runestone-container .glyphicon-hand-right:before,.runestone-sphinx .glyphicon-hand-right:before{content:"\e127"}.ptx-runestone-container .glyphicon-hand-left:before,.runestone-sphinx .glyphicon-hand-left:before{content:"\e128"}.ptx-runestone-container .glyphicon-hand-up:before,.runestone-sphinx .glyphicon-hand-up:before{content:"\e129"}.ptx-runestone-container .glyphicon-hand-down:before,.runestone-sphinx .glyphicon-hand-down:before{content:"\e130"}.ptx-runestone-container .glyphicon-circle-arrow-right:before,.runestone-sphinx .glyphicon-circle-arrow-right:before{content:"\e131"}.ptx-runestone-container .glyphicon-circle-arrow-left:before,.runestone-sphinx .glyphicon-circle-arrow-left:before{content:"\e132"}.ptx-runestone-container .glyphicon-circle-arrow-up:before,.runestone-sphinx .glyphicon-circle-arrow-up:before{content:"\e133"}.ptx-runestone-container .glyphicon-circle-arrow-down:before,.runestone-sphinx .glyphicon-circle-arrow-down:before{content:"\e134"}.ptx-runestone-container .glyphicon-globe:before,.runestone-sphinx .glyphicon-globe:before{content:"\e135"}.ptx-runestone-container .glyphicon-wrench:before,.runestone-sphinx .glyphicon-wrench:before{content:"\e136"}.ptx-runestone-container .glyphicon-tasks:before,.runestone-sphinx .glyphicon-tasks:before{content:"\e137"}.ptx-runestone-container .glyphicon-filter:before,.runestone-sphinx .glyphicon-filter:before{content:"\e138"}.ptx-runestone-container .glyphicon-briefcase:before,.runestone-sphinx .glyphicon-briefcase:before{content:"\e139"}.ptx-runestone-container .glyphicon-fullscreen:before,.runestone-sphinx .glyphicon-fullscreen:before{content:"\e140"}.ptx-runestone-container .glyphicon-dashboard:before,.runestone-sphinx .glyphicon-dashboard:before{content:"\e141"}.ptx-runestone-container .glyphicon-paperclip:before,.runestone-sphinx .glyphicon-paperclip:before{content:"\e142"}.ptx-runestone-container .glyphicon-heart-empty:before,.runestone-sphinx .glyphicon-heart-empty:before{content:"\e143"}.ptx-runestone-container .glyphicon-link:before,.runestone-sphinx .glyphicon-link:before{content:"\e144"}.ptx-runestone-container .glyphicon-phone:before,.runestone-sphinx .glyphicon-phone:before{content:"\e145"}.ptx-runestone-container .glyphicon-pushpin:before,.runestone-sphinx .glyphicon-pushpin:before{content:"\e146"}.ptx-runestone-container .glyphicon-usd:before,.runestone-sphinx .glyphicon-usd:before{content:"\e148"}.ptx-runestone-container .glyphicon-gbp:before,.runestone-sphinx .glyphicon-gbp:before{content:"\e149"}.ptx-runestone-container .glyphicon-sort:before,.runestone-sphinx .glyphicon-sort:before{content:"\e150"}.ptx-runestone-container .glyphicon-sort-by-alphabet:before,.runestone-sphinx .glyphicon-sort-by-alphabet:before{content:"\e151"}.ptx-runestone-container .glyphicon-sort-by-alphabet-alt:before,.runestone-sphinx .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.ptx-runestone-container .glyphicon-sort-by-order:before,.runestone-sphinx .glyphicon-sort-by-order:before{content:"\e153"}.ptx-runestone-container .glyphicon-sort-by-order-alt:before,.runestone-sphinx .glyphicon-sort-by-order-alt:before{content:"\e154"}.ptx-runestone-container .glyphicon-sort-by-attributes:before,.runestone-sphinx .glyphicon-sort-by-attributes:before{content:"\e155"}.ptx-runestone-container .glyphicon-sort-by-attributes-alt:before,.runestone-sphinx .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.ptx-runestone-container .glyphicon-unchecked:before,.runestone-sphinx .glyphicon-unchecked:before{content:"\e157"}.ptx-runestone-container .glyphicon-expand:before,.runestone-sphinx .glyphicon-expand:before{content:"\e158"}.ptx-runestone-container .glyphicon-collapse-down:before,.runestone-sphinx .glyphicon-collapse-down:before{content:"\e159"}.ptx-runestone-container .glyphicon-collapse-up:before,.runestone-sphinx .glyphicon-collapse-up:before{content:"\e160"}.ptx-runestone-container .glyphicon-log-in:before,.runestone-sphinx .glyphicon-log-in:before{content:"\e161"}.ptx-runestone-container .glyphicon-flash:before,.runestone-sphinx .glyphicon-flash:before{content:"\e162"}.ptx-runestone-container .glyphicon-log-out:before,.runestone-sphinx .glyphicon-log-out:before{content:"\e163"}.ptx-runestone-container .glyphicon-new-window:before,.runestone-sphinx .glyphicon-new-window:before{content:"\e164"}.ptx-runestone-container .glyphicon-record:before,.runestone-sphinx .glyphicon-record:before{content:"\e165"}.ptx-runestone-container .glyphicon-save:before,.runestone-sphinx .glyphicon-save:before{content:"\e166"}.ptx-runestone-container .glyphicon-open:before,.runestone-sphinx .glyphicon-open:before{content:"\e167"}.ptx-runestone-container .glyphicon-saved:before,.runestone-sphinx .glyphicon-saved:before{content:"\e168"}.ptx-runestone-container .glyphicon-import:before,.runestone-sphinx .glyphicon-import:before{content:"\e169"}.ptx-runestone-container .glyphicon-export:before,.runestone-sphinx .glyphicon-export:before{content:"\e170"}.ptx-runestone-container .glyphicon-send:before,.runestone-sphinx .glyphicon-send:before{content:"\e171"}.ptx-runestone-container .glyphicon-floppy-disk:before,.runestone-sphinx .glyphicon-floppy-disk:before{content:"\e172"}.ptx-runestone-container .glyphicon-floppy-saved:before,.runestone-sphinx .glyphicon-floppy-saved:before{content:"\e173"}.ptx-runestone-container .glyphicon-floppy-remove:before,.runestone-sphinx .glyphicon-floppy-remove:before{content:"\e174"}.ptx-runestone-container .glyphicon-floppy-save:before,.runestone-sphinx .glyphicon-floppy-save:before{content:"\e175"}.ptx-runestone-container .glyphicon-floppy-open:before,.runestone-sphinx .glyphicon-floppy-open:before{content:"\e176"}.ptx-runestone-container .glyphicon-credit-card:before,.runestone-sphinx .glyphicon-credit-card:before{content:"\e177"}.ptx-runestone-container .glyphicon-transfer:before,.runestone-sphinx .glyphicon-transfer:before{content:"\e178"}.ptx-runestone-container .glyphicon-cutlery:before,.runestone-sphinx .glyphicon-cutlery:before{content:"\e179"}.ptx-runestone-container .glyphicon-header:before,.runestone-sphinx .glyphicon-header:before{content:"\e180"}.ptx-runestone-container .glyphicon-compressed:before,.runestone-sphinx .glyphicon-compressed:before{content:"\e181"}.ptx-runestone-container .glyphicon-earphone:before,.runestone-sphinx .glyphicon-earphone:before{content:"\e182"}.ptx-runestone-container .glyphicon-phone-alt:before,.runestone-sphinx .glyphicon-phone-alt:before{content:"\e183"}.ptx-runestone-container .glyphicon-tower:before,.runestone-sphinx .glyphicon-tower:before{content:"\e184"}.ptx-runestone-container .glyphicon-stats:before,.runestone-sphinx .glyphicon-stats:before{content:"\e185"}.ptx-runestone-container .glyphicon-sd-video:before,.runestone-sphinx .glyphicon-sd-video:before{content:"\e186"}.ptx-runestone-container .glyphicon-hd-video:before,.runestone-sphinx .glyphicon-hd-video:before{content:"\e187"}.ptx-runestone-container .glyphicon-subtitles:before,.runestone-sphinx .glyphicon-subtitles:before{content:"\e188"}.ptx-runestone-container .glyphicon-sound-stereo:before,.runestone-sphinx .glyphicon-sound-stereo:before{content:"\e189"}.ptx-runestone-container .glyphicon-sound-dolby:before,.runestone-sphinx .glyphicon-sound-dolby:before{content:"\e190"}.ptx-runestone-container .glyphicon-sound-5-1:before,.runestone-sphinx .glyphicon-sound-5-1:before{content:"\e191"}.ptx-runestone-container .glyphicon-sound-6-1:before,.runestone-sphinx .glyphicon-sound-6-1:before{content:"\e192"}.ptx-runestone-container .glyphicon-sound-7-1:before,.runestone-sphinx .glyphicon-sound-7-1:before{content:"\e193"}.ptx-runestone-container .glyphicon-copyright-mark:before,.runestone-sphinx .glyphicon-copyright-mark:before{content:"\e194"}.ptx-runestone-container .glyphicon-registration-mark:before,.runestone-sphinx .glyphicon-registration-mark:before{content:"\e195"}.ptx-runestone-container .glyphicon-cloud-download:before,.runestone-sphinx .glyphicon-cloud-download:before{content:"\e197"}.ptx-runestone-container .glyphicon-cloud-upload:before,.runestone-sphinx .glyphicon-cloud-upload:before{content:"\e198"}.ptx-runestone-container .glyphicon-tree-conifer:before,.runestone-sphinx .glyphicon-tree-conifer:before{content:"\e199"}.ptx-runestone-container .glyphicon-tree-deciduous:before,.runestone-sphinx .glyphicon-tree-deciduous:before{content:"\e200"}.ptx-runestone-container .glyphicon-cd:before,.runestone-sphinx .glyphicon-cd:before{content:"\e201"}.ptx-runestone-container .glyphicon-save-file:before,.runestone-sphinx .glyphicon-save-file:before{content:"\e202"}.ptx-runestone-container .glyphicon-open-file:before,.runestone-sphinx .glyphicon-open-file:before{content:"\e203"}.ptx-runestone-container .glyphicon-level-up:before,.runestone-sphinx .glyphicon-level-up:before{content:"\e204"}.ptx-runestone-container .glyphicon-copy:before,.runestone-sphinx .glyphicon-copy:before{content:"\e205"}.ptx-runestone-container .glyphicon-paste:before,.runestone-sphinx .glyphicon-paste:before{content:"\e206"}.ptx-runestone-container .glyphicon-alert:before,.runestone-sphinx .glyphicon-alert:before{content:"\e209"}.ptx-runestone-container .glyphicon-equalizer:before,.runestone-sphinx .glyphicon-equalizer:before{content:"\e210"}.ptx-runestone-container .glyphicon-king:before,.runestone-sphinx .glyphicon-king:before{content:"\e211"}.ptx-runestone-container .glyphicon-queen:before,.runestone-sphinx .glyphicon-queen:before{content:"\e212"}.ptx-runestone-container .glyphicon-pawn:before,.runestone-sphinx .glyphicon-pawn:before{content:"\e213"}.ptx-runestone-container .glyphicon-bishop:before,.runestone-sphinx .glyphicon-bishop:before{content:"\e214"}.ptx-runestone-container .glyphicon-knight:before,.runestone-sphinx .glyphicon-knight:before{content:"\e215"}.ptx-runestone-container .glyphicon-baby-formula:before,.runestone-sphinx .glyphicon-baby-formula:before{content:"\e216"}.ptx-runestone-container .glyphicon-tent:before,.runestone-sphinx .glyphicon-tent:before{content:"\26fa"}.ptx-runestone-container .glyphicon-blackboard:before,.runestone-sphinx .glyphicon-blackboard:before{content:"\e218"}.ptx-runestone-container .glyphicon-bed:before,.runestone-sphinx .glyphicon-bed:before{content:"\e219"}.ptx-runestone-container .glyphicon-apple:before,.runestone-sphinx .glyphicon-apple:before{content:"\f8ff"}.ptx-runestone-container .glyphicon-erase:before,.runestone-sphinx .glyphicon-erase:before{content:"\e221"}.ptx-runestone-container .glyphicon-hourglass:before,.runestone-sphinx .glyphicon-hourglass:before{content:"\231b"}.ptx-runestone-container .glyphicon-lamp:before,.runestone-sphinx .glyphicon-lamp:before{content:"\e223"}.ptx-runestone-container .glyphicon-duplicate:before,.runestone-sphinx .glyphicon-duplicate:before{content:"\e224"}.ptx-runestone-container .glyphicon-piggy-bank:before,.runestone-sphinx .glyphicon-piggy-bank:before{content:"\e225"}.ptx-runestone-container .glyphicon-scissors:before,.runestone-sphinx .glyphicon-scissors:before{content:"\e226"}.ptx-runestone-container .glyphicon-bitcoin:before,.ptx-runestone-container .glyphicon-btc:before,.ptx-runestone-container .glyphicon-xbt:before,.runestone-sphinx .glyphicon-bitcoin:before,.runestone-sphinx .glyphicon-btc:before,.runestone-sphinx .glyphicon-xbt:before{content:"\e227"}.ptx-runestone-container .glyphicon-jpy:before,.ptx-runestone-container .glyphicon-yen:before,.runestone-sphinx .glyphicon-jpy:before,.runestone-sphinx .glyphicon-yen:before{content:"\00a5"}.ptx-runestone-container .glyphicon-rub:before,.ptx-runestone-container .glyphicon-ruble:before,.runestone-sphinx .glyphicon-rub:before,.runestone-sphinx .glyphicon-ruble:before{content:"\20bd"}.ptx-runestone-container .glyphicon-scale:before,.runestone-sphinx .glyphicon-scale:before{content:"\e230"}.ptx-runestone-container .glyphicon-ice-lolly:before,.runestone-sphinx .glyphicon-ice-lolly:before{content:"\e231"}.ptx-runestone-container .glyphicon-ice-lolly-tasted:before,.runestone-sphinx .glyphicon-ice-lolly-tasted:before{content:"\e232"}.ptx-runestone-container .glyphicon-education:before,.runestone-sphinx .glyphicon-education:before{content:"\e233"}.ptx-runestone-container .glyphicon-option-horizontal:before,.runestone-sphinx .glyphicon-option-horizontal:before{content:"\e234"}.ptx-runestone-container .glyphicon-option-vertical:before,.runestone-sphinx .glyphicon-option-vertical:before{content:"\e235"}.ptx-runestone-container .glyphicon-menu-hamburger:before,.runestone-sphinx .glyphicon-menu-hamburger:before{content:"\e236"}.ptx-runestone-container .glyphicon-modal-window:before,.runestone-sphinx .glyphicon-modal-window:before{content:"\e237"}.ptx-runestone-container .glyphicon-oil:before,.runestone-sphinx .glyphicon-oil:before{content:"\e238"}.ptx-runestone-container .glyphicon-grain:before,.runestone-sphinx .glyphicon-grain:before{content:"\e239"}.ptx-runestone-container .glyphicon-sunglasses:before,.runestone-sphinx .glyphicon-sunglasses:before{content:"\e240"}.ptx-runestone-container .glyphicon-text-size:before,.runestone-sphinx .glyphicon-text-size:before{content:"\e241"}.ptx-runestone-container .glyphicon-text-color:before,.runestone-sphinx .glyphicon-text-color:before{content:"\e242"}.ptx-runestone-container .glyphicon-text-background:before,.runestone-sphinx .glyphicon-text-background:before{content:"\e243"}.ptx-runestone-container .glyphicon-object-align-top:before,.runestone-sphinx .glyphicon-object-align-top:before{content:"\e244"}.ptx-runestone-container .glyphicon-object-align-bottom:before,.runestone-sphinx .glyphicon-object-align-bottom:before{content:"\e245"}.ptx-runestone-container .glyphicon-object-align-horizontal:before,.runestone-sphinx .glyphicon-object-align-horizontal:before{content:"\e246"}.ptx-runestone-container .glyphicon-object-align-left:before,.runestone-sphinx .glyphicon-object-align-left:before{content:"\e247"}.ptx-runestone-container .glyphicon-object-align-vertical:before,.runestone-sphinx .glyphicon-object-align-vertical:before{content:"\e248"}.ptx-runestone-container .glyphicon-object-align-right:before,.runestone-sphinx .glyphicon-object-align-right:before{content:"\e249"}.ptx-runestone-container .glyphicon-triangle-right:before,.runestone-sphinx .glyphicon-triangle-right:before{content:"\e250"}.ptx-runestone-container .glyphicon-triangle-left:before,.runestone-sphinx .glyphicon-triangle-left:before{content:"\e251"}.ptx-runestone-container .glyphicon-triangle-bottom:before,.runestone-sphinx .glyphicon-triangle-bottom:before{content:"\e252"}.ptx-runestone-container .glyphicon-triangle-top:before,.runestone-sphinx .glyphicon-triangle-top:before{content:"\e253"}.ptx-runestone-container .glyphicon-console:before,.runestone-sphinx .glyphicon-console:before{content:"\e254"}.ptx-runestone-container .glyphicon-superscript:before,.runestone-sphinx .glyphicon-superscript:before{content:"\e255"}.ptx-runestone-container .glyphicon-subscript:before,.runestone-sphinx .glyphicon-subscript:before{content:"\e256"}.ptx-runestone-container .glyphicon-menu-left:before,.runestone-sphinx .glyphicon-menu-left:before{content:"\e257"}.ptx-runestone-container .glyphicon-menu-right:before,.runestone-sphinx .glyphicon-menu-right:before{content:"\e258"}.ptx-runestone-container .glyphicon-menu-down:before,.runestone-sphinx .glyphicon-menu-down:before{content:"\e259"}.ptx-runestone-container .glyphicon-menu-up:before,.runestone-sphinx .glyphicon-menu-up:before{content:"\e260"}.ptx-runestone-container *,.ptx-runestone-container :after,.ptx-runestone-container :before,.runestone-sphinx *,.runestone-sphinx :after,.runestone-sphinx :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ptx-runestone-container html,.runestone-sphinx html{-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:10px}.ptx-runestone-container body,.runestone-sphinx body{background-color:#fff;color:#333;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143}.ptx-runestone-container button,.ptx-runestone-container input,.ptx-runestone-container select,.ptx-runestone-container textarea,.runestone-sphinx button,.runestone-sphinx input,.runestone-sphinx select,.runestone-sphinx textarea{font-family:inherit;font-size:inherit;line-height:inherit}.ptx-runestone-container a,.runestone-sphinx a{color:#337ab7;text-decoration:none}.ptx-runestone-container a:focus,.ptx-runestone-container a:hover,.runestone-sphinx a:focus,.runestone-sphinx a:hover{color:#23527c;text-decoration:underline}.ptx-runestone-container a:focus,.runestone-sphinx a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ptx-runestone-container figure,.runestone-sphinx figure{margin:0}.ptx-runestone-container img,.runestone-sphinx img{vertical-align:middle}.ptx-runestone-container .carousel-inner>.item>a>img,.ptx-runestone-container .carousel-inner>.item>img,.ptx-runestone-container .img-responsive,.ptx-runestone-container .thumbnail a>img,.ptx-runestone-container .thumbnail>img,.runestone-sphinx .carousel-inner>.item>a>img,.runestone-sphinx .carousel-inner>.item>img,.runestone-sphinx .img-responsive,.runestone-sphinx .thumbnail a>img,.runestone-sphinx .thumbnail>img{display:block;height:auto;max-width:100%}.ptx-runestone-container .img-rounded,.runestone-sphinx .img-rounded{border-radius:6px}.ptx-runestone-container .img-thumbnail,.runestone-sphinx .img-thumbnail{background-color:#fff;border:1px solid #ddd;border-radius:4px;display:inline-block;height:auto;line-height:1.42857143;max-width:100%;padding:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ptx-runestone-container .img-circle,.runestone-sphinx .img-circle{border-radius:50%}.ptx-runestone-container hr,.runestone-sphinx hr{border:0;border-top:1px solid #eee;margin-bottom:20px;margin-top:20px}.ptx-runestone-container .sr-only,.runestone-sphinx .sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ptx-runestone-container .sr-only-focusable:active,.ptx-runestone-container .sr-only-focusable:focus,.runestone-sphinx .sr-only-focusable:active,.runestone-sphinx .sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.ptx-runestone-container [role=button],.runestone-sphinx [role=button]{cursor:pointer}.ptx-runestone-container .h1,.ptx-runestone-container .h2,.ptx-runestone-container .h3,.ptx-runestone-container .h4,.ptx-runestone-container .h5,.ptx-runestone-container .h6,.ptx-runestone-container h1,.ptx-runestone-container h2,.ptx-runestone-container h3,.ptx-runestone-container h4,.ptx-runestone-container h5,.ptx-runestone-container h6,.runestone-sphinx .h1,.runestone-sphinx .h2,.runestone-sphinx .h3,.runestone-sphinx .h4,.runestone-sphinx .h5,.runestone-sphinx .h6,.runestone-sphinx h1,.runestone-sphinx h2,.runestone-sphinx h3,.runestone-sphinx h4,.runestone-sphinx h5,.runestone-sphinx h6{color:inherit;font-family:inherit;font-weight:500;line-height:1.1}.ptx-runestone-container .h1 .small,.ptx-runestone-container .h1 small,.ptx-runestone-container .h2 .small,.ptx-runestone-container .h2 small,.ptx-runestone-container .h3 .small,.ptx-runestone-container .h3 small,.ptx-runestone-container .h4 .small,.ptx-runestone-container .h4 small,.ptx-runestone-container .h5 .small,.ptx-runestone-container .h5 small,.ptx-runestone-container .h6 .small,.ptx-runestone-container .h6 small,.ptx-runestone-container h1 .small,.ptx-runestone-container h1 small,.ptx-runestone-container h2 .small,.ptx-runestone-container h2 small,.ptx-runestone-container h3 .small,.ptx-runestone-container h3 small,.ptx-runestone-container h4 .small,.ptx-runestone-container h4 small,.ptx-runestone-container h5 .small,.ptx-runestone-container h5 small,.ptx-runestone-container h6 .small,.ptx-runestone-container h6 small,.runestone-sphinx .h1 .small,.runestone-sphinx .h1 small,.runestone-sphinx .h2 .small,.runestone-sphinx .h2 small,.runestone-sphinx .h3 .small,.runestone-sphinx .h3 small,.runestone-sphinx .h4 .small,.runestone-sphinx .h4 small,.runestone-sphinx .h5 .small,.runestone-sphinx .h5 small,.runestone-sphinx .h6 .small,.runestone-sphinx .h6 small,.runestone-sphinx h1 .small,.runestone-sphinx h1 small,.runestone-sphinx h2 .small,.runestone-sphinx h2 small,.runestone-sphinx h3 .small,.runestone-sphinx h3 small,.runestone-sphinx h4 .small,.runestone-sphinx h4 small,.runestone-sphinx h5 .small,.runestone-sphinx h5 small,.runestone-sphinx h6 .small,.runestone-sphinx h6 small{color:#777;font-weight:400;line-height:1}.ptx-runestone-container .h1,.ptx-runestone-container .h2,.ptx-runestone-container .h3,.ptx-runestone-container h1,.ptx-runestone-container h2,.ptx-runestone-container h3,.runestone-sphinx .h1,.runestone-sphinx .h2,.runestone-sphinx .h3,.runestone-sphinx h1,.runestone-sphinx h2,.runestone-sphinx h3{margin-bottom:10px;margin-top:20px}.ptx-runestone-container .h1 .small,.ptx-runestone-container .h1 small,.ptx-runestone-container .h2 .small,.ptx-runestone-container .h2 small,.ptx-runestone-container .h3 .small,.ptx-runestone-container .h3 small,.ptx-runestone-container h1 .small,.ptx-runestone-container h1 small,.ptx-runestone-container h2 .small,.ptx-runestone-container h2 small,.ptx-runestone-container h3 .small,.ptx-runestone-container h3 small,.runestone-sphinx .h1 .small,.runestone-sphinx .h1 small,.runestone-sphinx .h2 .small,.runestone-sphinx .h2 small,.runestone-sphinx .h3 .small,.runestone-sphinx .h3 small,.runestone-sphinx h1 .small,.runestone-sphinx h1 small,.runestone-sphinx h2 .small,.runestone-sphinx h2 small,.runestone-sphinx h3 .small,.runestone-sphinx h3 small{font-size:65%}.ptx-runestone-container .h4,.ptx-runestone-container .h5,.ptx-runestone-container .h6,.ptx-runestone-container h4,.ptx-runestone-container h5,.ptx-runestone-container h6,.runestone-sphinx .h4,.runestone-sphinx .h5,.runestone-sphinx .h6,.runestone-sphinx h4,.runestone-sphinx h5,.runestone-sphinx h6{margin-bottom:10px;margin-top:10px}.ptx-runestone-container .h4 .small,.ptx-runestone-container .h4 small,.ptx-runestone-container .h5 .small,.ptx-runestone-container .h5 small,.ptx-runestone-container .h6 .small,.ptx-runestone-container .h6 small,.ptx-runestone-container h4 .small,.ptx-runestone-container h4 small,.ptx-runestone-container h5 .small,.ptx-runestone-container h5 small,.ptx-runestone-container h6 .small,.ptx-runestone-container h6 small,.runestone-sphinx .h4 .small,.runestone-sphinx .h4 small,.runestone-sphinx .h5 .small,.runestone-sphinx .h5 small,.runestone-sphinx .h6 .small,.runestone-sphinx .h6 small,.runestone-sphinx h4 .small,.runestone-sphinx h4 small,.runestone-sphinx h5 .small,.runestone-sphinx h5 small,.runestone-sphinx h6 .small,.runestone-sphinx h6 small{font-size:75%}.ptx-runestone-container .h1,.ptx-runestone-container h1,.runestone-sphinx .h1,.runestone-sphinx h1{font-size:36px}.ptx-runestone-container .h2,.ptx-runestone-container h2,.runestone-sphinx .h2,.runestone-sphinx h2{font-size:30px}.ptx-runestone-container .h3,.ptx-runestone-container h3,.runestone-sphinx .h3,.runestone-sphinx h3{font-size:24px}.ptx-runestone-container .h4,.ptx-runestone-container h4,.runestone-sphinx .h4,.runestone-sphinx h4{font-size:18px}.ptx-runestone-container .h5,.ptx-runestone-container h5,.runestone-sphinx .h5,.runestone-sphinx h5{font-size:14px}.ptx-runestone-container .h6,.ptx-runestone-container h6,.runestone-sphinx .h6,.runestone-sphinx h6{font-size:12px}.ptx-runestone-container p,.runestone-sphinx p{margin:0 0 10px}.ptx-runestone-container .lead,.runestone-sphinx .lead{font-size:16px;font-weight:300;line-height:1.4;margin-bottom:20px}@media (min-width:768px){.ptx-runestone-container .lead,.runestone-sphinx .lead{font-size:21px}}.ptx-runestone-container .small,.ptx-runestone-container small,.runestone-sphinx .small,.runestone-sphinx small{font-size:85%}.ptx-runestone-container .mark,.ptx-runestone-container mark,.runestone-sphinx .mark,.runestone-sphinx mark{background-color:#fcf8e3;padding:.2em}.ptx-runestone-container .text-left,.runestone-sphinx .text-left{text-align:left}.ptx-runestone-container .text-right,.runestone-sphinx .text-right{text-align:right}.ptx-runestone-container .text-center,.runestone-sphinx .text-center{text-align:center}.ptx-runestone-container .text-justify,.runestone-sphinx .text-justify{text-align:justify}.ptx-runestone-container .text-nowrap,.runestone-sphinx .text-nowrap{white-space:nowrap}.ptx-runestone-container .text-lowercase,.runestone-sphinx .text-lowercase{text-transform:lowercase}.ptx-runestone-container .text-uppercase,.runestone-sphinx .text-uppercase{text-transform:uppercase}.ptx-runestone-container .text-capitalize,.runestone-sphinx .text-capitalize{text-transform:capitalize}.ptx-runestone-container .text-muted,.runestone-sphinx .text-muted{color:#777}.ptx-runestone-container .text-primary,.runestone-sphinx .text-primary{color:#337ab7}.ptx-runestone-container a.text-primary:focus,.ptx-runestone-container a.text-primary:hover,.runestone-sphinx a.text-primary:focus,.runestone-sphinx a.text-primary:hover{color:#286090}.ptx-runestone-container .text-success,.runestone-sphinx .text-success{color:#3c763d}.ptx-runestone-container a.text-success:focus,.ptx-runestone-container a.text-success:hover,.runestone-sphinx a.text-success:focus,.runestone-sphinx a.text-success:hover{color:#2b542c}.ptx-runestone-container .text-info,.runestone-sphinx .text-info{color:#31708f}.ptx-runestone-container a.text-info:focus,.ptx-runestone-container a.text-info:hover,.runestone-sphinx a.text-info:focus,.runestone-sphinx a.text-info:hover{color:#245269}.ptx-runestone-container .text-warning,.runestone-sphinx .text-warning{color:#8a6d3b}.ptx-runestone-container a.text-warning:focus,.ptx-runestone-container a.text-warning:hover,.runestone-sphinx a.text-warning:focus,.runestone-sphinx a.text-warning:hover{color:#66512c}.ptx-runestone-container .text-danger,.runestone-sphinx .text-danger{color:#a94442}.ptx-runestone-container a.text-danger:focus,.ptx-runestone-container a.text-danger:hover,.runestone-sphinx a.text-danger:focus,.runestone-sphinx a.text-danger:hover{color:#843534}.ptx-runestone-container .bg-primary,.runestone-sphinx .bg-primary{background-color:#337ab7;color:#fff}.ptx-runestone-container a.bg-primary:focus,.ptx-runestone-container a.bg-primary:hover,.runestone-sphinx a.bg-primary:focus,.runestone-sphinx a.bg-primary:hover{background-color:#286090}.ptx-runestone-container .bg-success,.runestone-sphinx .bg-success{background-color:#dff0d8}.ptx-runestone-container a.bg-success:focus,.ptx-runestone-container a.bg-success:hover,.runestone-sphinx a.bg-success:focus,.runestone-sphinx a.bg-success:hover{background-color:#c1e2b3}.ptx-runestone-container .bg-info,.runestone-sphinx .bg-info{background-color:#d9edf7}.ptx-runestone-container a.bg-info:focus,.ptx-runestone-container a.bg-info:hover,.runestone-sphinx a.bg-info:focus,.runestone-sphinx a.bg-info:hover{background-color:#afd9ee}.ptx-runestone-container .bg-warning,.runestone-sphinx .bg-warning{background-color:#fcf8e3}.ptx-runestone-container a.bg-warning:focus,.ptx-runestone-container a.bg-warning:hover,.runestone-sphinx a.bg-warning:focus,.runestone-sphinx a.bg-warning:hover{background-color:#f7ecb5}.ptx-runestone-container .bg-danger,.runestone-sphinx .bg-danger{background-color:#f2dede}.ptx-runestone-container a.bg-danger:focus,.ptx-runestone-container a.bg-danger:hover,.runestone-sphinx a.bg-danger:focus,.runestone-sphinx a.bg-danger:hover{background-color:#e4b9b9}.ptx-runestone-container .page-header,.runestone-sphinx .page-header{border-bottom:1px solid #eee;margin:40px 0 20px;padding-bottom:9px}.ptx-runestone-container ol,.ptx-runestone-container ul,.runestone-sphinx ol,.runestone-sphinx ul{margin-bottom:10px;margin-top:0}.ptx-runestone-container ol ol,.ptx-runestone-container ol ul,.ptx-runestone-container ul ol,.ptx-runestone-container ul ul,.runestone-sphinx ol ol,.runestone-sphinx ol ul,.runestone-sphinx ul ol,.runestone-sphinx ul ul{margin-bottom:0}.ptx-runestone-container .list-unstyled,.runestone-sphinx .list-unstyled{list-style:none;padding-left:0}.ptx-runestone-container .list-inline,.runestone-sphinx .list-inline{list-style:none;margin-left:-5px;padding-left:0}.ptx-runestone-container .list-inline>li,.runestone-sphinx .list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}.ptx-runestone-container dl,.runestone-sphinx dl{margin-bottom:20px;margin-top:0}.ptx-runestone-container dd,.ptx-runestone-container dt,.runestone-sphinx dd,.runestone-sphinx dt{line-height:1.42857143}.ptx-runestone-container dt,.runestone-sphinx dt{font-weight:700}.ptx-runestone-container dd,.runestone-sphinx dd{margin-left:0}@media (min-width:768px){.ptx-runestone-container .dl-horizontal dt,.runestone-sphinx .dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px}.ptx-runestone-container .dl-horizontal dd,.runestone-sphinx .dl-horizontal dd{margin-left:180px}}.ptx-runestone-container abbr[data-original-title],.ptx-runestone-container abbr[title],.runestone-sphinx abbr[data-original-title],.runestone-sphinx abbr[title]{cursor:help}.ptx-runestone-container .initialism,.runestone-sphinx .initialism{font-size:90%;text-transform:uppercase}.ptx-runestone-container blockquote,.runestone-sphinx blockquote{border-left:5px solid #eee;font-size:17.5px;margin:0 0 20px;padding:10px 20px}.ptx-runestone-container blockquote ol:last-child,.ptx-runestone-container blockquote p:last-child,.ptx-runestone-container blockquote ul:last-child,.runestone-sphinx blockquote ol:last-child,.runestone-sphinx blockquote p:last-child,.runestone-sphinx blockquote ul:last-child{margin-bottom:0}.ptx-runestone-container blockquote .small,.ptx-runestone-container blockquote footer,.ptx-runestone-container blockquote small,.runestone-sphinx blockquote .small,.runestone-sphinx blockquote footer,.runestone-sphinx blockquote small{color:#777;display:block;font-size:80%;line-height:1.42857143}.ptx-runestone-container blockquote .small:before,.ptx-runestone-container blockquote footer:before,.ptx-runestone-container blockquote small:before,.runestone-sphinx blockquote .small:before,.runestone-sphinx blockquote footer:before,.runestone-sphinx blockquote small:before{content:"\2014 \00A0"}.ptx-runestone-container .blockquote-reverse,.ptx-runestone-container blockquote.pull-right,.runestone-sphinx .blockquote-reverse,.runestone-sphinx blockquote.pull-right{border-left:0;border-right:5px solid #eee;padding-left:0;padding-right:15px;text-align:right}.ptx-runestone-container .blockquote-reverse .small:before,.ptx-runestone-container .blockquote-reverse footer:before,.ptx-runestone-container .blockquote-reverse small:before,.ptx-runestone-container blockquote.pull-right .small:before,.ptx-runestone-container blockquote.pull-right footer:before,.ptx-runestone-container blockquote.pull-right small:before,.runestone-sphinx .blockquote-reverse .small:before,.runestone-sphinx .blockquote-reverse footer:before,.runestone-sphinx .blockquote-reverse small:before,.runestone-sphinx blockquote.pull-right .small:before,.runestone-sphinx blockquote.pull-right footer:before,.runestone-sphinx blockquote.pull-right small:before{content:""}.ptx-runestone-container .blockquote-reverse .small:after,.ptx-runestone-container .blockquote-reverse footer:after,.ptx-runestone-container .blockquote-reverse small:after,.ptx-runestone-container blockquote.pull-right .small:after,.ptx-runestone-container blockquote.pull-right footer:after,.ptx-runestone-container blockquote.pull-right small:after,.runestone-sphinx .blockquote-reverse .small:after,.runestone-sphinx .blockquote-reverse footer:after,.runestone-sphinx .blockquote-reverse small:after,.runestone-sphinx blockquote.pull-right .small:after,.runestone-sphinx blockquote.pull-right footer:after,.runestone-sphinx blockquote.pull-right small:after{content:"\00A0 \2014"}.ptx-runestone-container address,.runestone-sphinx address{font-style:normal;line-height:1.42857143;margin-bottom:20px}.ptx-runestone-container code,.ptx-runestone-container kbd,.ptx-runestone-container pre,.ptx-runestone-container samp,.runestone-sphinx code,.runestone-sphinx kbd,.runestone-sphinx pre,.runestone-sphinx samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.ptx-runestone-container code,.runestone-sphinx code{background-color:#f9f2f4;border-radius:4px;color:#c7254e;font-size:90%;padding:2px 4px}.ptx-runestone-container kbd,.runestone-sphinx kbd{background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);color:#fff;font-size:90%;padding:2px 4px}.ptx-runestone-container kbd kbd,.runestone-sphinx kbd kbd{-webkit-box-shadow:none;box-shadow:none;font-size:100%;font-weight:700;padding:0}.ptx-runestone-container pre,.runestone-sphinx pre{word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px;color:#333;display:block;font-size:13px;line-height:1.42857143;margin:0 0 10px;padding:9.5px;word-break:break-all}.ptx-runestone-container pre code,.runestone-sphinx pre code{background-color:transparent;border-radius:0;color:inherit;font-size:inherit;padding:0;white-space:pre-wrap}.ptx-runestone-container .pre-scrollable,.runestone-sphinx .pre-scrollable{max-height:340px;overflow-y:scroll}.ptx-runestone-container .container,.runestone-sphinx .container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.ptx-runestone-container .container,.runestone-sphinx .container{width:750px}}@media (min-width:992px){.ptx-runestone-container .container,.runestone-sphinx .container{width:970px}}@media (min-width:1200px){.ptx-runestone-container .container,.runestone-sphinx .container{width:1170px}}.ptx-runestone-container .container-fluid,.runestone-sphinx .container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.ptx-runestone-container .row,.runestone-sphinx .row{margin-left:-15px;margin-right:-15px}.ptx-runestone-container .row-no-gutters,.runestone-sphinx .row-no-gutters{margin-left:0;margin-right:0}.ptx-runestone-container .row-no-gutters [class*=col-],.runestone-sphinx .row-no-gutters [class*=col-]{padding-left:0;padding-right:0}.ptx-runestone-container .col-lg-1,.ptx-runestone-container .col-lg-10,.ptx-runestone-container .col-lg-11,.ptx-runestone-container .col-lg-12,.ptx-runestone-container .col-lg-2,.ptx-runestone-container .col-lg-3,.ptx-runestone-container .col-lg-4,.ptx-runestone-container .col-lg-5,.ptx-runestone-container .col-lg-6,.ptx-runestone-container .col-lg-7,.ptx-runestone-container .col-lg-8,.ptx-runestone-container .col-lg-9,.ptx-runestone-container .col-md-1,.ptx-runestone-container .col-md-10,.ptx-runestone-container .col-md-11,.ptx-runestone-container .col-md-12,.ptx-runestone-container .col-md-2,.ptx-runestone-container .col-md-3,.ptx-runestone-container .col-md-4,.ptx-runestone-container .col-md-5,.ptx-runestone-container .col-md-6,.ptx-runestone-container .col-md-7,.ptx-runestone-container .col-md-8,.ptx-runestone-container .col-md-9,.ptx-runestone-container .col-sm-1,.ptx-runestone-container .col-sm-10,.ptx-runestone-container .col-sm-11,.ptx-runestone-container .col-sm-12,.ptx-runestone-container .col-sm-2,.ptx-runestone-container .col-sm-3,.ptx-runestone-container .col-sm-4,.ptx-runestone-container .col-sm-5,.ptx-runestone-container .col-sm-6,.ptx-runestone-container .col-sm-7,.ptx-runestone-container .col-sm-8,.ptx-runestone-container .col-sm-9,.ptx-runestone-container .col-xs-1,.ptx-runestone-container .col-xs-10,.ptx-runestone-container .col-xs-11,.ptx-runestone-container .col-xs-12,.ptx-runestone-container .col-xs-2,.ptx-runestone-container .col-xs-3,.ptx-runestone-container .col-xs-4,.ptx-runestone-container .col-xs-5,.ptx-runestone-container .col-xs-6,.ptx-runestone-container .col-xs-7,.ptx-runestone-container .col-xs-8,.ptx-runestone-container .col-xs-9,.runestone-sphinx .col-lg-1,.runestone-sphinx .col-lg-10,.runestone-sphinx .col-lg-11,.runestone-sphinx .col-lg-12,.runestone-sphinx .col-lg-2,.runestone-sphinx .col-lg-3,.runestone-sphinx .col-lg-4,.runestone-sphinx .col-lg-5,.runestone-sphinx .col-lg-6,.runestone-sphinx .col-lg-7,.runestone-sphinx .col-lg-8,.runestone-sphinx .col-lg-9,.runestone-sphinx .col-md-1,.runestone-sphinx .col-md-10,.runestone-sphinx .col-md-11,.runestone-sphinx .col-md-12,.runestone-sphinx .col-md-2,.runestone-sphinx .col-md-3,.runestone-sphinx .col-md-4,.runestone-sphinx .col-md-5,.runestone-sphinx .col-md-6,.runestone-sphinx .col-md-7,.runestone-sphinx .col-md-8,.runestone-sphinx .col-md-9,.runestone-sphinx .col-sm-1,.runestone-sphinx .col-sm-10,.runestone-sphinx .col-sm-11,.runestone-sphinx .col-sm-12,.runestone-sphinx .col-sm-2,.runestone-sphinx .col-sm-3,.runestone-sphinx .col-sm-4,.runestone-sphinx .col-sm-5,.runestone-sphinx .col-sm-6,.runestone-sphinx .col-sm-7,.runestone-sphinx .col-sm-8,.runestone-sphinx .col-sm-9,.runestone-sphinx .col-xs-1,.runestone-sphinx .col-xs-10,.runestone-sphinx .col-xs-11,.runestone-sphinx .col-xs-12,.runestone-sphinx .col-xs-2,.runestone-sphinx .col-xs-3,.runestone-sphinx .col-xs-4,.runestone-sphinx .col-xs-5,.runestone-sphinx .col-xs-6,.runestone-sphinx .col-xs-7,.runestone-sphinx .col-xs-8,.runestone-sphinx .col-xs-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.ptx-runestone-container .col-xs-1,.ptx-runestone-container .col-xs-10,.ptx-runestone-container .col-xs-11,.ptx-runestone-container .col-xs-12,.ptx-runestone-container .col-xs-2,.ptx-runestone-container .col-xs-3,.ptx-runestone-container .col-xs-4,.ptx-runestone-container .col-xs-5,.ptx-runestone-container .col-xs-6,.ptx-runestone-container .col-xs-7,.ptx-runestone-container .col-xs-8,.ptx-runestone-container .col-xs-9,.runestone-sphinx .col-xs-1,.runestone-sphinx .col-xs-10,.runestone-sphinx .col-xs-11,.runestone-sphinx .col-xs-12,.runestone-sphinx .col-xs-2,.runestone-sphinx .col-xs-3,.runestone-sphinx .col-xs-4,.runestone-sphinx .col-xs-5,.runestone-sphinx .col-xs-6,.runestone-sphinx .col-xs-7,.runestone-sphinx .col-xs-8,.runestone-sphinx .col-xs-9{float:left}.ptx-runestone-container .col-xs-12,.runestone-sphinx .col-xs-12{width:100%}.ptx-runestone-container .col-xs-11,.runestone-sphinx .col-xs-11{width:91.66666667%}.ptx-runestone-container .col-xs-10,.runestone-sphinx .col-xs-10{width:83.33333333%}.ptx-runestone-container .col-xs-9,.runestone-sphinx .col-xs-9{width:75%}.ptx-runestone-container .col-xs-8,.runestone-sphinx .col-xs-8{width:66.66666667%}.ptx-runestone-container .col-xs-7,.runestone-sphinx .col-xs-7{width:58.33333333%}.ptx-runestone-container .col-xs-6,.runestone-sphinx .col-xs-6{width:50%}.ptx-runestone-container .col-xs-5,.runestone-sphinx .col-xs-5{width:41.66666667%}.ptx-runestone-container .col-xs-4,.runestone-sphinx .col-xs-4{width:33.33333333%}.ptx-runestone-container .col-xs-3,.runestone-sphinx .col-xs-3{width:25%}.ptx-runestone-container .col-xs-2,.runestone-sphinx .col-xs-2{width:16.66666667%}.ptx-runestone-container .col-xs-1,.runestone-sphinx .col-xs-1{width:8.33333333%}.ptx-runestone-container .col-xs-pull-12,.runestone-sphinx .col-xs-pull-12{right:100%}.ptx-runestone-container .col-xs-pull-11,.runestone-sphinx .col-xs-pull-11{right:91.66666667%}.ptx-runestone-container .col-xs-pull-10,.runestone-sphinx .col-xs-pull-10{right:83.33333333%}.ptx-runestone-container .col-xs-pull-9,.runestone-sphinx .col-xs-pull-9{right:75%}.ptx-runestone-container .col-xs-pull-8,.runestone-sphinx .col-xs-pull-8{right:66.66666667%}.ptx-runestone-container .col-xs-pull-7,.runestone-sphinx .col-xs-pull-7{right:58.33333333%}.ptx-runestone-container .col-xs-pull-6,.runestone-sphinx .col-xs-pull-6{right:50%}.ptx-runestone-container .col-xs-pull-5,.runestone-sphinx .col-xs-pull-5{right:41.66666667%}.ptx-runestone-container .col-xs-pull-4,.runestone-sphinx .col-xs-pull-4{right:33.33333333%}.ptx-runestone-container .col-xs-pull-3,.runestone-sphinx .col-xs-pull-3{right:25%}.ptx-runestone-container .col-xs-pull-2,.runestone-sphinx .col-xs-pull-2{right:16.66666667%}.ptx-runestone-container .col-xs-pull-1,.runestone-sphinx .col-xs-pull-1{right:8.33333333%}.ptx-runestone-container .col-xs-pull-0,.runestone-sphinx .col-xs-pull-0{right:auto}.ptx-runestone-container .col-xs-push-12,.runestone-sphinx .col-xs-push-12{left:100%}.ptx-runestone-container .col-xs-push-11,.runestone-sphinx .col-xs-push-11{left:91.66666667%}.ptx-runestone-container .col-xs-push-10,.runestone-sphinx .col-xs-push-10{left:83.33333333%}.ptx-runestone-container .col-xs-push-9,.runestone-sphinx .col-xs-push-9{left:75%}.ptx-runestone-container .col-xs-push-8,.runestone-sphinx .col-xs-push-8{left:66.66666667%}.ptx-runestone-container .col-xs-push-7,.runestone-sphinx .col-xs-push-7{left:58.33333333%}.ptx-runestone-container .col-xs-push-6,.runestone-sphinx .col-xs-push-6{left:50%}.ptx-runestone-container .col-xs-push-5,.runestone-sphinx .col-xs-push-5{left:41.66666667%}.ptx-runestone-container .col-xs-push-4,.runestone-sphinx .col-xs-push-4{left:33.33333333%}.ptx-runestone-container .col-xs-push-3,.runestone-sphinx .col-xs-push-3{left:25%}.ptx-runestone-container .col-xs-push-2,.runestone-sphinx .col-xs-push-2{left:16.66666667%}.ptx-runestone-container .col-xs-push-1,.runestone-sphinx .col-xs-push-1{left:8.33333333%}.ptx-runestone-container .col-xs-push-0,.runestone-sphinx .col-xs-push-0{left:auto}.ptx-runestone-container .col-xs-offset-12,.runestone-sphinx .col-xs-offset-12{margin-left:100%}.ptx-runestone-container .col-xs-offset-11,.runestone-sphinx .col-xs-offset-11{margin-left:91.66666667%}.ptx-runestone-container .col-xs-offset-10,.runestone-sphinx .col-xs-offset-10{margin-left:83.33333333%}.ptx-runestone-container .col-xs-offset-9,.runestone-sphinx .col-xs-offset-9{margin-left:75%}.ptx-runestone-container .col-xs-offset-8,.runestone-sphinx .col-xs-offset-8{margin-left:66.66666667%}.ptx-runestone-container .col-xs-offset-7,.runestone-sphinx .col-xs-offset-7{margin-left:58.33333333%}.ptx-runestone-container .col-xs-offset-6,.runestone-sphinx .col-xs-offset-6{margin-left:50%}.ptx-runestone-container .col-xs-offset-5,.runestone-sphinx .col-xs-offset-5{margin-left:41.66666667%}.ptx-runestone-container .col-xs-offset-4,.runestone-sphinx .col-xs-offset-4{margin-left:33.33333333%}.ptx-runestone-container .col-xs-offset-3,.runestone-sphinx .col-xs-offset-3{margin-left:25%}.ptx-runestone-container .col-xs-offset-2,.runestone-sphinx .col-xs-offset-2{margin-left:16.66666667%}.ptx-runestone-container .col-xs-offset-1,.runestone-sphinx .col-xs-offset-1{margin-left:8.33333333%}.ptx-runestone-container .col-xs-offset-0,.runestone-sphinx .col-xs-offset-0{margin-left:0}@media (min-width:768px){.ptx-runestone-container .col-sm-1,.ptx-runestone-container .col-sm-10,.ptx-runestone-container .col-sm-11,.ptx-runestone-container .col-sm-12,.ptx-runestone-container .col-sm-2,.ptx-runestone-container .col-sm-3,.ptx-runestone-container .col-sm-4,.ptx-runestone-container .col-sm-5,.ptx-runestone-container .col-sm-6,.ptx-runestone-container .col-sm-7,.ptx-runestone-container .col-sm-8,.ptx-runestone-container .col-sm-9,.runestone-sphinx .col-sm-1,.runestone-sphinx .col-sm-10,.runestone-sphinx .col-sm-11,.runestone-sphinx .col-sm-12,.runestone-sphinx .col-sm-2,.runestone-sphinx .col-sm-3,.runestone-sphinx .col-sm-4,.runestone-sphinx .col-sm-5,.runestone-sphinx .col-sm-6,.runestone-sphinx .col-sm-7,.runestone-sphinx .col-sm-8,.runestone-sphinx .col-sm-9{float:left}.ptx-runestone-container .col-sm-12,.runestone-sphinx .col-sm-12{width:100%}.ptx-runestone-container .col-sm-11,.runestone-sphinx .col-sm-11{width:91.66666667%}.ptx-runestone-container .col-sm-10,.runestone-sphinx .col-sm-10{width:83.33333333%}.ptx-runestone-container .col-sm-9,.runestone-sphinx .col-sm-9{width:75%}.ptx-runestone-container .col-sm-8,.runestone-sphinx .col-sm-8{width:66.66666667%}.ptx-runestone-container .col-sm-7,.runestone-sphinx .col-sm-7{width:58.33333333%}.ptx-runestone-container .col-sm-6,.runestone-sphinx .col-sm-6{width:50%}.ptx-runestone-container .col-sm-5,.runestone-sphinx .col-sm-5{width:41.66666667%}.ptx-runestone-container .col-sm-4,.runestone-sphinx .col-sm-4{width:33.33333333%}.ptx-runestone-container .col-sm-3,.runestone-sphinx .col-sm-3{width:25%}.ptx-runestone-container .col-sm-2,.runestone-sphinx .col-sm-2{width:16.66666667%}.ptx-runestone-container .col-sm-1,.runestone-sphinx .col-sm-1{width:8.33333333%}.ptx-runestone-container .col-sm-pull-12,.runestone-sphinx .col-sm-pull-12{right:100%}.ptx-runestone-container .col-sm-pull-11,.runestone-sphinx .col-sm-pull-11{right:91.66666667%}.ptx-runestone-container .col-sm-pull-10,.runestone-sphinx .col-sm-pull-10{right:83.33333333%}.ptx-runestone-container .col-sm-pull-9,.runestone-sphinx .col-sm-pull-9{right:75%}.ptx-runestone-container .col-sm-pull-8,.runestone-sphinx .col-sm-pull-8{right:66.66666667%}.ptx-runestone-container .col-sm-pull-7,.runestone-sphinx .col-sm-pull-7{right:58.33333333%}.ptx-runestone-container .col-sm-pull-6,.runestone-sphinx .col-sm-pull-6{right:50%}.ptx-runestone-container .col-sm-pull-5,.runestone-sphinx .col-sm-pull-5{right:41.66666667%}.ptx-runestone-container .col-sm-pull-4,.runestone-sphinx .col-sm-pull-4{right:33.33333333%}.ptx-runestone-container .col-sm-pull-3,.runestone-sphinx .col-sm-pull-3{right:25%}.ptx-runestone-container .col-sm-pull-2,.runestone-sphinx .col-sm-pull-2{right:16.66666667%}.ptx-runestone-container .col-sm-pull-1,.runestone-sphinx .col-sm-pull-1{right:8.33333333%}.ptx-runestone-container .col-sm-pull-0,.runestone-sphinx .col-sm-pull-0{right:auto}.ptx-runestone-container .col-sm-push-12,.runestone-sphinx .col-sm-push-12{left:100%}.ptx-runestone-container .col-sm-push-11,.runestone-sphinx .col-sm-push-11{left:91.66666667%}.ptx-runestone-container .col-sm-push-10,.runestone-sphinx .col-sm-push-10{left:83.33333333%}.ptx-runestone-container .col-sm-push-9,.runestone-sphinx .col-sm-push-9{left:75%}.ptx-runestone-container .col-sm-push-8,.runestone-sphinx .col-sm-push-8{left:66.66666667%}.ptx-runestone-container .col-sm-push-7,.runestone-sphinx .col-sm-push-7{left:58.33333333%}.ptx-runestone-container .col-sm-push-6,.runestone-sphinx .col-sm-push-6{left:50%}.ptx-runestone-container .col-sm-push-5,.runestone-sphinx .col-sm-push-5{left:41.66666667%}.ptx-runestone-container .col-sm-push-4,.runestone-sphinx .col-sm-push-4{left:33.33333333%}.ptx-runestone-container .col-sm-push-3,.runestone-sphinx .col-sm-push-3{left:25%}.ptx-runestone-container .col-sm-push-2,.runestone-sphinx .col-sm-push-2{left:16.66666667%}.ptx-runestone-container .col-sm-push-1,.runestone-sphinx .col-sm-push-1{left:8.33333333%}.ptx-runestone-container .col-sm-push-0,.runestone-sphinx .col-sm-push-0{left:auto}.ptx-runestone-container .col-sm-offset-12,.runestone-sphinx .col-sm-offset-12{margin-left:100%}.ptx-runestone-container .col-sm-offset-11,.runestone-sphinx .col-sm-offset-11{margin-left:91.66666667%}.ptx-runestone-container .col-sm-offset-10,.runestone-sphinx .col-sm-offset-10{margin-left:83.33333333%}.ptx-runestone-container .col-sm-offset-9,.runestone-sphinx .col-sm-offset-9{margin-left:75%}.ptx-runestone-container .col-sm-offset-8,.runestone-sphinx .col-sm-offset-8{margin-left:66.66666667%}.ptx-runestone-container .col-sm-offset-7,.runestone-sphinx .col-sm-offset-7{margin-left:58.33333333%}.ptx-runestone-container .col-sm-offset-6,.runestone-sphinx .col-sm-offset-6{margin-left:50%}.ptx-runestone-container .col-sm-offset-5,.runestone-sphinx .col-sm-offset-5{margin-left:41.66666667%}.ptx-runestone-container .col-sm-offset-4,.runestone-sphinx .col-sm-offset-4{margin-left:33.33333333%}.ptx-runestone-container .col-sm-offset-3,.runestone-sphinx .col-sm-offset-3{margin-left:25%}.ptx-runestone-container .col-sm-offset-2,.runestone-sphinx .col-sm-offset-2{margin-left:16.66666667%}.ptx-runestone-container .col-sm-offset-1,.runestone-sphinx .col-sm-offset-1{margin-left:8.33333333%}.ptx-runestone-container .col-sm-offset-0,.runestone-sphinx .col-sm-offset-0{margin-left:0}}@media (min-width:992px){.ptx-runestone-container .col-md-1,.ptx-runestone-container .col-md-10,.ptx-runestone-container .col-md-11,.ptx-runestone-container .col-md-12,.ptx-runestone-container .col-md-2,.ptx-runestone-container .col-md-3,.ptx-runestone-container .col-md-4,.ptx-runestone-container .col-md-5,.ptx-runestone-container .col-md-6,.ptx-runestone-container .col-md-7,.ptx-runestone-container .col-md-8,.ptx-runestone-container .col-md-9,.runestone-sphinx .col-md-1,.runestone-sphinx .col-md-10,.runestone-sphinx .col-md-11,.runestone-sphinx .col-md-12,.runestone-sphinx .col-md-2,.runestone-sphinx .col-md-3,.runestone-sphinx .col-md-4,.runestone-sphinx .col-md-5,.runestone-sphinx .col-md-6,.runestone-sphinx .col-md-7,.runestone-sphinx .col-md-8,.runestone-sphinx .col-md-9{float:left}.ptx-runestone-container .col-md-12,.runestone-sphinx .col-md-12{width:100%}.ptx-runestone-container .col-md-11,.runestone-sphinx .col-md-11{width:91.66666667%}.ptx-runestone-container .col-md-10,.runestone-sphinx .col-md-10{width:83.33333333%}.ptx-runestone-container .col-md-9,.runestone-sphinx .col-md-9{width:75%}.ptx-runestone-container .col-md-8,.runestone-sphinx .col-md-8{width:66.66666667%}.ptx-runestone-container .col-md-7,.runestone-sphinx .col-md-7{width:58.33333333%}.ptx-runestone-container .col-md-6,.runestone-sphinx .col-md-6{width:50%}.ptx-runestone-container .col-md-5,.runestone-sphinx .col-md-5{width:41.66666667%}.ptx-runestone-container .col-md-4,.runestone-sphinx .col-md-4{width:33.33333333%}.ptx-runestone-container .col-md-3,.runestone-sphinx .col-md-3{width:25%}.ptx-runestone-container .col-md-2,.runestone-sphinx .col-md-2{width:16.66666667%}.ptx-runestone-container .col-md-1,.runestone-sphinx .col-md-1{width:8.33333333%}.ptx-runestone-container .col-md-pull-12,.runestone-sphinx .col-md-pull-12{right:100%}.ptx-runestone-container .col-md-pull-11,.runestone-sphinx .col-md-pull-11{right:91.66666667%}.ptx-runestone-container .col-md-pull-10,.runestone-sphinx .col-md-pull-10{right:83.33333333%}.ptx-runestone-container .col-md-pull-9,.runestone-sphinx .col-md-pull-9{right:75%}.ptx-runestone-container .col-md-pull-8,.runestone-sphinx .col-md-pull-8{right:66.66666667%}.ptx-runestone-container .col-md-pull-7,.runestone-sphinx .col-md-pull-7{right:58.33333333%}.ptx-runestone-container .col-md-pull-6,.runestone-sphinx .col-md-pull-6{right:50%}.ptx-runestone-container .col-md-pull-5,.runestone-sphinx .col-md-pull-5{right:41.66666667%}.ptx-runestone-container .col-md-pull-4,.runestone-sphinx .col-md-pull-4{right:33.33333333%}.ptx-runestone-container .col-md-pull-3,.runestone-sphinx .col-md-pull-3{right:25%}.ptx-runestone-container .col-md-pull-2,.runestone-sphinx .col-md-pull-2{right:16.66666667%}.ptx-runestone-container .col-md-pull-1,.runestone-sphinx .col-md-pull-1{right:8.33333333%}.ptx-runestone-container .col-md-pull-0,.runestone-sphinx .col-md-pull-0{right:auto}.ptx-runestone-container .col-md-push-12,.runestone-sphinx .col-md-push-12{left:100%}.ptx-runestone-container .col-md-push-11,.runestone-sphinx .col-md-push-11{left:91.66666667%}.ptx-runestone-container .col-md-push-10,.runestone-sphinx .col-md-push-10{left:83.33333333%}.ptx-runestone-container .col-md-push-9,.runestone-sphinx .col-md-push-9{left:75%}.ptx-runestone-container .col-md-push-8,.runestone-sphinx .col-md-push-8{left:66.66666667%}.ptx-runestone-container .col-md-push-7,.runestone-sphinx .col-md-push-7{left:58.33333333%}.ptx-runestone-container .col-md-push-6,.runestone-sphinx .col-md-push-6{left:50%}.ptx-runestone-container .col-md-push-5,.runestone-sphinx .col-md-push-5{left:41.66666667%}.ptx-runestone-container .col-md-push-4,.runestone-sphinx .col-md-push-4{left:33.33333333%}.ptx-runestone-container .col-md-push-3,.runestone-sphinx .col-md-push-3{left:25%}.ptx-runestone-container .col-md-push-2,.runestone-sphinx .col-md-push-2{left:16.66666667%}.ptx-runestone-container .col-md-push-1,.runestone-sphinx .col-md-push-1{left:8.33333333%}.ptx-runestone-container .col-md-push-0,.runestone-sphinx .col-md-push-0{left:auto}.ptx-runestone-container .col-md-offset-12,.runestone-sphinx .col-md-offset-12{margin-left:100%}.ptx-runestone-container .col-md-offset-11,.runestone-sphinx .col-md-offset-11{margin-left:91.66666667%}.ptx-runestone-container .col-md-offset-10,.runestone-sphinx .col-md-offset-10{margin-left:83.33333333%}.ptx-runestone-container .col-md-offset-9,.runestone-sphinx .col-md-offset-9{margin-left:75%}.ptx-runestone-container .col-md-offset-8,.runestone-sphinx .col-md-offset-8{margin-left:66.66666667%}.ptx-runestone-container .col-md-offset-7,.runestone-sphinx .col-md-offset-7{margin-left:58.33333333%}.ptx-runestone-container .col-md-offset-6,.runestone-sphinx .col-md-offset-6{margin-left:50%}.ptx-runestone-container .col-md-offset-5,.runestone-sphinx .col-md-offset-5{margin-left:41.66666667%}.ptx-runestone-container .col-md-offset-4,.runestone-sphinx .col-md-offset-4{margin-left:33.33333333%}.ptx-runestone-container .col-md-offset-3,.runestone-sphinx .col-md-offset-3{margin-left:25%}.ptx-runestone-container .col-md-offset-2,.runestone-sphinx .col-md-offset-2{margin-left:16.66666667%}.ptx-runestone-container .col-md-offset-1,.runestone-sphinx .col-md-offset-1{margin-left:8.33333333%}.ptx-runestone-container .col-md-offset-0,.runestone-sphinx .col-md-offset-0{margin-left:0}}@media (min-width:1200px){.ptx-runestone-container .col-lg-1,.ptx-runestone-container .col-lg-10,.ptx-runestone-container .col-lg-11,.ptx-runestone-container .col-lg-12,.ptx-runestone-container .col-lg-2,.ptx-runestone-container .col-lg-3,.ptx-runestone-container .col-lg-4,.ptx-runestone-container .col-lg-5,.ptx-runestone-container .col-lg-6,.ptx-runestone-container .col-lg-7,.ptx-runestone-container .col-lg-8,.ptx-runestone-container .col-lg-9,.runestone-sphinx .col-lg-1,.runestone-sphinx .col-lg-10,.runestone-sphinx .col-lg-11,.runestone-sphinx .col-lg-12,.runestone-sphinx .col-lg-2,.runestone-sphinx .col-lg-3,.runestone-sphinx .col-lg-4,.runestone-sphinx .col-lg-5,.runestone-sphinx .col-lg-6,.runestone-sphinx .col-lg-7,.runestone-sphinx .col-lg-8,.runestone-sphinx .col-lg-9{float:left}.ptx-runestone-container .col-lg-12,.runestone-sphinx .col-lg-12{width:100%}.ptx-runestone-container .col-lg-11,.runestone-sphinx .col-lg-11{width:91.66666667%}.ptx-runestone-container .col-lg-10,.runestone-sphinx .col-lg-10{width:83.33333333%}.ptx-runestone-container .col-lg-9,.runestone-sphinx .col-lg-9{width:75%}.ptx-runestone-container .col-lg-8,.runestone-sphinx .col-lg-8{width:66.66666667%}.ptx-runestone-container .col-lg-7,.runestone-sphinx .col-lg-7{width:58.33333333%}.ptx-runestone-container .col-lg-6,.runestone-sphinx .col-lg-6{width:50%}.ptx-runestone-container .col-lg-5,.runestone-sphinx .col-lg-5{width:41.66666667%}.ptx-runestone-container .col-lg-4,.runestone-sphinx .col-lg-4{width:33.33333333%}.ptx-runestone-container .col-lg-3,.runestone-sphinx .col-lg-3{width:25%}.ptx-runestone-container .col-lg-2,.runestone-sphinx .col-lg-2{width:16.66666667%}.ptx-runestone-container .col-lg-1,.runestone-sphinx .col-lg-1{width:8.33333333%}.ptx-runestone-container .col-lg-pull-12,.runestone-sphinx .col-lg-pull-12{right:100%}.ptx-runestone-container .col-lg-pull-11,.runestone-sphinx .col-lg-pull-11{right:91.66666667%}.ptx-runestone-container .col-lg-pull-10,.runestone-sphinx .col-lg-pull-10{right:83.33333333%}.ptx-runestone-container .col-lg-pull-9,.runestone-sphinx .col-lg-pull-9{right:75%}.ptx-runestone-container .col-lg-pull-8,.runestone-sphinx .col-lg-pull-8{right:66.66666667%}.ptx-runestone-container .col-lg-pull-7,.runestone-sphinx .col-lg-pull-7{right:58.33333333%}.ptx-runestone-container .col-lg-pull-6,.runestone-sphinx .col-lg-pull-6{right:50%}.ptx-runestone-container .col-lg-pull-5,.runestone-sphinx .col-lg-pull-5{right:41.66666667%}.ptx-runestone-container .col-lg-pull-4,.runestone-sphinx .col-lg-pull-4{right:33.33333333%}.ptx-runestone-container .col-lg-pull-3,.runestone-sphinx .col-lg-pull-3{right:25%}.ptx-runestone-container .col-lg-pull-2,.runestone-sphinx .col-lg-pull-2{right:16.66666667%}.ptx-runestone-container .col-lg-pull-1,.runestone-sphinx .col-lg-pull-1{right:8.33333333%}.ptx-runestone-container .col-lg-pull-0,.runestone-sphinx .col-lg-pull-0{right:auto}.ptx-runestone-container .col-lg-push-12,.runestone-sphinx .col-lg-push-12{left:100%}.ptx-runestone-container .col-lg-push-11,.runestone-sphinx .col-lg-push-11{left:91.66666667%}.ptx-runestone-container .col-lg-push-10,.runestone-sphinx .col-lg-push-10{left:83.33333333%}.ptx-runestone-container .col-lg-push-9,.runestone-sphinx .col-lg-push-9{left:75%}.ptx-runestone-container .col-lg-push-8,.runestone-sphinx .col-lg-push-8{left:66.66666667%}.ptx-runestone-container .col-lg-push-7,.runestone-sphinx .col-lg-push-7{left:58.33333333%}.ptx-runestone-container .col-lg-push-6,.runestone-sphinx .col-lg-push-6{left:50%}.ptx-runestone-container .col-lg-push-5,.runestone-sphinx .col-lg-push-5{left:41.66666667%}.ptx-runestone-container .col-lg-push-4,.runestone-sphinx .col-lg-push-4{left:33.33333333%}.ptx-runestone-container .col-lg-push-3,.runestone-sphinx .col-lg-push-3{left:25%}.ptx-runestone-container .col-lg-push-2,.runestone-sphinx .col-lg-push-2{left:16.66666667%}.ptx-runestone-container .col-lg-push-1,.runestone-sphinx .col-lg-push-1{left:8.33333333%}.ptx-runestone-container .col-lg-push-0,.runestone-sphinx .col-lg-push-0{left:auto}.ptx-runestone-container .col-lg-offset-12,.runestone-sphinx .col-lg-offset-12{margin-left:100%}.ptx-runestone-container .col-lg-offset-11,.runestone-sphinx .col-lg-offset-11{margin-left:91.66666667%}.ptx-runestone-container .col-lg-offset-10,.runestone-sphinx .col-lg-offset-10{margin-left:83.33333333%}.ptx-runestone-container .col-lg-offset-9,.runestone-sphinx .col-lg-offset-9{margin-left:75%}.ptx-runestone-container .col-lg-offset-8,.runestone-sphinx .col-lg-offset-8{margin-left:66.66666667%}.ptx-runestone-container .col-lg-offset-7,.runestone-sphinx .col-lg-offset-7{margin-left:58.33333333%}.ptx-runestone-container .col-lg-offset-6,.runestone-sphinx .col-lg-offset-6{margin-left:50%}.ptx-runestone-container .col-lg-offset-5,.runestone-sphinx .col-lg-offset-5{margin-left:41.66666667%}.ptx-runestone-container .col-lg-offset-4,.runestone-sphinx .col-lg-offset-4{margin-left:33.33333333%}.ptx-runestone-container .col-lg-offset-3,.runestone-sphinx .col-lg-offset-3{margin-left:25%}.ptx-runestone-container .col-lg-offset-2,.runestone-sphinx .col-lg-offset-2{margin-left:16.66666667%}.ptx-runestone-container .col-lg-offset-1,.runestone-sphinx .col-lg-offset-1{margin-left:8.33333333%}.ptx-runestone-container .col-lg-offset-0,.runestone-sphinx .col-lg-offset-0{margin-left:0}}.ptx-runestone-container table,.runestone-sphinx table{background-color:transparent}.ptx-runestone-container table col[class*=col-],.runestone-sphinx table col[class*=col-]{display:table-column;float:none;position:static}.ptx-runestone-container table td[class*=col-],.ptx-runestone-container table th[class*=col-],.runestone-sphinx table td[class*=col-],.runestone-sphinx table th[class*=col-]{display:table-cell;float:none;position:static}.ptx-runestone-container caption,.runestone-sphinx caption{color:#777;padding-bottom:8px;padding-top:8px;text-align:left}.ptx-runestone-container th,.runestone-sphinx th{text-align:left}.ptx-runestone-container .table,.runestone-sphinx .table{margin-bottom:20px;max-width:100%;width:100%}.ptx-runestone-container .table>tbody>tr>td,.ptx-runestone-container .table>tbody>tr>th,.ptx-runestone-container .table>tfoot>tr>td,.ptx-runestone-container .table>tfoot>tr>th,.ptx-runestone-container .table>thead>tr>td,.ptx-runestone-container .table>thead>tr>th,.runestone-sphinx .table>tbody>tr>td,.runestone-sphinx .table>tbody>tr>th,.runestone-sphinx .table>tfoot>tr>td,.runestone-sphinx .table>tfoot>tr>th,.runestone-sphinx .table>thead>tr>td,.runestone-sphinx .table>thead>tr>th{border-top:1px solid #ddd;line-height:1.42857143;padding:8px;vertical-align:top}.ptx-runestone-container .table>thead>tr>th,.runestone-sphinx .table>thead>tr>th{border-bottom:2px solid #ddd;vertical-align:bottom}.ptx-runestone-container .table>caption+thead>tr:first-child>td,.ptx-runestone-container .table>caption+thead>tr:first-child>th,.ptx-runestone-container .table>colgroup+thead>tr:first-child>td,.ptx-runestone-container .table>colgroup+thead>tr:first-child>th,.ptx-runestone-container .table>thead:first-child>tr:first-child>td,.ptx-runestone-container .table>thead:first-child>tr:first-child>th,.runestone-sphinx .table>caption+thead>tr:first-child>td,.runestone-sphinx .table>caption+thead>tr:first-child>th,.runestone-sphinx .table>colgroup+thead>tr:first-child>td,.runestone-sphinx .table>colgroup+thead>tr:first-child>th,.runestone-sphinx .table>thead:first-child>tr:first-child>td,.runestone-sphinx .table>thead:first-child>tr:first-child>th{border-top:0}.ptx-runestone-container .table>tbody+tbody,.runestone-sphinx .table>tbody+tbody{border-top:2px solid #ddd}.ptx-runestone-container .table .table,.runestone-sphinx .table .table{background-color:#fff}.ptx-runestone-container .table-condensed>tbody>tr>td,.ptx-runestone-container .table-condensed>tbody>tr>th,.ptx-runestone-container .table-condensed>tfoot>tr>td,.ptx-runestone-container .table-condensed>tfoot>tr>th,.ptx-runestone-container .table-condensed>thead>tr>td,.ptx-runestone-container .table-condensed>thead>tr>th,.runestone-sphinx .table-condensed>tbody>tr>td,.runestone-sphinx .table-condensed>tbody>tr>th,.runestone-sphinx .table-condensed>tfoot>tr>td,.runestone-sphinx .table-condensed>tfoot>tr>th,.runestone-sphinx .table-condensed>thead>tr>td,.runestone-sphinx .table-condensed>thead>tr>th{padding:5px}.ptx-runestone-container .table-bordered,.ptx-runestone-container .table-bordered>tbody>tr>td,.ptx-runestone-container .table-bordered>tbody>tr>th,.ptx-runestone-container .table-bordered>tfoot>tr>td,.ptx-runestone-container .table-bordered>tfoot>tr>th,.ptx-runestone-container .table-bordered>thead>tr>td,.ptx-runestone-container .table-bordered>thead>tr>th,.runestone-sphinx .table-bordered,.runestone-sphinx .table-bordered>tbody>tr>td,.runestone-sphinx .table-bordered>tbody>tr>th,.runestone-sphinx .table-bordered>tfoot>tr>td,.runestone-sphinx .table-bordered>tfoot>tr>th,.runestone-sphinx .table-bordered>thead>tr>td,.runestone-sphinx .table-bordered>thead>tr>th{border:1px solid #ddd}.ptx-runestone-container .table-bordered>thead>tr>td,.ptx-runestone-container .table-bordered>thead>tr>th,.runestone-sphinx .table-bordered>thead>tr>td,.runestone-sphinx .table-bordered>thead>tr>th{border-bottom-width:2px}.ptx-runestone-container .table-striped>tbody>tr:nth-of-type(odd),.runestone-sphinx .table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.ptx-runestone-container .table-hover>tbody>tr:hover,.ptx-runestone-container .table>tbody>tr.active>td,.ptx-runestone-container .table>tbody>tr.active>th,.ptx-runestone-container .table>tbody>tr>td.active,.ptx-runestone-container .table>tbody>tr>th.active,.ptx-runestone-container .table>tfoot>tr.active>td,.ptx-runestone-container .table>tfoot>tr.active>th,.ptx-runestone-container .table>tfoot>tr>td.active,.ptx-runestone-container .table>tfoot>tr>th.active,.ptx-runestone-container .table>thead>tr.active>td,.ptx-runestone-container .table>thead>tr.active>th,.ptx-runestone-container .table>thead>tr>td.active,.ptx-runestone-container .table>thead>tr>th.active,.runestone-sphinx .table-hover>tbody>tr:hover,.runestone-sphinx .table>tbody>tr.active>td,.runestone-sphinx .table>tbody>tr.active>th,.runestone-sphinx .table>tbody>tr>td.active,.runestone-sphinx .table>tbody>tr>th.active,.runestone-sphinx .table>tfoot>tr.active>td,.runestone-sphinx .table>tfoot>tr.active>th,.runestone-sphinx .table>tfoot>tr>td.active,.runestone-sphinx .table>tfoot>tr>th.active,.runestone-sphinx .table>thead>tr.active>td,.runestone-sphinx .table>thead>tr.active>th,.runestone-sphinx .table>thead>tr>td.active,.runestone-sphinx .table>thead>tr>th.active{background-color:#f5f5f5}.ptx-runestone-container .table-hover>tbody>tr.active:hover>td,.ptx-runestone-container .table-hover>tbody>tr.active:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.active,.ptx-runestone-container .table-hover>tbody>tr>td.active:hover,.ptx-runestone-container .table-hover>tbody>tr>th.active:hover,.runestone-sphinx .table-hover>tbody>tr.active:hover>td,.runestone-sphinx .table-hover>tbody>tr.active:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.active,.runestone-sphinx .table-hover>tbody>tr>td.active:hover,.runestone-sphinx .table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.ptx-runestone-container .table>tbody>tr.success>td,.ptx-runestone-container .table>tbody>tr.success>th,.ptx-runestone-container .table>tbody>tr>td.success,.ptx-runestone-container .table>tbody>tr>th.success,.ptx-runestone-container .table>tfoot>tr.success>td,.ptx-runestone-container .table>tfoot>tr.success>th,.ptx-runestone-container .table>tfoot>tr>td.success,.ptx-runestone-container .table>tfoot>tr>th.success,.ptx-runestone-container .table>thead>tr.success>td,.ptx-runestone-container .table>thead>tr.success>th,.ptx-runestone-container .table>thead>tr>td.success,.ptx-runestone-container .table>thead>tr>th.success,.runestone-sphinx .table>tbody>tr.success>td,.runestone-sphinx .table>tbody>tr.success>th,.runestone-sphinx .table>tbody>tr>td.success,.runestone-sphinx .table>tbody>tr>th.success,.runestone-sphinx .table>tfoot>tr.success>td,.runestone-sphinx .table>tfoot>tr.success>th,.runestone-sphinx .table>tfoot>tr>td.success,.runestone-sphinx .table>tfoot>tr>th.success,.runestone-sphinx .table>thead>tr.success>td,.runestone-sphinx .table>thead>tr.success>th,.runestone-sphinx .table>thead>tr>td.success,.runestone-sphinx .table>thead>tr>th.success{background-color:#dff0d8}.ptx-runestone-container .table-hover>tbody>tr.success:hover>td,.ptx-runestone-container .table-hover>tbody>tr.success:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.success,.ptx-runestone-container .table-hover>tbody>tr>td.success:hover,.ptx-runestone-container .table-hover>tbody>tr>th.success:hover,.runestone-sphinx .table-hover>tbody>tr.success:hover>td,.runestone-sphinx .table-hover>tbody>tr.success:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.success,.runestone-sphinx .table-hover>tbody>tr>td.success:hover,.runestone-sphinx .table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.ptx-runestone-container .table>tbody>tr.info>td,.ptx-runestone-container .table>tbody>tr.info>th,.ptx-runestone-container .table>tbody>tr>td.info,.ptx-runestone-container .table>tbody>tr>th.info,.ptx-runestone-container .table>tfoot>tr.info>td,.ptx-runestone-container .table>tfoot>tr.info>th,.ptx-runestone-container .table>tfoot>tr>td.info,.ptx-runestone-container .table>tfoot>tr>th.info,.ptx-runestone-container .table>thead>tr.info>td,.ptx-runestone-container .table>thead>tr.info>th,.ptx-runestone-container .table>thead>tr>td.info,.ptx-runestone-container .table>thead>tr>th.info,.runestone-sphinx .table>tbody>tr.info>td,.runestone-sphinx .table>tbody>tr.info>th,.runestone-sphinx .table>tbody>tr>td.info,.runestone-sphinx .table>tbody>tr>th.info,.runestone-sphinx .table>tfoot>tr.info>td,.runestone-sphinx .table>tfoot>tr.info>th,.runestone-sphinx .table>tfoot>tr>td.info,.runestone-sphinx .table>tfoot>tr>th.info,.runestone-sphinx .table>thead>tr.info>td,.runestone-sphinx .table>thead>tr.info>th,.runestone-sphinx .table>thead>tr>td.info,.runestone-sphinx .table>thead>tr>th.info{background-color:#d9edf7}.ptx-runestone-container .table-hover>tbody>tr.info:hover>td,.ptx-runestone-container .table-hover>tbody>tr.info:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.info,.ptx-runestone-container .table-hover>tbody>tr>td.info:hover,.ptx-runestone-container .table-hover>tbody>tr>th.info:hover,.runestone-sphinx .table-hover>tbody>tr.info:hover>td,.runestone-sphinx .table-hover>tbody>tr.info:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.info,.runestone-sphinx .table-hover>tbody>tr>td.info:hover,.runestone-sphinx .table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.ptx-runestone-container .table>tbody>tr.warning>td,.ptx-runestone-container .table>tbody>tr.warning>th,.ptx-runestone-container .table>tbody>tr>td.warning,.ptx-runestone-container .table>tbody>tr>th.warning,.ptx-runestone-container .table>tfoot>tr.warning>td,.ptx-runestone-container .table>tfoot>tr.warning>th,.ptx-runestone-container .table>tfoot>tr>td.warning,.ptx-runestone-container .table>tfoot>tr>th.warning,.ptx-runestone-container .table>thead>tr.warning>td,.ptx-runestone-container .table>thead>tr.warning>th,.ptx-runestone-container .table>thead>tr>td.warning,.ptx-runestone-container .table>thead>tr>th.warning,.runestone-sphinx .table>tbody>tr.warning>td,.runestone-sphinx .table>tbody>tr.warning>th,.runestone-sphinx .table>tbody>tr>td.warning,.runestone-sphinx .table>tbody>tr>th.warning,.runestone-sphinx .table>tfoot>tr.warning>td,.runestone-sphinx .table>tfoot>tr.warning>th,.runestone-sphinx .table>tfoot>tr>td.warning,.runestone-sphinx .table>tfoot>tr>th.warning,.runestone-sphinx .table>thead>tr.warning>td,.runestone-sphinx .table>thead>tr.warning>th,.runestone-sphinx .table>thead>tr>td.warning,.runestone-sphinx .table>thead>tr>th.warning{background-color:#fcf8e3}.ptx-runestone-container .table-hover>tbody>tr.warning:hover>td,.ptx-runestone-container .table-hover>tbody>tr.warning:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.warning,.ptx-runestone-container .table-hover>tbody>tr>td.warning:hover,.ptx-runestone-container .table-hover>tbody>tr>th.warning:hover,.runestone-sphinx .table-hover>tbody>tr.warning:hover>td,.runestone-sphinx .table-hover>tbody>tr.warning:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.warning,.runestone-sphinx .table-hover>tbody>tr>td.warning:hover,.runestone-sphinx .table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.ptx-runestone-container .table>tbody>tr.danger>td,.ptx-runestone-container .table>tbody>tr.danger>th,.ptx-runestone-container .table>tbody>tr>td.danger,.ptx-runestone-container .table>tbody>tr>th.danger,.ptx-runestone-container .table>tfoot>tr.danger>td,.ptx-runestone-container .table>tfoot>tr.danger>th,.ptx-runestone-container .table>tfoot>tr>td.danger,.ptx-runestone-container .table>tfoot>tr>th.danger,.ptx-runestone-container .table>thead>tr.danger>td,.ptx-runestone-container .table>thead>tr.danger>th,.ptx-runestone-container .table>thead>tr>td.danger,.ptx-runestone-container .table>thead>tr>th.danger,.runestone-sphinx .table>tbody>tr.danger>td,.runestone-sphinx .table>tbody>tr.danger>th,.runestone-sphinx .table>tbody>tr>td.danger,.runestone-sphinx .table>tbody>tr>th.danger,.runestone-sphinx .table>tfoot>tr.danger>td,.runestone-sphinx .table>tfoot>tr.danger>th,.runestone-sphinx .table>tfoot>tr>td.danger,.runestone-sphinx .table>tfoot>tr>th.danger,.runestone-sphinx .table>thead>tr.danger>td,.runestone-sphinx .table>thead>tr.danger>th,.runestone-sphinx .table>thead>tr>td.danger,.runestone-sphinx .table>thead>tr>th.danger{background-color:#f2dede}.ptx-runestone-container .table-hover>tbody>tr.danger:hover>td,.ptx-runestone-container .table-hover>tbody>tr.danger:hover>th,.ptx-runestone-container .table-hover>tbody>tr:hover>.danger,.ptx-runestone-container .table-hover>tbody>tr>td.danger:hover,.ptx-runestone-container .table-hover>tbody>tr>th.danger:hover,.runestone-sphinx .table-hover>tbody>tr.danger:hover>td,.runestone-sphinx .table-hover>tbody>tr.danger:hover>th,.runestone-sphinx .table-hover>tbody>tr:hover>.danger,.runestone-sphinx .table-hover>tbody>tr>td.danger:hover,.runestone-sphinx .table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.ptx-runestone-container .table-responsive,.runestone-sphinx .table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.ptx-runestone-container .table-responsive,.runestone-sphinx .table-responsive{-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;margin-bottom:15px;overflow-y:hidden;width:100%}.ptx-runestone-container .table-responsive>.table,.runestone-sphinx .table-responsive>.table{margin-bottom:0}.ptx-runestone-container .table-responsive>.table>tbody>tr>td,.ptx-runestone-container .table-responsive>.table>tbody>tr>th,.ptx-runestone-container .table-responsive>.table>tfoot>tr>td,.ptx-runestone-container .table-responsive>.table>tfoot>tr>th,.ptx-runestone-container .table-responsive>.table>thead>tr>td,.ptx-runestone-container .table-responsive>.table>thead>tr>th,.runestone-sphinx .table-responsive>.table>tbody>tr>td,.runestone-sphinx .table-responsive>.table>tbody>tr>th,.runestone-sphinx .table-responsive>.table>tfoot>tr>td,.runestone-sphinx .table-responsive>.table>tfoot>tr>th,.runestone-sphinx .table-responsive>.table>thead>tr>td,.runestone-sphinx .table-responsive>.table>thead>tr>th{white-space:nowrap}.ptx-runestone-container .table-responsive>.table-bordered,.runestone-sphinx .table-responsive>.table-bordered{border:0}.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr>td:first-child,.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr>th:first-child,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr>td:first-child,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr>th:first-child,.ptx-runestone-container .table-responsive>.table-bordered>thead>tr>td:first-child,.ptx-runestone-container .table-responsive>.table-bordered>thead>tr>th:first-child,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr>td:first-child,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr>th:first-child,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr>td:first-child,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr>th:first-child,.runestone-sphinx .table-responsive>.table-bordered>thead>tr>td:first-child,.runestone-sphinx .table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr>td:last-child,.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr>th:last-child,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr>td:last-child,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr>th:last-child,.ptx-runestone-container .table-responsive>.table-bordered>thead>tr>td:last-child,.ptx-runestone-container .table-responsive>.table-bordered>thead>tr>th:last-child,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr>td:last-child,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr>th:last-child,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr>td:last-child,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr>th:last-child,.runestone-sphinx .table-responsive>.table-bordered>thead>tr>td:last-child,.runestone-sphinx .table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr:last-child>td,.ptx-runestone-container .table-responsive>.table-bordered>tbody>tr:last-child>th,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr:last-child>td,.ptx-runestone-container .table-responsive>.table-bordered>tfoot>tr:last-child>th,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr:last-child>td,.runestone-sphinx .table-responsive>.table-bordered>tbody>tr:last-child>th,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr:last-child>td,.runestone-sphinx .table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.ptx-runestone-container fieldset,.runestone-sphinx fieldset{border:0;margin:0;min-width:0;padding:0}.ptx-runestone-container legend,.runestone-sphinx legend{border:0;border-bottom:1px solid #e5e5e5;color:#333;display:block;font-size:21px;line-height:inherit;margin-bottom:20px;padding:0;width:100%}.ptx-runestone-container label,.runestone-sphinx label{display:inline-block;font-weight:700;margin-bottom:5px;max-width:100%}.ptx-runestone-container input[type=search],.runestone-sphinx input[type=search]{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ptx-runestone-container input[type=checkbox],.ptx-runestone-container input[type=radio],.runestone-sphinx input[type=checkbox],.runestone-sphinx input[type=radio]{line-height:normal;margin:4px 0 0;margin-top:1px\9}.ptx-runestone-container fieldset[disabled] input[type=checkbox],.ptx-runestone-container fieldset[disabled] input[type=radio],.ptx-runestone-container input[type=checkbox].disabled,.ptx-runestone-container input[type=checkbox][disabled],.ptx-runestone-container input[type=radio].disabled,.ptx-runestone-container input[type=radio][disabled],.runestone-sphinx fieldset[disabled] input[type=checkbox],.runestone-sphinx fieldset[disabled] input[type=radio],.runestone-sphinx input[type=checkbox].disabled,.runestone-sphinx input[type=checkbox][disabled],.runestone-sphinx input[type=radio].disabled,.runestone-sphinx input[type=radio][disabled]{cursor:not-allowed}.ptx-runestone-container input[type=file],.runestone-sphinx input[type=file]{display:block}.ptx-runestone-container input[type=range],.runestone-sphinx input[type=range]{display:block;width:100%}.ptx-runestone-container select[multiple],.ptx-runestone-container select[size],.runestone-sphinx select[multiple],.runestone-sphinx select[size]{height:auto}.ptx-runestone-container input[type=checkbox]:focus,.ptx-runestone-container input[type=file]:focus,.ptx-runestone-container input[type=radio]:focus,.runestone-sphinx input[type=checkbox]:focus,.runestone-sphinx input[type=file]:focus,.runestone-sphinx input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ptx-runestone-container output,.runestone-sphinx output{color:#555;display:block;font-size:14px;line-height:1.42857143;padding-top:7px}.ptx-runestone-container .form-control,.runestone-sphinx .form-control{background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);color:#555;display:block;font-size:14px;height:34px;line-height:1.42857143;padding:6px 12px;-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;width:100%}.ptx-runestone-container .form-control:focus,.runestone-sphinx .form-control:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);outline:0}.ptx-runestone-container .form-control::-moz-placeholder,.runestone-sphinx .form-control::-moz-placeholder{color:#999;opacity:1}.ptx-runestone-container .form-control:-ms-input-placeholder,.runestone-sphinx .form-control:-ms-input-placeholder{color:#999}.ptx-runestone-container .form-control::-webkit-input-placeholder,.runestone-sphinx .form-control::-webkit-input-placeholder{color:#999}.ptx-runestone-container .form-control::-ms-expand,.runestone-sphinx .form-control::-ms-expand{background-color:transparent;border:0}.ptx-runestone-container .form-control[disabled],.ptx-runestone-container .form-control[readonly],.ptx-runestone-container fieldset[disabled] .form-control,.runestone-sphinx .form-control[disabled],.runestone-sphinx .form-control[readonly],.runestone-sphinx fieldset[disabled] .form-control{background-color:#eee;opacity:1}.ptx-runestone-container .form-control[disabled],.ptx-runestone-container fieldset[disabled] .form-control,.runestone-sphinx .form-control[disabled],.runestone-sphinx fieldset[disabled] .form-control{cursor:not-allowed}.ptx-runestone-container textarea.form-control,.runestone-sphinx textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){.ptx-runestone-container input[type=date].form-control,.ptx-runestone-container input[type=datetime-local].form-control,.ptx-runestone-container input[type=month].form-control,.ptx-runestone-container input[type=time].form-control,.runestone-sphinx input[type=date].form-control,.runestone-sphinx input[type=datetime-local].form-control,.runestone-sphinx input[type=month].form-control,.runestone-sphinx input[type=time].form-control{line-height:34px}.ptx-runestone-container .input-group-sm input[type=date],.ptx-runestone-container .input-group-sm input[type=datetime-local],.ptx-runestone-container .input-group-sm input[type=month],.ptx-runestone-container .input-group-sm input[type=time],.ptx-runestone-container input[type=date].input-sm,.ptx-runestone-container input[type=datetime-local].input-sm,.ptx-runestone-container input[type=month].input-sm,.ptx-runestone-container input[type=time].input-sm,.runestone-sphinx .input-group-sm input[type=date],.runestone-sphinx .input-group-sm input[type=datetime-local],.runestone-sphinx .input-group-sm input[type=month],.runestone-sphinx .input-group-sm input[type=time],.runestone-sphinx input[type=date].input-sm,.runestone-sphinx input[type=datetime-local].input-sm,.runestone-sphinx input[type=month].input-sm,.runestone-sphinx input[type=time].input-sm{line-height:30px}.ptx-runestone-container .input-group-lg input[type=date],.ptx-runestone-container .input-group-lg input[type=datetime-local],.ptx-runestone-container .input-group-lg input[type=month],.ptx-runestone-container .input-group-lg input[type=time],.ptx-runestone-container input[type=date].input-lg,.ptx-runestone-container input[type=datetime-local].input-lg,.ptx-runestone-container input[type=month].input-lg,.ptx-runestone-container input[type=time].input-lg,.runestone-sphinx .input-group-lg input[type=date],.runestone-sphinx .input-group-lg input[type=datetime-local],.runestone-sphinx .input-group-lg input[type=month],.runestone-sphinx .input-group-lg input[type=time],.runestone-sphinx input[type=date].input-lg,.runestone-sphinx input[type=datetime-local].input-lg,.runestone-sphinx input[type=month].input-lg,.runestone-sphinx input[type=time].input-lg{line-height:46px}}.ptx-runestone-container .form-group,.runestone-sphinx .form-group{margin-bottom:15px}.ptx-runestone-container .checkbox,.ptx-runestone-container .radio,.runestone-sphinx .checkbox,.runestone-sphinx .radio{display:block;margin-bottom:10px;margin-top:10px;position:relative}.ptx-runestone-container .checkbox.disabled label,.ptx-runestone-container .radio.disabled label,.ptx-runestone-container fieldset[disabled] .checkbox label,.ptx-runestone-container fieldset[disabled] .radio label,.runestone-sphinx .checkbox.disabled label,.runestone-sphinx .radio.disabled label,.runestone-sphinx fieldset[disabled] .checkbox label,.runestone-sphinx fieldset[disabled] .radio label{cursor:not-allowed}.ptx-runestone-container .checkbox label,.ptx-runestone-container .radio label,.runestone-sphinx .checkbox label,.runestone-sphinx .radio label{cursor:pointer;font-weight:400;margin-bottom:0;min-height:20px;padding-left:20px}.ptx-runestone-container .checkbox input[type=checkbox],.ptx-runestone-container .checkbox-inline input[type=checkbox],.ptx-runestone-container .radio input[type=radio],.ptx-runestone-container .radio-inline input[type=radio],.runestone-sphinx .checkbox input[type=checkbox],.runestone-sphinx .checkbox-inline input[type=checkbox],.runestone-sphinx .radio input[type=radio],.runestone-sphinx .radio-inline input[type=radio]{margin-left:-20px;margin-top:4px\9;position:absolute}.ptx-runestone-container .checkbox+.checkbox,.ptx-runestone-container .radio+.radio,.runestone-sphinx .checkbox+.checkbox,.runestone-sphinx .radio+.radio{margin-top:-5px}.ptx-runestone-container .checkbox-inline,.ptx-runestone-container .radio-inline,.runestone-sphinx .checkbox-inline,.runestone-sphinx .radio-inline{cursor:pointer;display:inline-block;font-weight:400;margin-bottom:0;padding-left:20px;position:relative;vertical-align:middle}.ptx-runestone-container .checkbox-inline.disabled,.ptx-runestone-container .radio-inline.disabled,.ptx-runestone-container fieldset[disabled] .checkbox-inline,.ptx-runestone-container fieldset[disabled] .radio-inline,.runestone-sphinx .checkbox-inline.disabled,.runestone-sphinx .radio-inline.disabled,.runestone-sphinx fieldset[disabled] .checkbox-inline,.runestone-sphinx fieldset[disabled] .radio-inline{cursor:not-allowed}.ptx-runestone-container .checkbox-inline+.checkbox-inline,.ptx-runestone-container .radio-inline+.radio-inline,.runestone-sphinx .checkbox-inline+.checkbox-inline,.runestone-sphinx .radio-inline+.radio-inline{margin-left:10px;margin-top:0}.ptx-runestone-container .form-control-static,.runestone-sphinx .form-control-static{margin-bottom:0;min-height:34px;padding-bottom:7px;padding-top:7px}.ptx-runestone-container .form-control-static.input-lg,.ptx-runestone-container .form-control-static.input-sm,.runestone-sphinx .form-control-static.input-lg,.runestone-sphinx .form-control-static.input-sm{padding-left:0;padding-right:0}.ptx-runestone-container .input-sm,.runestone-sphinx .input-sm{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}.ptx-runestone-container select.input-sm,.runestone-sphinx select.input-sm{height:30px;line-height:30px}.ptx-runestone-container select[multiple].input-sm,.ptx-runestone-container textarea.input-sm,.runestone-sphinx select[multiple].input-sm,.runestone-sphinx textarea.input-sm{height:auto}.ptx-runestone-container .form-group-sm .form-control,.runestone-sphinx .form-group-sm .form-control{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}.ptx-runestone-container .form-group-sm select.form-control,.runestone-sphinx .form-group-sm select.form-control{height:30px;line-height:30px}.ptx-runestone-container .form-group-sm select[multiple].form-control,.ptx-runestone-container .form-group-sm textarea.form-control,.runestone-sphinx .form-group-sm select[multiple].form-control,.runestone-sphinx .form-group-sm textarea.form-control{height:auto}.ptx-runestone-container .form-group-sm .form-control-static,.runestone-sphinx .form-group-sm .form-control-static{font-size:12px;height:30px;line-height:1.5;min-height:32px;padding:6px 10px}.ptx-runestone-container .input-lg,.runestone-sphinx .input-lg{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container select.input-lg,.runestone-sphinx select.input-lg{height:46px;line-height:46px}.ptx-runestone-container select[multiple].input-lg,.ptx-runestone-container textarea.input-lg,.runestone-sphinx select[multiple].input-lg,.runestone-sphinx textarea.input-lg{height:auto}.ptx-runestone-container .form-group-lg .form-control,.runestone-sphinx .form-group-lg .form-control{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container .form-group-lg select.form-control,.runestone-sphinx .form-group-lg select.form-control{height:46px;line-height:46px}.ptx-runestone-container .form-group-lg select[multiple].form-control,.ptx-runestone-container .form-group-lg textarea.form-control,.runestone-sphinx .form-group-lg select[multiple].form-control,.runestone-sphinx .form-group-lg textarea.form-control{height:auto}.ptx-runestone-container .form-group-lg .form-control-static,.runestone-sphinx .form-group-lg .form-control-static{font-size:18px;height:46px;line-height:1.3333333;min-height:38px;padding:11px 16px}.ptx-runestone-container .has-feedback,.runestone-sphinx .has-feedback{position:relative}.ptx-runestone-container .has-feedback .form-control,.runestone-sphinx .has-feedback .form-control{padding-right:42.5px}.ptx-runestone-container .form-control-feedback,.runestone-sphinx .form-control-feedback{display:block;height:34px;line-height:34px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:34px;z-index:2}.ptx-runestone-container .form-group-lg .form-control+.form-control-feedback,.ptx-runestone-container .input-group-lg+.form-control-feedback,.ptx-runestone-container .input-lg+.form-control-feedback,.runestone-sphinx .form-group-lg .form-control+.form-control-feedback,.runestone-sphinx .input-group-lg+.form-control-feedback,.runestone-sphinx .input-lg+.form-control-feedback{height:46px;line-height:46px;width:46px}.ptx-runestone-container .form-group-sm .form-control+.form-control-feedback,.ptx-runestone-container .input-group-sm+.form-control-feedback,.ptx-runestone-container .input-sm+.form-control-feedback,.runestone-sphinx .form-group-sm .form-control+.form-control-feedback,.runestone-sphinx .input-group-sm+.form-control-feedback,.runestone-sphinx .input-sm+.form-control-feedback{height:30px;line-height:30px;width:30px}.ptx-runestone-container .has-success .checkbox,.ptx-runestone-container .has-success .checkbox-inline,.ptx-runestone-container .has-success .control-label,.ptx-runestone-container .has-success .help-block,.ptx-runestone-container .has-success .radio,.ptx-runestone-container .has-success .radio-inline,.ptx-runestone-container .has-success.checkbox label,.ptx-runestone-container .has-success.checkbox-inline label,.ptx-runestone-container .has-success.radio label,.ptx-runestone-container .has-success.radio-inline label,.runestone-sphinx .has-success .checkbox,.runestone-sphinx .has-success .checkbox-inline,.runestone-sphinx .has-success .control-label,.runestone-sphinx .has-success .help-block,.runestone-sphinx .has-success .radio,.runestone-sphinx .has-success .radio-inline,.runestone-sphinx .has-success.checkbox label,.runestone-sphinx .has-success.checkbox-inline label,.runestone-sphinx .has-success.radio label,.runestone-sphinx .has-success.radio-inline label{color:#3c763d}.ptx-runestone-container .has-success .form-control,.runestone-sphinx .has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.ptx-runestone-container .has-success .form-control:focus,.runestone-sphinx .has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.ptx-runestone-container .has-success .input-group-addon,.runestone-sphinx .has-success .input-group-addon{background-color:#dff0d8;border-color:#3c763d;color:#3c763d}.ptx-runestone-container .has-success .form-control-feedback,.runestone-sphinx .has-success .form-control-feedback{color:#3c763d}.ptx-runestone-container .has-warning .checkbox,.ptx-runestone-container .has-warning .checkbox-inline,.ptx-runestone-container .has-warning .control-label,.ptx-runestone-container .has-warning .help-block,.ptx-runestone-container .has-warning .radio,.ptx-runestone-container .has-warning .radio-inline,.ptx-runestone-container .has-warning.checkbox label,.ptx-runestone-container .has-warning.checkbox-inline label,.ptx-runestone-container .has-warning.radio label,.ptx-runestone-container .has-warning.radio-inline label,.runestone-sphinx .has-warning .checkbox,.runestone-sphinx .has-warning .checkbox-inline,.runestone-sphinx .has-warning .control-label,.runestone-sphinx .has-warning .help-block,.runestone-sphinx .has-warning .radio,.runestone-sphinx .has-warning .radio-inline,.runestone-sphinx .has-warning.checkbox label,.runestone-sphinx .has-warning.checkbox-inline label,.runestone-sphinx .has-warning.radio label,.runestone-sphinx .has-warning.radio-inline label{color:#8a6d3b}.ptx-runestone-container .has-warning .form-control,.runestone-sphinx .has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.ptx-runestone-container .has-warning .form-control:focus,.runestone-sphinx .has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.ptx-runestone-container .has-warning .input-group-addon,.runestone-sphinx .has-warning .input-group-addon{background-color:#fcf8e3;border-color:#8a6d3b;color:#8a6d3b}.ptx-runestone-container .has-warning .form-control-feedback,.runestone-sphinx .has-warning .form-control-feedback{color:#8a6d3b}.ptx-runestone-container .has-error .checkbox,.ptx-runestone-container .has-error .checkbox-inline,.ptx-runestone-container .has-error .control-label,.ptx-runestone-container .has-error .help-block,.ptx-runestone-container .has-error .radio,.ptx-runestone-container .has-error .radio-inline,.ptx-runestone-container .has-error.checkbox label,.ptx-runestone-container .has-error.checkbox-inline label,.ptx-runestone-container .has-error.radio label,.ptx-runestone-container .has-error.radio-inline label,.runestone-sphinx .has-error .checkbox,.runestone-sphinx .has-error .checkbox-inline,.runestone-sphinx .has-error .control-label,.runestone-sphinx .has-error .help-block,.runestone-sphinx .has-error .radio,.runestone-sphinx .has-error .radio-inline,.runestone-sphinx .has-error.checkbox label,.runestone-sphinx .has-error.checkbox-inline label,.runestone-sphinx .has-error.radio label,.runestone-sphinx .has-error.radio-inline label{color:#a94442}.ptx-runestone-container .has-error .form-control,.runestone-sphinx .has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.ptx-runestone-container .has-error .form-control:focus,.runestone-sphinx .has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.ptx-runestone-container .has-error .input-group-addon,.runestone-sphinx .has-error .input-group-addon{background-color:#f2dede;border-color:#a94442;color:#a94442}.ptx-runestone-container .has-error .form-control-feedback,.runestone-sphinx .has-error .form-control-feedback{color:#a94442}.ptx-runestone-container .has-feedback label~.form-control-feedback,.runestone-sphinx .has-feedback label~.form-control-feedback{top:25px}.ptx-runestone-container .has-feedback label.sr-only~.form-control-feedback,.runestone-sphinx .has-feedback label.sr-only~.form-control-feedback{top:0}.ptx-runestone-container .help-block,.runestone-sphinx .help-block{color:#737373;display:block;margin-bottom:10px;margin-top:5px}@media (min-width:768px){.ptx-runestone-container .form-inline .form-group,.runestone-sphinx .form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.ptx-runestone-container .form-inline .form-control,.runestone-sphinx .form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.ptx-runestone-container .form-inline .form-control-static,.runestone-sphinx .form-inline .form-control-static{display:inline-block}.ptx-runestone-container .form-inline .input-group,.runestone-sphinx .form-inline .input-group{display:inline-table;vertical-align:middle}.ptx-runestone-container .form-inline .input-group .form-control,.ptx-runestone-container .form-inline .input-group .input-group-addon,.ptx-runestone-container .form-inline .input-group .input-group-btn,.runestone-sphinx .form-inline .input-group .form-control,.runestone-sphinx .form-inline .input-group .input-group-addon,.runestone-sphinx .form-inline .input-group .input-group-btn{width:auto}.ptx-runestone-container .form-inline .input-group>.form-control,.runestone-sphinx .form-inline .input-group>.form-control{width:100%}.ptx-runestone-container .form-inline .control-label,.runestone-sphinx .form-inline .control-label{margin-bottom:0;vertical-align:middle}.ptx-runestone-container .form-inline .checkbox,.ptx-runestone-container .form-inline .radio,.runestone-sphinx .form-inline .checkbox,.runestone-sphinx .form-inline .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.ptx-runestone-container .form-inline .checkbox label,.ptx-runestone-container .form-inline .radio label,.runestone-sphinx .form-inline .checkbox label,.runestone-sphinx .form-inline .radio label{padding-left:0}.ptx-runestone-container .form-inline .checkbox input[type=checkbox],.ptx-runestone-container .form-inline .radio input[type=radio],.runestone-sphinx .form-inline .checkbox input[type=checkbox],.runestone-sphinx .form-inline .radio input[type=radio]{margin-left:0;position:relative}.ptx-runestone-container .form-inline .has-feedback .form-control-feedback,.runestone-sphinx .form-inline .has-feedback .form-control-feedback{top:0}}.ptx-runestone-container .form-horizontal .checkbox,.ptx-runestone-container .form-horizontal .checkbox-inline,.ptx-runestone-container .form-horizontal .radio,.ptx-runestone-container .form-horizontal .radio-inline,.runestone-sphinx .form-horizontal .checkbox,.runestone-sphinx .form-horizontal .checkbox-inline,.runestone-sphinx .form-horizontal .radio,.runestone-sphinx .form-horizontal .radio-inline{margin-bottom:0;margin-top:0;padding-top:7px}.ptx-runestone-container .form-horizontal .checkbox,.ptx-runestone-container .form-horizontal .radio,.runestone-sphinx .form-horizontal .checkbox,.runestone-sphinx .form-horizontal .radio{min-height:27px}.ptx-runestone-container .form-horizontal .form-group,.runestone-sphinx .form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.ptx-runestone-container .form-horizontal .control-label,.runestone-sphinx .form-horizontal .control-label{margin-bottom:0;padding-top:7px;text-align:right}}.ptx-runestone-container .form-horizontal .has-feedback .form-control-feedback,.runestone-sphinx .form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.ptx-runestone-container .form-horizontal .form-group-lg .control-label,.runestone-sphinx .form-horizontal .form-group-lg .control-label{font-size:18px;padding-top:11px}.ptx-runestone-container .form-horizontal .form-group-sm .control-label,.runestone-sphinx .form-horizontal .form-group-sm .control-label{font-size:12px;padding-top:6px}}.ptx-runestone-container .btn,.runestone-sphinx .btn{background-image:none;border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;font-weight:400;line-height:1.42857143;margin-bottom:0;padding:6px 12px;text-align:center;-ms-touch-action:manipulation;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.ptx-runestone-container .btn.active.focus,.ptx-runestone-container .btn.active:focus,.ptx-runestone-container .btn.focus,.ptx-runestone-container .btn:active.focus,.ptx-runestone-container .btn:active:focus,.ptx-runestone-container .btn:focus,.runestone-sphinx .btn.active.focus,.runestone-sphinx .btn.active:focus,.runestone-sphinx .btn.focus,.runestone-sphinx .btn:active.focus,.runestone-sphinx .btn:active:focus,.runestone-sphinx .btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ptx-runestone-container .btn.focus,.ptx-runestone-container .btn:focus,.ptx-runestone-container .btn:hover,.runestone-sphinx .btn.focus,.runestone-sphinx .btn:focus,.runestone-sphinx .btn:hover{color:#333;text-decoration:none}.ptx-runestone-container .btn.active,.ptx-runestone-container .btn:active,.runestone-sphinx .btn.active,.runestone-sphinx .btn:active{background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125);outline:0}.ptx-runestone-container .btn.disabled,.ptx-runestone-container .btn[disabled],.ptx-runestone-container fieldset[disabled] .btn,.runestone-sphinx .btn.disabled,.runestone-sphinx .btn[disabled],.runestone-sphinx fieldset[disabled] .btn{-webkit-box-shadow:none;box-shadow:none;cursor:not-allowed;filter:alpha(opacity=65);opacity:.65}.ptx-runestone-container a.btn.disabled,.ptx-runestone-container fieldset[disabled] a.btn,.runestone-sphinx a.btn.disabled,.runestone-sphinx fieldset[disabled] a.btn{pointer-events:none}.ptx-runestone-container .btn-default,.runestone-sphinx .btn-default{background-color:#fff;border-color:#ccc;color:#333}.ptx-runestone-container .btn-default.focus,.ptx-runestone-container .btn-default:focus,.runestone-sphinx .btn-default.focus,.runestone-sphinx .btn-default:focus{background-color:#e6e6e6;border-color:#8c8c8c;color:#333}.ptx-runestone-container .btn-default:hover,.runestone-sphinx .btn-default:hover{background-color:#e6e6e6;border-color:#adadad;color:#333}.ptx-runestone-container .btn-default.active,.ptx-runestone-container .btn-default:active,.ptx-runestone-container .open>.dropdown-toggle.btn-default,.runestone-sphinx .btn-default.active,.runestone-sphinx .btn-default:active,.runestone-sphinx .open>.dropdown-toggle.btn-default{background-color:#e6e6e6;background-image:none;border-color:#adadad;color:#333}.ptx-runestone-container .btn-default.active.focus,.ptx-runestone-container .btn-default.active:focus,.ptx-runestone-container .btn-default.active:hover,.ptx-runestone-container .btn-default:active.focus,.ptx-runestone-container .btn-default:active:focus,.ptx-runestone-container .btn-default:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-default.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-default:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-default:hover,.runestone-sphinx .btn-default.active.focus,.runestone-sphinx .btn-default.active:focus,.runestone-sphinx .btn-default.active:hover,.runestone-sphinx .btn-default:active.focus,.runestone-sphinx .btn-default:active:focus,.runestone-sphinx .btn-default:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-default.focus,.runestone-sphinx .open>.dropdown-toggle.btn-default:focus,.runestone-sphinx .open>.dropdown-toggle.btn-default:hover{background-color:#d4d4d4;border-color:#8c8c8c;color:#333}.ptx-runestone-container .btn-default.disabled.focus,.ptx-runestone-container .btn-default.disabled:focus,.ptx-runestone-container .btn-default.disabled:hover,.ptx-runestone-container .btn-default[disabled].focus,.ptx-runestone-container .btn-default[disabled]:focus,.ptx-runestone-container .btn-default[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-default.focus,.ptx-runestone-container fieldset[disabled] .btn-default:focus,.ptx-runestone-container fieldset[disabled] .btn-default:hover,.runestone-sphinx .btn-default.disabled.focus,.runestone-sphinx .btn-default.disabled:focus,.runestone-sphinx .btn-default.disabled:hover,.runestone-sphinx .btn-default[disabled].focus,.runestone-sphinx .btn-default[disabled]:focus,.runestone-sphinx .btn-default[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-default.focus,.runestone-sphinx fieldset[disabled] .btn-default:focus,.runestone-sphinx fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.ptx-runestone-container .btn-default .badge,.runestone-sphinx .btn-default .badge{background-color:#333;color:#fff}.ptx-runestone-container .btn-primary,.runestone-sphinx .btn-primary{background-color:#337ab7;border-color:#2e6da4;color:#fff}.ptx-runestone-container .btn-primary.focus,.ptx-runestone-container .btn-primary:focus,.runestone-sphinx .btn-primary.focus,.runestone-sphinx .btn-primary:focus{background-color:#286090;border-color:#122b40;color:#fff}.ptx-runestone-container .btn-primary:hover,.runestone-sphinx .btn-primary:hover{background-color:#286090;border-color:#204d74;color:#fff}.ptx-runestone-container .btn-primary.active,.ptx-runestone-container .btn-primary:active,.ptx-runestone-container .open>.dropdown-toggle.btn-primary,.runestone-sphinx .btn-primary.active,.runestone-sphinx .btn-primary:active,.runestone-sphinx .open>.dropdown-toggle.btn-primary{background-color:#286090;background-image:none;border-color:#204d74;color:#fff}.ptx-runestone-container .btn-primary.active.focus,.ptx-runestone-container .btn-primary.active:focus,.ptx-runestone-container .btn-primary.active:hover,.ptx-runestone-container .btn-primary:active.focus,.ptx-runestone-container .btn-primary:active:focus,.ptx-runestone-container .btn-primary:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-primary.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-primary:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-primary:hover,.runestone-sphinx .btn-primary.active.focus,.runestone-sphinx .btn-primary.active:focus,.runestone-sphinx .btn-primary.active:hover,.runestone-sphinx .btn-primary:active.focus,.runestone-sphinx .btn-primary:active:focus,.runestone-sphinx .btn-primary:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-primary.focus,.runestone-sphinx .open>.dropdown-toggle.btn-primary:focus,.runestone-sphinx .open>.dropdown-toggle.btn-primary:hover{background-color:#204d74;border-color:#122b40;color:#fff}.ptx-runestone-container .btn-primary.disabled.focus,.ptx-runestone-container .btn-primary.disabled:focus,.ptx-runestone-container .btn-primary.disabled:hover,.ptx-runestone-container .btn-primary[disabled].focus,.ptx-runestone-container .btn-primary[disabled]:focus,.ptx-runestone-container .btn-primary[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-primary.focus,.ptx-runestone-container fieldset[disabled] .btn-primary:focus,.ptx-runestone-container fieldset[disabled] .btn-primary:hover,.runestone-sphinx .btn-primary.disabled.focus,.runestone-sphinx .btn-primary.disabled:focus,.runestone-sphinx .btn-primary.disabled:hover,.runestone-sphinx .btn-primary[disabled].focus,.runestone-sphinx .btn-primary[disabled]:focus,.runestone-sphinx .btn-primary[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-primary.focus,.runestone-sphinx fieldset[disabled] .btn-primary:focus,.runestone-sphinx fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.ptx-runestone-container .btn-primary .badge,.runestone-sphinx .btn-primary .badge{background-color:#fff;color:#337ab7}.ptx-runestone-container .btn-success,.runestone-sphinx .btn-success{background-color:#5cb85c;border-color:#4cae4c;color:#fff}.ptx-runestone-container .btn-success.focus,.ptx-runestone-container .btn-success:focus,.runestone-sphinx .btn-success.focus,.runestone-sphinx .btn-success:focus{background-color:#449d44;border-color:#255625;color:#fff}.ptx-runestone-container .btn-success:hover,.runestone-sphinx .btn-success:hover{background-color:#449d44;border-color:#398439;color:#fff}.ptx-runestone-container .btn-success.active,.ptx-runestone-container .btn-success:active,.ptx-runestone-container .open>.dropdown-toggle.btn-success,.runestone-sphinx .btn-success.active,.runestone-sphinx .btn-success:active,.runestone-sphinx .open>.dropdown-toggle.btn-success{background-color:#449d44;background-image:none;border-color:#398439;color:#fff}.ptx-runestone-container .btn-success.active.focus,.ptx-runestone-container .btn-success.active:focus,.ptx-runestone-container .btn-success.active:hover,.ptx-runestone-container .btn-success:active.focus,.ptx-runestone-container .btn-success:active:focus,.ptx-runestone-container .btn-success:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-success.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-success:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-success:hover,.runestone-sphinx .btn-success.active.focus,.runestone-sphinx .btn-success.active:focus,.runestone-sphinx .btn-success.active:hover,.runestone-sphinx .btn-success:active.focus,.runestone-sphinx .btn-success:active:focus,.runestone-sphinx .btn-success:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-success.focus,.runestone-sphinx .open>.dropdown-toggle.btn-success:focus,.runestone-sphinx .open>.dropdown-toggle.btn-success:hover{background-color:#398439;border-color:#255625;color:#fff}.ptx-runestone-container .btn-success.disabled.focus,.ptx-runestone-container .btn-success.disabled:focus,.ptx-runestone-container .btn-success.disabled:hover,.ptx-runestone-container .btn-success[disabled].focus,.ptx-runestone-container .btn-success[disabled]:focus,.ptx-runestone-container .btn-success[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-success.focus,.ptx-runestone-container fieldset[disabled] .btn-success:focus,.ptx-runestone-container fieldset[disabled] .btn-success:hover,.runestone-sphinx .btn-success.disabled.focus,.runestone-sphinx .btn-success.disabled:focus,.runestone-sphinx .btn-success.disabled:hover,.runestone-sphinx .btn-success[disabled].focus,.runestone-sphinx .btn-success[disabled]:focus,.runestone-sphinx .btn-success[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-success.focus,.runestone-sphinx fieldset[disabled] .btn-success:focus,.runestone-sphinx fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.ptx-runestone-container .btn-success .badge,.runestone-sphinx .btn-success .badge{background-color:#fff;color:#5cb85c}.ptx-runestone-container .btn-info,.runestone-sphinx .btn-info{background-color:#5bc0de;border-color:#46b8da;color:#fff}.ptx-runestone-container .btn-info.focus,.ptx-runestone-container .btn-info:focus,.runestone-sphinx .btn-info.focus,.runestone-sphinx .btn-info:focus{background-color:#31b0d5;border-color:#1b6d85;color:#fff}.ptx-runestone-container .btn-info:hover,.runestone-sphinx .btn-info:hover{background-color:#31b0d5;border-color:#269abc;color:#fff}.ptx-runestone-container .btn-info.active,.ptx-runestone-container .btn-info:active,.ptx-runestone-container .open>.dropdown-toggle.btn-info,.runestone-sphinx .btn-info.active,.runestone-sphinx .btn-info:active,.runestone-sphinx .open>.dropdown-toggle.btn-info{background-color:#31b0d5;background-image:none;border-color:#269abc;color:#fff}.ptx-runestone-container .btn-info.active.focus,.ptx-runestone-container .btn-info.active:focus,.ptx-runestone-container .btn-info.active:hover,.ptx-runestone-container .btn-info:active.focus,.ptx-runestone-container .btn-info:active:focus,.ptx-runestone-container .btn-info:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-info.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-info:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-info:hover,.runestone-sphinx .btn-info.active.focus,.runestone-sphinx .btn-info.active:focus,.runestone-sphinx .btn-info.active:hover,.runestone-sphinx .btn-info:active.focus,.runestone-sphinx .btn-info:active:focus,.runestone-sphinx .btn-info:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-info.focus,.runestone-sphinx .open>.dropdown-toggle.btn-info:focus,.runestone-sphinx .open>.dropdown-toggle.btn-info:hover{background-color:#269abc;border-color:#1b6d85;color:#fff}.ptx-runestone-container .btn-info.disabled.focus,.ptx-runestone-container .btn-info.disabled:focus,.ptx-runestone-container .btn-info.disabled:hover,.ptx-runestone-container .btn-info[disabled].focus,.ptx-runestone-container .btn-info[disabled]:focus,.ptx-runestone-container .btn-info[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-info.focus,.ptx-runestone-container fieldset[disabled] .btn-info:focus,.ptx-runestone-container fieldset[disabled] .btn-info:hover,.runestone-sphinx .btn-info.disabled.focus,.runestone-sphinx .btn-info.disabled:focus,.runestone-sphinx .btn-info.disabled:hover,.runestone-sphinx .btn-info[disabled].focus,.runestone-sphinx .btn-info[disabled]:focus,.runestone-sphinx .btn-info[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-info.focus,.runestone-sphinx fieldset[disabled] .btn-info:focus,.runestone-sphinx fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.ptx-runestone-container .btn-info .badge,.runestone-sphinx .btn-info .badge{background-color:#fff;color:#5bc0de}.ptx-runestone-container .btn-warning,.runestone-sphinx .btn-warning{background-color:#f0ad4e;border-color:#eea236;color:#fff}.ptx-runestone-container .btn-warning.focus,.ptx-runestone-container .btn-warning:focus,.runestone-sphinx .btn-warning.focus,.runestone-sphinx .btn-warning:focus{background-color:#ec971f;border-color:#985f0d;color:#fff}.ptx-runestone-container .btn-warning:hover,.runestone-sphinx .btn-warning:hover{background-color:#ec971f;border-color:#d58512;color:#fff}.ptx-runestone-container .btn-warning.active,.ptx-runestone-container .btn-warning:active,.ptx-runestone-container .open>.dropdown-toggle.btn-warning,.runestone-sphinx .btn-warning.active,.runestone-sphinx .btn-warning:active,.runestone-sphinx .open>.dropdown-toggle.btn-warning{background-color:#ec971f;background-image:none;border-color:#d58512;color:#fff}.ptx-runestone-container .btn-warning.active.focus,.ptx-runestone-container .btn-warning.active:focus,.ptx-runestone-container .btn-warning.active:hover,.ptx-runestone-container .btn-warning:active.focus,.ptx-runestone-container .btn-warning:active:focus,.ptx-runestone-container .btn-warning:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-warning.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-warning:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-warning:hover,.runestone-sphinx .btn-warning.active.focus,.runestone-sphinx .btn-warning.active:focus,.runestone-sphinx .btn-warning.active:hover,.runestone-sphinx .btn-warning:active.focus,.runestone-sphinx .btn-warning:active:focus,.runestone-sphinx .btn-warning:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-warning.focus,.runestone-sphinx .open>.dropdown-toggle.btn-warning:focus,.runestone-sphinx .open>.dropdown-toggle.btn-warning:hover{background-color:#d58512;border-color:#985f0d;color:#fff}.ptx-runestone-container .btn-warning.disabled.focus,.ptx-runestone-container .btn-warning.disabled:focus,.ptx-runestone-container .btn-warning.disabled:hover,.ptx-runestone-container .btn-warning[disabled].focus,.ptx-runestone-container .btn-warning[disabled]:focus,.ptx-runestone-container .btn-warning[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-warning.focus,.ptx-runestone-container fieldset[disabled] .btn-warning:focus,.ptx-runestone-container fieldset[disabled] .btn-warning:hover,.runestone-sphinx .btn-warning.disabled.focus,.runestone-sphinx .btn-warning.disabled:focus,.runestone-sphinx .btn-warning.disabled:hover,.runestone-sphinx .btn-warning[disabled].focus,.runestone-sphinx .btn-warning[disabled]:focus,.runestone-sphinx .btn-warning[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-warning.focus,.runestone-sphinx fieldset[disabled] .btn-warning:focus,.runestone-sphinx fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.ptx-runestone-container .btn-warning .badge,.runestone-sphinx .btn-warning .badge{background-color:#fff;color:#f0ad4e}.ptx-runestone-container .btn-danger,.runestone-sphinx .btn-danger{background-color:#d9534f;border-color:#d43f3a;color:#fff}.ptx-runestone-container .btn-danger.focus,.ptx-runestone-container .btn-danger:focus,.runestone-sphinx .btn-danger.focus,.runestone-sphinx .btn-danger:focus{background-color:#c9302c;border-color:#761c19;color:#fff}.ptx-runestone-container .btn-danger:hover,.runestone-sphinx .btn-danger:hover{background-color:#c9302c;border-color:#ac2925;color:#fff}.ptx-runestone-container .btn-danger.active,.ptx-runestone-container .btn-danger:active,.ptx-runestone-container .open>.dropdown-toggle.btn-danger,.runestone-sphinx .btn-danger.active,.runestone-sphinx .btn-danger:active,.runestone-sphinx .open>.dropdown-toggle.btn-danger{background-color:#c9302c;background-image:none;border-color:#ac2925;color:#fff}.ptx-runestone-container .btn-danger.active.focus,.ptx-runestone-container .btn-danger.active:focus,.ptx-runestone-container .btn-danger.active:hover,.ptx-runestone-container .btn-danger:active.focus,.ptx-runestone-container .btn-danger:active:focus,.ptx-runestone-container .btn-danger:active:hover,.ptx-runestone-container .open>.dropdown-toggle.btn-danger.focus,.ptx-runestone-container .open>.dropdown-toggle.btn-danger:focus,.ptx-runestone-container .open>.dropdown-toggle.btn-danger:hover,.runestone-sphinx .btn-danger.active.focus,.runestone-sphinx .btn-danger.active:focus,.runestone-sphinx .btn-danger.active:hover,.runestone-sphinx .btn-danger:active.focus,.runestone-sphinx .btn-danger:active:focus,.runestone-sphinx .btn-danger:active:hover,.runestone-sphinx .open>.dropdown-toggle.btn-danger.focus,.runestone-sphinx .open>.dropdown-toggle.btn-danger:focus,.runestone-sphinx .open>.dropdown-toggle.btn-danger:hover{background-color:#ac2925;border-color:#761c19;color:#fff}.ptx-runestone-container .btn-danger.disabled.focus,.ptx-runestone-container .btn-danger.disabled:focus,.ptx-runestone-container .btn-danger.disabled:hover,.ptx-runestone-container .btn-danger[disabled].focus,.ptx-runestone-container .btn-danger[disabled]:focus,.ptx-runestone-container .btn-danger[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-danger.focus,.ptx-runestone-container fieldset[disabled] .btn-danger:focus,.ptx-runestone-container fieldset[disabled] .btn-danger:hover,.runestone-sphinx .btn-danger.disabled.focus,.runestone-sphinx .btn-danger.disabled:focus,.runestone-sphinx .btn-danger.disabled:hover,.runestone-sphinx .btn-danger[disabled].focus,.runestone-sphinx .btn-danger[disabled]:focus,.runestone-sphinx .btn-danger[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-danger.focus,.runestone-sphinx fieldset[disabled] .btn-danger:focus,.runestone-sphinx fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.ptx-runestone-container .btn-danger .badge,.runestone-sphinx .btn-danger .badge{background-color:#fff;color:#d9534f}.ptx-runestone-container .btn-link,.runestone-sphinx .btn-link{border-radius:0;color:#337ab7;font-weight:400}.ptx-runestone-container .btn-link,.ptx-runestone-container .btn-link.active,.ptx-runestone-container .btn-link:active,.ptx-runestone-container .btn-link[disabled],.ptx-runestone-container fieldset[disabled] .btn-link,.runestone-sphinx .btn-link,.runestone-sphinx .btn-link.active,.runestone-sphinx .btn-link:active,.runestone-sphinx .btn-link[disabled],.runestone-sphinx fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.ptx-runestone-container .btn-link,.ptx-runestone-container .btn-link:active,.ptx-runestone-container .btn-link:focus,.ptx-runestone-container .btn-link:hover,.runestone-sphinx .btn-link,.runestone-sphinx .btn-link:active,.runestone-sphinx .btn-link:focus,.runestone-sphinx .btn-link:hover{border-color:transparent}.ptx-runestone-container .btn-link:focus,.ptx-runestone-container .btn-link:hover,.runestone-sphinx .btn-link:focus,.runestone-sphinx .btn-link:hover{background-color:transparent;color:#23527c;text-decoration:underline}.ptx-runestone-container .btn-link[disabled]:focus,.ptx-runestone-container .btn-link[disabled]:hover,.ptx-runestone-container fieldset[disabled] .btn-link:focus,.ptx-runestone-container fieldset[disabled] .btn-link:hover,.runestone-sphinx .btn-link[disabled]:focus,.runestone-sphinx .btn-link[disabled]:hover,.runestone-sphinx fieldset[disabled] .btn-link:focus,.runestone-sphinx fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.ptx-runestone-container .btn-group-lg>.btn,.ptx-runestone-container .btn-lg,.runestone-sphinx .btn-group-lg>.btn,.runestone-sphinx .btn-lg{border-radius:6px;font-size:18px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container .btn-group-sm>.btn,.ptx-runestone-container .btn-sm,.runestone-sphinx .btn-group-sm>.btn,.runestone-sphinx .btn-sm{border-radius:3px;font-size:12px;line-height:1.5;padding:5px 10px}.ptx-runestone-container .btn-group-xs>.btn,.ptx-runestone-container .btn-xs,.runestone-sphinx .btn-group-xs>.btn,.runestone-sphinx .btn-xs{border-radius:3px;font-size:12px;line-height:1.5;padding:1px 5px}.ptx-runestone-container .btn-block,.runestone-sphinx .btn-block{display:block;width:100%}.ptx-runestone-container .btn-block+.btn-block,.runestone-sphinx .btn-block+.btn-block{margin-top:5px}.ptx-runestone-container input[type=button].btn-block,.ptx-runestone-container input[type=reset].btn-block,.ptx-runestone-container input[type=submit].btn-block,.runestone-sphinx input[type=button].btn-block,.runestone-sphinx input[type=reset].btn-block,.runestone-sphinx input[type=submit].btn-block{width:100%}.ptx-runestone-container .fade,.runestone-sphinx .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.ptx-runestone-container .fade.in,.runestone-sphinx .fade.in{opacity:1}.ptx-runestone-container .collapse,.runestone-sphinx .collapse{display:none}.ptx-runestone-container .collapse.in,.runestone-sphinx .collapse.in{display:block}.ptx-runestone-container tr.collapse.in,.runestone-sphinx tr.collapse.in{display:table-row}.ptx-runestone-container tbody.collapse.in,.runestone-sphinx tbody.collapse.in{display:table-row-group}.ptx-runestone-container .collapsing,.runestone-sphinx .collapsing{height:0;overflow:hidden;position:relative;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.ptx-runestone-container .caret,.runestone-sphinx .caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:2px;vertical-align:middle;width:0}.ptx-runestone-container .dropdown,.ptx-runestone-container .dropup,.runestone-sphinx .dropdown,.runestone-sphinx .dropup{position:relative}.ptx-runestone-container .dropdown-toggle:focus,.runestone-sphinx .dropdown-toggle:focus{outline:0}.ptx-runestone-container .dropdown-menu,.runestone-sphinx .dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);display:none;float:left;font-size:14px;left:0;list-style:none;margin:2px 0 0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.ptx-runestone-container .dropdown-menu.pull-right,.runestone-sphinx .dropdown-menu.pull-right{left:auto;right:0}.ptx-runestone-container .dropdown-menu .divider,.runestone-sphinx .dropdown-menu .divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.ptx-runestone-container .dropdown-menu>li>a,.runestone-sphinx .dropdown-menu>li>a{clear:both;color:#333;display:block;font-weight:400;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.ptx-runestone-container .dropdown-menu>li>a:focus,.ptx-runestone-container .dropdown-menu>li>a:hover,.runestone-sphinx .dropdown-menu>li>a:focus,.runestone-sphinx .dropdown-menu>li>a:hover{background-color:#f5f5f5;color:#262626;text-decoration:none}.ptx-runestone-container .dropdown-menu>.active>a,.ptx-runestone-container .dropdown-menu>.active>a:focus,.ptx-runestone-container .dropdown-menu>.active>a:hover,.runestone-sphinx .dropdown-menu>.active>a,.runestone-sphinx .dropdown-menu>.active>a:focus,.runestone-sphinx .dropdown-menu>.active>a:hover{background-color:#337ab7;color:#fff;outline:0;text-decoration:none}.ptx-runestone-container .dropdown-menu>.disabled>a,.ptx-runestone-container .dropdown-menu>.disabled>a:focus,.ptx-runestone-container .dropdown-menu>.disabled>a:hover,.runestone-sphinx .dropdown-menu>.disabled>a,.runestone-sphinx .dropdown-menu>.disabled>a:focus,.runestone-sphinx .dropdown-menu>.disabled>a:hover{color:#777}.ptx-runestone-container .dropdown-menu>.disabled>a:focus,.ptx-runestone-container .dropdown-menu>.disabled>a:hover,.runestone-sphinx .dropdown-menu>.disabled>a:focus,.runestone-sphinx .dropdown-menu>.disabled>a:hover{background-color:transparent;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);text-decoration:none}.ptx-runestone-container .open>.dropdown-menu,.runestone-sphinx .open>.dropdown-menu{display:block}.ptx-runestone-container .open>a,.runestone-sphinx .open>a{outline:0}.ptx-runestone-container .dropdown-menu-right,.runestone-sphinx .dropdown-menu-right{left:auto;right:0}.ptx-runestone-container .dropdown-menu-left,.runestone-sphinx .dropdown-menu-left{left:0;right:auto}.ptx-runestone-container .dropdown-header,.runestone-sphinx .dropdown-header{color:#777;display:block;font-size:12px;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.ptx-runestone-container .dropdown-backdrop,.runestone-sphinx .dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.ptx-runestone-container .pull-right>.dropdown-menu,.runestone-sphinx .pull-right>.dropdown-menu{left:auto;right:0}.ptx-runestone-container .dropup .caret,.ptx-runestone-container .navbar-fixed-bottom .dropdown .caret,.runestone-sphinx .dropup .caret,.runestone-sphinx .navbar-fixed-bottom .dropdown .caret{border-bottom:4px dashed;border-bottom:4px solid\9;border-top:0;content:""}.ptx-runestone-container .dropup .dropdown-menu,.ptx-runestone-container .navbar-fixed-bottom .dropdown .dropdown-menu,.runestone-sphinx .dropup .dropdown-menu,.runestone-sphinx .navbar-fixed-bottom .dropdown .dropdown-menu{bottom:100%;margin-bottom:2px;top:auto}@media (min-width:768px){.ptx-runestone-container .navbar-right .dropdown-menu,.runestone-sphinx .navbar-right .dropdown-menu{left:auto;right:0}.ptx-runestone-container .navbar-right .dropdown-menu-left,.runestone-sphinx .navbar-right .dropdown-menu-left{left:0;right:auto}}.ptx-runestone-container .btn-group,.ptx-runestone-container .btn-group-vertical,.runestone-sphinx .btn-group,.runestone-sphinx .btn-group-vertical{display:inline-block;position:relative;vertical-align:middle}.ptx-runestone-container .btn-group-vertical>.btn,.ptx-runestone-container .btn-group>.btn,.runestone-sphinx .btn-group-vertical>.btn,.runestone-sphinx .btn-group>.btn{float:left;position:relative}.ptx-runestone-container .btn-group-vertical>.btn.active,.ptx-runestone-container .btn-group-vertical>.btn:active,.ptx-runestone-container .btn-group-vertical>.btn:focus,.ptx-runestone-container .btn-group-vertical>.btn:hover,.ptx-runestone-container .btn-group>.btn.active,.ptx-runestone-container .btn-group>.btn:active,.ptx-runestone-container .btn-group>.btn:focus,.ptx-runestone-container .btn-group>.btn:hover,.runestone-sphinx .btn-group-vertical>.btn.active,.runestone-sphinx .btn-group-vertical>.btn:active,.runestone-sphinx .btn-group-vertical>.btn:focus,.runestone-sphinx .btn-group-vertical>.btn:hover,.runestone-sphinx .btn-group>.btn.active,.runestone-sphinx .btn-group>.btn:active,.runestone-sphinx .btn-group>.btn:focus,.runestone-sphinx .btn-group>.btn:hover{z-index:2}.ptx-runestone-container .btn-group .btn+.btn,.ptx-runestone-container .btn-group .btn+.btn-group,.ptx-runestone-container .btn-group .btn-group+.btn,.ptx-runestone-container .btn-group .btn-group+.btn-group,.runestone-sphinx .btn-group .btn+.btn,.runestone-sphinx .btn-group .btn+.btn-group,.runestone-sphinx .btn-group .btn-group+.btn,.runestone-sphinx .btn-group .btn-group+.btn-group{margin-left:-1px}.ptx-runestone-container .btn-toolbar,.runestone-sphinx .btn-toolbar{margin-left:-5px}.ptx-runestone-container .btn-toolbar .btn,.ptx-runestone-container .btn-toolbar .btn-group,.ptx-runestone-container .btn-toolbar .input-group,.runestone-sphinx .btn-toolbar .btn,.runestone-sphinx .btn-toolbar .btn-group,.runestone-sphinx .btn-toolbar .input-group{float:left}.ptx-runestone-container .btn-toolbar>.btn,.ptx-runestone-container .btn-toolbar>.btn-group,.ptx-runestone-container .btn-toolbar>.input-group,.runestone-sphinx .btn-toolbar>.btn,.runestone-sphinx .btn-toolbar>.btn-group,.runestone-sphinx .btn-toolbar>.input-group{margin-left:5px}.ptx-runestone-container .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle),.runestone-sphinx .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.ptx-runestone-container .btn-group>.btn:first-child,.runestone-sphinx .btn-group>.btn:first-child{margin-left:0}.ptx-runestone-container .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle),.runestone-sphinx .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.ptx-runestone-container .btn-group>.btn:last-child:not(:first-child),.ptx-runestone-container .btn-group>.dropdown-toggle:not(:first-child),.runestone-sphinx .btn-group>.btn:last-child:not(:first-child),.runestone-sphinx .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.ptx-runestone-container .btn-group>.btn-group,.runestone-sphinx .btn-group>.btn-group{float:left}.ptx-runestone-container .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.runestone-sphinx .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.ptx-runestone-container .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.ptx-runestone-container .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.runestone-sphinx .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.runestone-sphinx .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.ptx-runestone-container .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.runestone-sphinx .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.ptx-runestone-container .btn-group .dropdown-toggle:active,.ptx-runestone-container .btn-group.open .dropdown-toggle,.runestone-sphinx .btn-group .dropdown-toggle:active,.runestone-sphinx .btn-group.open .dropdown-toggle{outline:0}.ptx-runestone-container .btn-group>.btn+.dropdown-toggle,.runestone-sphinx .btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.ptx-runestone-container .btn-group>.btn-lg+.dropdown-toggle,.runestone-sphinx .btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.ptx-runestone-container .btn-group.open .dropdown-toggle,.runestone-sphinx .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.ptx-runestone-container .btn-group.open .dropdown-toggle.btn-link,.runestone-sphinx .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.ptx-runestone-container .btn .caret,.runestone-sphinx .btn .caret{margin-left:0}.ptx-runestone-container .btn-lg .caret,.runestone-sphinx .btn-lg .caret{border-width:5px 5px 0}.ptx-runestone-container .dropup .btn-lg .caret,.runestone-sphinx .dropup .btn-lg .caret{border-width:0 5px 5px}.ptx-runestone-container .btn-group-vertical>.btn,.ptx-runestone-container .btn-group-vertical>.btn-group,.ptx-runestone-container .btn-group-vertical>.btn-group>.btn,.runestone-sphinx .btn-group-vertical>.btn,.runestone-sphinx .btn-group-vertical>.btn-group,.runestone-sphinx .btn-group-vertical>.btn-group>.btn{display:block;float:none;max-width:100%;width:100%}.ptx-runestone-container .btn-group-vertical>.btn-group>.btn,.runestone-sphinx .btn-group-vertical>.btn-group>.btn{float:none}.ptx-runestone-container .btn-group-vertical>.btn+.btn,.ptx-runestone-container .btn-group-vertical>.btn+.btn-group,.ptx-runestone-container .btn-group-vertical>.btn-group+.btn,.ptx-runestone-container .btn-group-vertical>.btn-group+.btn-group,.runestone-sphinx .btn-group-vertical>.btn+.btn,.runestone-sphinx .btn-group-vertical>.btn+.btn-group,.runestone-sphinx .btn-group-vertical>.btn-group+.btn,.runestone-sphinx .btn-group-vertical>.btn-group+.btn-group{margin-left:0;margin-top:-1px}.ptx-runestone-container .btn-group-vertical>.btn:not(:first-child):not(:last-child),.runestone-sphinx .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.ptx-runestone-container .btn-group-vertical>.btn:first-child:not(:last-child),.runestone-sphinx .btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.ptx-runestone-container .btn-group-vertical>.btn:last-child:not(:first-child),.runestone-sphinx .btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:0;border-top-right-radius:0}.ptx-runestone-container .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.runestone-sphinx .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.ptx-runestone-container .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.ptx-runestone-container .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.runestone-sphinx .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.runestone-sphinx .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-left-radius:0;border-bottom-right-radius:0}.ptx-runestone-container .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child,.runestone-sphinx .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.ptx-runestone-container .btn-group-justified,.runestone-sphinx .btn-group-justified{border-collapse:separate;display:table;table-layout:fixed;width:100%}.ptx-runestone-container .btn-group-justified>.btn,.ptx-runestone-container .btn-group-justified>.btn-group,.runestone-sphinx .btn-group-justified>.btn,.runestone-sphinx .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.ptx-runestone-container .btn-group-justified>.btn-group .btn,.runestone-sphinx .btn-group-justified>.btn-group .btn{width:100%}.ptx-runestone-container .btn-group-justified>.btn-group .dropdown-menu,.runestone-sphinx .btn-group-justified>.btn-group .dropdown-menu{left:auto}.ptx-runestone-container [data-toggle=buttons]>.btn input[type=checkbox],.ptx-runestone-container [data-toggle=buttons]>.btn input[type=radio],.ptx-runestone-container [data-toggle=buttons]>.btn-group>.btn input[type=checkbox],.ptx-runestone-container [data-toggle=buttons]>.btn-group>.btn input[type=radio],.runestone-sphinx [data-toggle=buttons]>.btn input[type=checkbox],.runestone-sphinx [data-toggle=buttons]>.btn input[type=radio],.runestone-sphinx [data-toggle=buttons]>.btn-group>.btn input[type=checkbox],.runestone-sphinx [data-toggle=buttons]>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.ptx-runestone-container .input-group,.runestone-sphinx .input-group{border-collapse:separate;display:table;position:relative}.ptx-runestone-container .input-group[class*=col-],.runestone-sphinx .input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.ptx-runestone-container .input-group .form-control,.runestone-sphinx .input-group .form-control{float:left;margin-bottom:0;position:relative;width:100%;z-index:2}.ptx-runestone-container .input-group .form-control:focus,.runestone-sphinx .input-group .form-control:focus{z-index:3}.ptx-runestone-container .input-group-lg>.form-control,.ptx-runestone-container .input-group-lg>.input-group-addon,.ptx-runestone-container .input-group-lg>.input-group-btn>.btn,.runestone-sphinx .input-group-lg>.form-control,.runestone-sphinx .input-group-lg>.input-group-addon,.runestone-sphinx .input-group-lg>.input-group-btn>.btn{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container select.input-group-lg>.form-control,.ptx-runestone-container select.input-group-lg>.input-group-addon,.ptx-runestone-container select.input-group-lg>.input-group-btn>.btn,.runestone-sphinx select.input-group-lg>.form-control,.runestone-sphinx select.input-group-lg>.input-group-addon,.runestone-sphinx select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.ptx-runestone-container select[multiple].input-group-lg>.form-control,.ptx-runestone-container select[multiple].input-group-lg>.input-group-addon,.ptx-runestone-container select[multiple].input-group-lg>.input-group-btn>.btn,.ptx-runestone-container textarea.input-group-lg>.form-control,.ptx-runestone-container textarea.input-group-lg>.input-group-addon,.ptx-runestone-container textarea.input-group-lg>.input-group-btn>.btn,.runestone-sphinx select[multiple].input-group-lg>.form-control,.runestone-sphinx select[multiple].input-group-lg>.input-group-addon,.runestone-sphinx select[multiple].input-group-lg>.input-group-btn>.btn,.runestone-sphinx textarea.input-group-lg>.form-control,.runestone-sphinx textarea.input-group-lg>.input-group-addon,.runestone-sphinx textarea.input-group-lg>.input-group-btn>.btn{height:auto}.ptx-runestone-container .input-group-sm>.form-control,.ptx-runestone-container .input-group-sm>.input-group-addon,.ptx-runestone-container .input-group-sm>.input-group-btn>.btn,.runestone-sphinx .input-group-sm>.form-control,.runestone-sphinx .input-group-sm>.input-group-addon,.runestone-sphinx .input-group-sm>.input-group-btn>.btn{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}.ptx-runestone-container select.input-group-sm>.form-control,.ptx-runestone-container select.input-group-sm>.input-group-addon,.ptx-runestone-container select.input-group-sm>.input-group-btn>.btn,.runestone-sphinx select.input-group-sm>.form-control,.runestone-sphinx select.input-group-sm>.input-group-addon,.runestone-sphinx select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.ptx-runestone-container select[multiple].input-group-sm>.form-control,.ptx-runestone-container select[multiple].input-group-sm>.input-group-addon,.ptx-runestone-container select[multiple].input-group-sm>.input-group-btn>.btn,.ptx-runestone-container textarea.input-group-sm>.form-control,.ptx-runestone-container textarea.input-group-sm>.input-group-addon,.ptx-runestone-container textarea.input-group-sm>.input-group-btn>.btn,.runestone-sphinx select[multiple].input-group-sm>.form-control,.runestone-sphinx select[multiple].input-group-sm>.input-group-addon,.runestone-sphinx select[multiple].input-group-sm>.input-group-btn>.btn,.runestone-sphinx textarea.input-group-sm>.form-control,.runestone-sphinx textarea.input-group-sm>.input-group-addon,.runestone-sphinx textarea.input-group-sm>.input-group-btn>.btn{height:auto}.ptx-runestone-container .input-group .form-control,.ptx-runestone-container .input-group-addon,.ptx-runestone-container .input-group-btn,.runestone-sphinx .input-group .form-control,.runestone-sphinx .input-group-addon,.runestone-sphinx .input-group-btn{display:table-cell}.ptx-runestone-container .input-group .form-control:not(:first-child):not(:last-child),.ptx-runestone-container .input-group-addon:not(:first-child):not(:last-child),.ptx-runestone-container .input-group-btn:not(:first-child):not(:last-child),.runestone-sphinx .input-group .form-control:not(:first-child):not(:last-child),.runestone-sphinx .input-group-addon:not(:first-child):not(:last-child),.runestone-sphinx .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.ptx-runestone-container .input-group-addon,.ptx-runestone-container .input-group-btn,.runestone-sphinx .input-group-addon,.runestone-sphinx .input-group-btn{vertical-align:middle;white-space:nowrap;width:1%}.ptx-runestone-container .input-group-addon,.runestone-sphinx .input-group-addon{background-color:#eee;border:1px solid #ccc;border-radius:4px;color:#555;font-size:14px;font-weight:400;line-height:1;padding:6px 12px;text-align:center}.ptx-runestone-container .input-group-addon.input-sm,.runestone-sphinx .input-group-addon.input-sm{border-radius:3px;font-size:12px;padding:5px 10px}.ptx-runestone-container .input-group-addon.input-lg,.runestone-sphinx .input-group-addon.input-lg{border-radius:6px;font-size:18px;padding:10px 16px}.ptx-runestone-container .input-group-addon input[type=checkbox],.ptx-runestone-container .input-group-addon input[type=radio],.runestone-sphinx .input-group-addon input[type=checkbox],.runestone-sphinx .input-group-addon input[type=radio]{margin-top:0}.ptx-runestone-container .input-group .form-control:first-child,.ptx-runestone-container .input-group-addon:first-child,.ptx-runestone-container .input-group-btn:first-child>.btn,.ptx-runestone-container .input-group-btn:first-child>.btn-group>.btn,.ptx-runestone-container .input-group-btn:first-child>.dropdown-toggle,.ptx-runestone-container .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.ptx-runestone-container .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.runestone-sphinx .input-group .form-control:first-child,.runestone-sphinx .input-group-addon:first-child,.runestone-sphinx .input-group-btn:first-child>.btn,.runestone-sphinx .input-group-btn:first-child>.btn-group>.btn,.runestone-sphinx .input-group-btn:first-child>.dropdown-toggle,.runestone-sphinx .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.runestone-sphinx .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.ptx-runestone-container .input-group-addon:first-child,.runestone-sphinx .input-group-addon:first-child{border-right:0}.ptx-runestone-container .input-group .form-control:last-child,.ptx-runestone-container .input-group-addon:last-child,.ptx-runestone-container .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.ptx-runestone-container .input-group-btn:first-child>.btn:not(:first-child),.ptx-runestone-container .input-group-btn:last-child>.btn,.ptx-runestone-container .input-group-btn:last-child>.btn-group>.btn,.ptx-runestone-container .input-group-btn:last-child>.dropdown-toggle,.runestone-sphinx .input-group .form-control:last-child,.runestone-sphinx .input-group-addon:last-child,.runestone-sphinx .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.runestone-sphinx .input-group-btn:first-child>.btn:not(:first-child),.runestone-sphinx .input-group-btn:last-child>.btn,.runestone-sphinx .input-group-btn:last-child>.btn-group>.btn,.runestone-sphinx .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.ptx-runestone-container .input-group-addon:last-child,.runestone-sphinx .input-group-addon:last-child{border-left:0}.ptx-runestone-container .input-group-btn,.runestone-sphinx .input-group-btn{font-size:0;position:relative;white-space:nowrap}.ptx-runestone-container .input-group-btn>.btn,.runestone-sphinx .input-group-btn>.btn{position:relative}.ptx-runestone-container .input-group-btn>.btn+.btn,.runestone-sphinx .input-group-btn>.btn+.btn{margin-left:-1px}.ptx-runestone-container .input-group-btn>.btn:active,.ptx-runestone-container .input-group-btn>.btn:focus,.ptx-runestone-container .input-group-btn>.btn:hover,.runestone-sphinx .input-group-btn>.btn:active,.runestone-sphinx .input-group-btn>.btn:focus,.runestone-sphinx .input-group-btn>.btn:hover{z-index:2}.ptx-runestone-container .input-group-btn:first-child>.btn,.ptx-runestone-container .input-group-btn:first-child>.btn-group,.runestone-sphinx .input-group-btn:first-child>.btn,.runestone-sphinx .input-group-btn:first-child>.btn-group{margin-right:-1px}.ptx-runestone-container .input-group-btn:last-child>.btn,.ptx-runestone-container .input-group-btn:last-child>.btn-group,.runestone-sphinx .input-group-btn:last-child>.btn,.runestone-sphinx .input-group-btn:last-child>.btn-group{margin-left:-1px;z-index:2}.ptx-runestone-container .nav,.runestone-sphinx .nav{list-style:none;margin-bottom:0;padding-left:0}.ptx-runestone-container .nav>li,.runestone-sphinx .nav>li{display:block;position:relative}.ptx-runestone-container .nav>li>a,.runestone-sphinx .nav>li>a{display:block;padding:10px 15px;position:relative}.ptx-runestone-container .nav>li>a:focus,.ptx-runestone-container .nav>li>a:hover,.runestone-sphinx .nav>li>a:focus,.runestone-sphinx .nav>li>a:hover{background-color:#eee;text-decoration:none}.ptx-runestone-container .nav>li.disabled>a,.runestone-sphinx .nav>li.disabled>a{color:#777}.ptx-runestone-container .nav>li.disabled>a:focus,.ptx-runestone-container .nav>li.disabled>a:hover,.runestone-sphinx .nav>li.disabled>a:focus,.runestone-sphinx .nav>li.disabled>a:hover{background-color:transparent;color:#777;cursor:not-allowed;text-decoration:none}.ptx-runestone-container .nav .open>a,.ptx-runestone-container .nav .open>a:focus,.ptx-runestone-container .nav .open>a:hover,.runestone-sphinx .nav .open>a,.runestone-sphinx .nav .open>a:focus,.runestone-sphinx .nav .open>a:hover{background-color:#eee;border-color:#337ab7}.ptx-runestone-container .nav .nav-divider,.runestone-sphinx .nav .nav-divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.ptx-runestone-container .nav>li>a>img,.runestone-sphinx .nav>li>a>img{max-width:none}.ptx-runestone-container .nav-tabs,.runestone-sphinx .nav-tabs{border-bottom:1px solid #ddd}.ptx-runestone-container .nav-tabs>li,.runestone-sphinx .nav-tabs>li{float:left;margin-bottom:-1px}.ptx-runestone-container .nav-tabs>li>a,.runestone-sphinx .nav-tabs>li>a{border:1px solid transparent;border-radius:4px 4px 0 0;line-height:1.42857143;margin-right:2px}.ptx-runestone-container .nav-tabs>li>a:hover,.runestone-sphinx .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.ptx-runestone-container .nav-tabs>li.active>a,.ptx-runestone-container .nav-tabs>li.active>a:focus,.ptx-runestone-container .nav-tabs>li.active>a:hover,.runestone-sphinx .nav-tabs>li.active>a,.runestone-sphinx .nav-tabs>li.active>a:focus,.runestone-sphinx .nav-tabs>li.active>a:hover{background-color:#fff;border:1px solid;border-color:#ddd #ddd transparent;color:#555;cursor:default}.ptx-runestone-container .nav-tabs.nav-justified,.runestone-sphinx .nav-tabs.nav-justified{border-bottom:0;width:100%}.ptx-runestone-container .nav-tabs.nav-justified>li,.runestone-sphinx .nav-tabs.nav-justified>li{float:none}.ptx-runestone-container .nav-tabs.nav-justified>li>a,.runestone-sphinx .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.ptx-runestone-container .nav-tabs.nav-justified>.dropdown .dropdown-menu,.runestone-sphinx .nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.ptx-runestone-container .nav-tabs.nav-justified>li,.runestone-sphinx .nav-tabs.nav-justified>li{display:table-cell;width:1%}.ptx-runestone-container .nav-tabs.nav-justified>li>a,.runestone-sphinx .nav-tabs.nav-justified>li>a{margin-bottom:0}}.ptx-runestone-container .nav-tabs.nav-justified>li>a,.runestone-sphinx .nav-tabs.nav-justified>li>a{border-radius:4px;margin-right:0}.ptx-runestone-container .nav-tabs.nav-justified>.active>a,.ptx-runestone-container .nav-tabs.nav-justified>.active>a:focus,.ptx-runestone-container .nav-tabs.nav-justified>.active>a:hover,.runestone-sphinx .nav-tabs.nav-justified>.active>a,.runestone-sphinx .nav-tabs.nav-justified>.active>a:focus,.runestone-sphinx .nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.ptx-runestone-container .nav-tabs.nav-justified>li>a,.runestone-sphinx .nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.ptx-runestone-container .nav-tabs.nav-justified>.active>a,.ptx-runestone-container .nav-tabs.nav-justified>.active>a:focus,.ptx-runestone-container .nav-tabs.nav-justified>.active>a:hover,.runestone-sphinx .nav-tabs.nav-justified>.active>a,.runestone-sphinx .nav-tabs.nav-justified>.active>a:focus,.runestone-sphinx .nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.ptx-runestone-container .nav-pills>li,.runestone-sphinx .nav-pills>li{float:left}.ptx-runestone-container .nav-pills>li>a,.runestone-sphinx .nav-pills>li>a{border-radius:4px}.ptx-runestone-container .nav-pills>li+li,.runestone-sphinx .nav-pills>li+li{margin-left:2px}.ptx-runestone-container .nav-pills>li.active>a,.ptx-runestone-container .nav-pills>li.active>a:focus,.ptx-runestone-container .nav-pills>li.active>a:hover,.runestone-sphinx .nav-pills>li.active>a,.runestone-sphinx .nav-pills>li.active>a:focus,.runestone-sphinx .nav-pills>li.active>a:hover{background-color:#337ab7;color:#fff}.ptx-runestone-container .nav-stacked>li,.runestone-sphinx .nav-stacked>li{float:none}.ptx-runestone-container .nav-stacked>li+li,.runestone-sphinx .nav-stacked>li+li{margin-left:0;margin-top:2px}.ptx-runestone-container .nav-justified,.runestone-sphinx .nav-justified{width:100%}.ptx-runestone-container .nav-justified>li,.runestone-sphinx .nav-justified>li{float:none}.ptx-runestone-container .nav-justified>li>a,.runestone-sphinx .nav-justified>li>a{margin-bottom:5px;text-align:center}.ptx-runestone-container .nav-justified>.dropdown .dropdown-menu,.runestone-sphinx .nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.ptx-runestone-container .nav-justified>li,.runestone-sphinx .nav-justified>li{display:table-cell;width:1%}.ptx-runestone-container .nav-justified>li>a,.runestone-sphinx .nav-justified>li>a{margin-bottom:0}}.ptx-runestone-container .nav-tabs-justified,.runestone-sphinx .nav-tabs-justified{border-bottom:0}.ptx-runestone-container .nav-tabs-justified>li>a,.runestone-sphinx .nav-tabs-justified>li>a{border-radius:4px;margin-right:0}.ptx-runestone-container .nav-tabs-justified>.active>a,.ptx-runestone-container .nav-tabs-justified>.active>a:focus,.ptx-runestone-container .nav-tabs-justified>.active>a:hover,.runestone-sphinx .nav-tabs-justified>.active>a,.runestone-sphinx .nav-tabs-justified>.active>a:focus,.runestone-sphinx .nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.ptx-runestone-container .nav-tabs-justified>li>a,.runestone-sphinx .nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.ptx-runestone-container .nav-tabs-justified>.active>a,.ptx-runestone-container .nav-tabs-justified>.active>a:focus,.ptx-runestone-container .nav-tabs-justified>.active>a:hover,.runestone-sphinx .nav-tabs-justified>.active>a,.runestone-sphinx .nav-tabs-justified>.active>a:focus,.runestone-sphinx .nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.ptx-runestone-container .tab-content>.tab-pane,.runestone-sphinx .tab-content>.tab-pane{display:none}.ptx-runestone-container .tab-content>.active,.runestone-sphinx .tab-content>.active{display:block}.ptx-runestone-container .nav-tabs .dropdown-menu,.runestone-sphinx .nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.ptx-runestone-container .navbar,.runestone-sphinx .navbar{border:1px solid transparent;margin-bottom:20px;min-height:50px;position:relative}@media (min-width:768px){.ptx-runestone-container .navbar,.runestone-sphinx .navbar{border-radius:4px}.ptx-runestone-container .navbar-header,.runestone-sphinx .navbar-header{float:left}}.ptx-runestone-container .navbar-collapse,.runestone-sphinx .navbar-collapse{-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);overflow-x:visible;padding-left:15px;padding-right:15px}.ptx-runestone-container .navbar-collapse.in,.runestone-sphinx .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.ptx-runestone-container .navbar-collapse,.runestone-sphinx .navbar-collapse{border-top:0;-webkit-box-shadow:none;box-shadow:none;width:auto}.ptx-runestone-container .navbar-collapse.collapse,.runestone-sphinx .navbar-collapse.collapse{display:block!important;height:auto!important;overflow:visible!important;padding-bottom:0}.ptx-runestone-container .navbar-collapse.in,.runestone-sphinx .navbar-collapse.in{overflow-y:visible}.ptx-runestone-container .navbar-fixed-bottom .navbar-collapse,.ptx-runestone-container .navbar-fixed-top .navbar-collapse,.ptx-runestone-container .navbar-static-top .navbar-collapse,.runestone-sphinx .navbar-fixed-bottom .navbar-collapse,.runestone-sphinx .navbar-fixed-top .navbar-collapse,.runestone-sphinx .navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.ptx-runestone-container .navbar-fixed-bottom,.ptx-runestone-container .navbar-fixed-top,.runestone-sphinx .navbar-fixed-bottom,.runestone-sphinx .navbar-fixed-top{left:0;position:fixed;right:0;z-index:1030}.ptx-runestone-container .navbar-fixed-bottom .navbar-collapse,.ptx-runestone-container .navbar-fixed-top .navbar-collapse,.runestone-sphinx .navbar-fixed-bottom .navbar-collapse,.runestone-sphinx .navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.ptx-runestone-container .navbar-fixed-bottom .navbar-collapse,.ptx-runestone-container .navbar-fixed-top .navbar-collapse,.runestone-sphinx .navbar-fixed-bottom .navbar-collapse,.runestone-sphinx .navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.ptx-runestone-container .navbar-fixed-bottom,.ptx-runestone-container .navbar-fixed-top,.runestone-sphinx .navbar-fixed-bottom,.runestone-sphinx .navbar-fixed-top{border-radius:0}}.ptx-runestone-container .navbar-fixed-top,.runestone-sphinx .navbar-fixed-top{border-width:0 0 1px;top:0}.ptx-runestone-container .navbar-fixed-bottom,.runestone-sphinx .navbar-fixed-bottom{border-width:1px 0 0;bottom:0;margin-bottom:0}.ptx-runestone-container .container-fluid>.navbar-collapse,.ptx-runestone-container .container-fluid>.navbar-header,.ptx-runestone-container .container>.navbar-collapse,.ptx-runestone-container .container>.navbar-header,.runestone-sphinx .container-fluid>.navbar-collapse,.runestone-sphinx .container-fluid>.navbar-header,.runestone-sphinx .container>.navbar-collapse,.runestone-sphinx .container>.navbar-header{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.ptx-runestone-container .container-fluid>.navbar-collapse,.ptx-runestone-container .container-fluid>.navbar-header,.ptx-runestone-container .container>.navbar-collapse,.ptx-runestone-container .container>.navbar-header,.runestone-sphinx .container-fluid>.navbar-collapse,.runestone-sphinx .container-fluid>.navbar-header,.runestone-sphinx .container>.navbar-collapse,.runestone-sphinx .container>.navbar-header{margin-left:0;margin-right:0}}.ptx-runestone-container .navbar-static-top,.runestone-sphinx .navbar-static-top{border-width:0 0 1px;z-index:1000}@media (min-width:768px){.ptx-runestone-container .navbar-static-top,.runestone-sphinx .navbar-static-top{border-radius:0}}.ptx-runestone-container .navbar-brand,.runestone-sphinx .navbar-brand{float:left;font-size:18px;height:50px;line-height:20px;padding:15px}.ptx-runestone-container .navbar-brand:focus,.ptx-runestone-container .navbar-brand:hover,.runestone-sphinx .navbar-brand:focus,.runestone-sphinx .navbar-brand:hover{text-decoration:none}.ptx-runestone-container .navbar-brand>img,.runestone-sphinx .navbar-brand>img{display:block}@media (min-width:768px){.ptx-runestone-container .navbar>.container .navbar-brand,.ptx-runestone-container .navbar>.container-fluid .navbar-brand,.runestone-sphinx .navbar>.container .navbar-brand,.runestone-sphinx .navbar>.container-fluid .navbar-brand{margin-left:-15px}}.ptx-runestone-container .navbar-toggle,.runestone-sphinx .navbar-toggle{background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px;float:right;margin-bottom:8px;margin-right:15px;margin-top:8px;padding:9px 10px;position:relative}.ptx-runestone-container .navbar-toggle:focus,.runestone-sphinx .navbar-toggle:focus{outline:0}.ptx-runestone-container .navbar-toggle .icon-bar,.runestone-sphinx .navbar-toggle .icon-bar{border-radius:1px;display:block;height:2px;width:22px}.ptx-runestone-container .navbar-toggle .icon-bar+.icon-bar,.runestone-sphinx .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.ptx-runestone-container .navbar-toggle,.runestone-sphinx .navbar-toggle{display:none}}.ptx-runestone-container .navbar-nav,.runestone-sphinx .navbar-nav{margin:7.5px -15px}.ptx-runestone-container .navbar-nav>li>a,.runestone-sphinx .navbar-nav>li>a{line-height:20px;padding-bottom:10px;padding-top:10px}@media (max-width:767px){.ptx-runestone-container .navbar-nav .open .dropdown-menu,.runestone-sphinx .navbar-nav .open .dropdown-menu{background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none;float:none;margin-top:0;position:static;width:auto}.ptx-runestone-container .navbar-nav .open .dropdown-menu .dropdown-header,.ptx-runestone-container .navbar-nav .open .dropdown-menu>li>a,.runestone-sphinx .navbar-nav .open .dropdown-menu .dropdown-header,.runestone-sphinx .navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.ptx-runestone-container .navbar-nav .open .dropdown-menu>li>a,.runestone-sphinx .navbar-nav .open .dropdown-menu>li>a{line-height:20px}.ptx-runestone-container .navbar-nav .open .dropdown-menu>li>a:focus,.ptx-runestone-container .navbar-nav .open .dropdown-menu>li>a:hover,.runestone-sphinx .navbar-nav .open .dropdown-menu>li>a:focus,.runestone-sphinx .navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.ptx-runestone-container .navbar-nav,.runestone-sphinx .navbar-nav{float:left;margin:0}.ptx-runestone-container .navbar-nav>li,.runestone-sphinx .navbar-nav>li{float:left}.ptx-runestone-container .navbar-nav>li>a,.runestone-sphinx .navbar-nav>li>a{padding-bottom:15px;padding-top:15px}}.ptx-runestone-container .navbar-form,.runestone-sphinx .navbar-form{border-bottom:1px solid transparent;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);margin:8px -15px;padding:10px 15px}@media (min-width:768px){.ptx-runestone-container .navbar-form .form-group,.runestone-sphinx .navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.ptx-runestone-container .navbar-form .form-control,.runestone-sphinx .navbar-form .form-control{display:inline-block;vertical-align:middle;width:auto}.ptx-runestone-container .navbar-form .form-control-static,.runestone-sphinx .navbar-form .form-control-static{display:inline-block}.ptx-runestone-container .navbar-form .input-group,.runestone-sphinx .navbar-form .input-group{display:inline-table;vertical-align:middle}.ptx-runestone-container .navbar-form .input-group .form-control,.ptx-runestone-container .navbar-form .input-group .input-group-addon,.ptx-runestone-container .navbar-form .input-group .input-group-btn,.runestone-sphinx .navbar-form .input-group .form-control,.runestone-sphinx .navbar-form .input-group .input-group-addon,.runestone-sphinx .navbar-form .input-group .input-group-btn{width:auto}.ptx-runestone-container .navbar-form .input-group>.form-control,.runestone-sphinx .navbar-form .input-group>.form-control{width:100%}.ptx-runestone-container .navbar-form .control-label,.runestone-sphinx .navbar-form .control-label{margin-bottom:0;vertical-align:middle}.ptx-runestone-container .navbar-form .checkbox,.ptx-runestone-container .navbar-form .radio,.runestone-sphinx .navbar-form .checkbox,.runestone-sphinx .navbar-form .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.ptx-runestone-container .navbar-form .checkbox label,.ptx-runestone-container .navbar-form .radio label,.runestone-sphinx .navbar-form .checkbox label,.runestone-sphinx .navbar-form .radio label{padding-left:0}.ptx-runestone-container .navbar-form .checkbox input[type=checkbox],.ptx-runestone-container .navbar-form .radio input[type=radio],.runestone-sphinx .navbar-form .checkbox input[type=checkbox],.runestone-sphinx .navbar-form .radio input[type=radio]{margin-left:0;position:relative}.ptx-runestone-container .navbar-form .has-feedback .form-control-feedback,.runestone-sphinx .navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.ptx-runestone-container .navbar-form .form-group,.runestone-sphinx .navbar-form .form-group{margin-bottom:5px}.ptx-runestone-container .navbar-form .form-group:last-child,.runestone-sphinx .navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.ptx-runestone-container .navbar-form,.runestone-sphinx .navbar-form{border:0;-webkit-box-shadow:none;box-shadow:none;margin-left:0;margin-right:0;padding-bottom:0;padding-top:0;width:auto}}.ptx-runestone-container .navbar-nav>li>.dropdown-menu,.runestone-sphinx .navbar-nav>li>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.ptx-runestone-container .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu,.runestone-sphinx .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;margin-bottom:0}.ptx-runestone-container .navbar-btn,.runestone-sphinx .navbar-btn{margin-bottom:8px;margin-top:8px}.ptx-runestone-container .navbar-btn.btn-sm,.runestone-sphinx .navbar-btn.btn-sm{margin-bottom:10px;margin-top:10px}.ptx-runestone-container .navbar-btn.btn-xs,.runestone-sphinx .navbar-btn.btn-xs{margin-bottom:14px;margin-top:14px}.ptx-runestone-container .navbar-text,.runestone-sphinx .navbar-text{margin-bottom:15px;margin-top:15px}@media (min-width:768px){.ptx-runestone-container .navbar-text,.runestone-sphinx .navbar-text{float:left;margin-left:15px;margin-right:15px}.ptx-runestone-container .navbar-left,.runestone-sphinx .navbar-left{float:left!important}.ptx-runestone-container .navbar-right,.runestone-sphinx .navbar-right{float:right!important;margin-right:-15px}.ptx-runestone-container .navbar-right~.navbar-right,.runestone-sphinx .navbar-right~.navbar-right{margin-right:0}}.ptx-runestone-container .navbar-default,.runestone-sphinx .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.ptx-runestone-container .navbar-default .navbar-brand,.runestone-sphinx .navbar-default .navbar-brand{color:#777}.ptx-runestone-container .navbar-default .navbar-brand:focus,.ptx-runestone-container .navbar-default .navbar-brand:hover,.runestone-sphinx .navbar-default .navbar-brand:focus,.runestone-sphinx .navbar-default .navbar-brand:hover{background-color:transparent;color:#5e5e5e}.ptx-runestone-container .navbar-default .navbar-nav>li>a,.ptx-runestone-container .navbar-default .navbar-text,.runestone-sphinx .navbar-default .navbar-nav>li>a,.runestone-sphinx .navbar-default .navbar-text{color:#777}.ptx-runestone-container .navbar-default .navbar-nav>li>a:focus,.ptx-runestone-container .navbar-default .navbar-nav>li>a:hover,.runestone-sphinx .navbar-default .navbar-nav>li>a:focus,.runestone-sphinx .navbar-default .navbar-nav>li>a:hover{background-color:transparent;color:#333}.ptx-runestone-container .navbar-default .navbar-nav>.active>a,.ptx-runestone-container .navbar-default .navbar-nav>.active>a:focus,.ptx-runestone-container .navbar-default .navbar-nav>.active>a:hover,.runestone-sphinx .navbar-default .navbar-nav>.active>a,.runestone-sphinx .navbar-default .navbar-nav>.active>a:focus,.runestone-sphinx .navbar-default .navbar-nav>.active>a:hover{background-color:#e7e7e7;color:#555}.ptx-runestone-container .navbar-default .navbar-nav>.disabled>a,.ptx-runestone-container .navbar-default .navbar-nav>.disabled>a:focus,.ptx-runestone-container .navbar-default .navbar-nav>.disabled>a:hover,.runestone-sphinx .navbar-default .navbar-nav>.disabled>a,.runestone-sphinx .navbar-default .navbar-nav>.disabled>a:focus,.runestone-sphinx .navbar-default .navbar-nav>.disabled>a:hover{background-color:transparent;color:#ccc}.ptx-runestone-container .navbar-default .navbar-nav>.open>a,.ptx-runestone-container .navbar-default .navbar-nav>.open>a:focus,.ptx-runestone-container .navbar-default .navbar-nav>.open>a:hover,.runestone-sphinx .navbar-default .navbar-nav>.open>a,.runestone-sphinx .navbar-default .navbar-nav>.open>a:focus,.runestone-sphinx .navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>li>a,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#333}.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.active>a,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.active>a,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#e7e7e7;color:#555}.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.ptx-runestone-container .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.runestone-sphinx .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#ccc}}.ptx-runestone-container .navbar-default .navbar-toggle,.runestone-sphinx .navbar-default .navbar-toggle{border-color:#ddd}.ptx-runestone-container .navbar-default .navbar-toggle:focus,.ptx-runestone-container .navbar-default .navbar-toggle:hover,.runestone-sphinx .navbar-default .navbar-toggle:focus,.runestone-sphinx .navbar-default .navbar-toggle:hover{background-color:#ddd}.ptx-runestone-container .navbar-default .navbar-toggle .icon-bar,.runestone-sphinx .navbar-default .navbar-toggle .icon-bar{background-color:#888}.ptx-runestone-container .navbar-default .navbar-collapse,.ptx-runestone-container .navbar-default .navbar-form,.runestone-sphinx .navbar-default .navbar-collapse,.runestone-sphinx .navbar-default .navbar-form{border-color:#e7e7e7}.ptx-runestone-container .navbar-default .navbar-link,.runestone-sphinx .navbar-default .navbar-link{color:#777}.ptx-runestone-container .navbar-default .navbar-link:hover,.runestone-sphinx .navbar-default .navbar-link:hover{color:#333}.ptx-runestone-container .navbar-default .btn-link,.runestone-sphinx .navbar-default .btn-link{color:#777}.ptx-runestone-container .navbar-default .btn-link:focus,.ptx-runestone-container .navbar-default .btn-link:hover,.runestone-sphinx .navbar-default .btn-link:focus,.runestone-sphinx .navbar-default .btn-link:hover{color:#333}.ptx-runestone-container .navbar-default .btn-link[disabled]:focus,.ptx-runestone-container .navbar-default .btn-link[disabled]:hover,.ptx-runestone-container fieldset[disabled] .navbar-default .btn-link:focus,.ptx-runestone-container fieldset[disabled] .navbar-default .btn-link:hover,.runestone-sphinx .navbar-default .btn-link[disabled]:focus,.runestone-sphinx .navbar-default .btn-link[disabled]:hover,.runestone-sphinx fieldset[disabled] .navbar-default .btn-link:focus,.runestone-sphinx fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.ptx-runestone-container .navbar-inverse,.runestone-sphinx .navbar-inverse{background-color:#222;border-color:#080808}.ptx-runestone-container .navbar-inverse .navbar-brand,.runestone-sphinx .navbar-inverse .navbar-brand{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .navbar-brand:focus,.ptx-runestone-container .navbar-inverse .navbar-brand:hover,.runestone-sphinx .navbar-inverse .navbar-brand:focus,.runestone-sphinx .navbar-inverse .navbar-brand:hover{background-color:transparent;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav>li>a,.ptx-runestone-container .navbar-inverse .navbar-text,.runestone-sphinx .navbar-inverse .navbar-nav>li>a,.runestone-sphinx .navbar-inverse .navbar-text{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .navbar-nav>li>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav>li>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav>li>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav>li>a:hover{background-color:transparent;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav>.active>a,.ptx-runestone-container .navbar-inverse .navbar-nav>.active>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav>.active>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav>.active>a,.runestone-sphinx .navbar-inverse .navbar-nav>.active>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav>.active>a:hover{background-color:#080808;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav>.disabled>a,.ptx-runestone-container .navbar-inverse .navbar-nav>.disabled>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav>.disabled>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav>.disabled>a,.runestone-sphinx .navbar-inverse .navbar-nav>.disabled>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav>.disabled>a:hover{background-color:transparent;color:#444}.ptx-runestone-container .navbar-inverse .navbar-nav>.open>a,.ptx-runestone-container .navbar-inverse .navbar-nav>.open>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav>.open>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav>.open>a,.runestone-sphinx .navbar-inverse .navbar-nav>.open>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:767px){.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu .divider,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>li>a,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#080808;color:#fff}.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.ptx-runestone-container .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.runestone-sphinx .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#444}}.ptx-runestone-container .navbar-inverse .navbar-toggle,.runestone-sphinx .navbar-inverse .navbar-toggle{border-color:#333}.ptx-runestone-container .navbar-inverse .navbar-toggle:focus,.ptx-runestone-container .navbar-inverse .navbar-toggle:hover,.runestone-sphinx .navbar-inverse .navbar-toggle:focus,.runestone-sphinx .navbar-inverse .navbar-toggle:hover{background-color:#333}.ptx-runestone-container .navbar-inverse .navbar-toggle .icon-bar,.runestone-sphinx .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.ptx-runestone-container .navbar-inverse .navbar-collapse,.ptx-runestone-container .navbar-inverse .navbar-form,.runestone-sphinx .navbar-inverse .navbar-collapse,.runestone-sphinx .navbar-inverse .navbar-form{border-color:#101010}.ptx-runestone-container .navbar-inverse .navbar-link,.runestone-sphinx .navbar-inverse .navbar-link{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .navbar-link:hover,.runestone-sphinx .navbar-inverse .navbar-link:hover{color:#fff}.ptx-runestone-container .navbar-inverse .btn-link,.runestone-sphinx .navbar-inverse .btn-link{color:#9d9d9d}.ptx-runestone-container .navbar-inverse .btn-link:focus,.ptx-runestone-container .navbar-inverse .btn-link:hover,.runestone-sphinx .navbar-inverse .btn-link:focus,.runestone-sphinx .navbar-inverse .btn-link:hover{color:#fff}.ptx-runestone-container .navbar-inverse .btn-link[disabled]:focus,.ptx-runestone-container .navbar-inverse .btn-link[disabled]:hover,.ptx-runestone-container fieldset[disabled] .navbar-inverse .btn-link:focus,.ptx-runestone-container fieldset[disabled] .navbar-inverse .btn-link:hover,.runestone-sphinx .navbar-inverse .btn-link[disabled]:focus,.runestone-sphinx .navbar-inverse .btn-link[disabled]:hover,.runestone-sphinx fieldset[disabled] .navbar-inverse .btn-link:focus,.runestone-sphinx fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.ptx-runestone-container .breadcrumb,.runestone-sphinx .breadcrumb{background-color:#f5f5f5;border-radius:4px;list-style:none;margin-bottom:20px;padding:8px 15px}.ptx-runestone-container .breadcrumb>li,.runestone-sphinx .breadcrumb>li{display:inline-block}.ptx-runestone-container .breadcrumb>li+li:before,.runestone-sphinx .breadcrumb>li+li:before{color:#ccc;content:"/\00a0";padding:0 5px}.ptx-runestone-container .breadcrumb>.active,.runestone-sphinx .breadcrumb>.active{color:#777}.ptx-runestone-container .pagination,.runestone-sphinx .pagination{border-radius:4px;display:inline-block;margin:20px 0;padding-left:0}.ptx-runestone-container .pagination>li,.runestone-sphinx .pagination>li{display:inline}.ptx-runestone-container .pagination>li>a,.ptx-runestone-container .pagination>li>span,.runestone-sphinx .pagination>li>a,.runestone-sphinx .pagination>li>span{background-color:#fff;border:1px solid #ddd;color:#337ab7;float:left;line-height:1.42857143;margin-left:-1px;padding:6px 12px;position:relative;text-decoration:none}.ptx-runestone-container .pagination>li>a:focus,.ptx-runestone-container .pagination>li>a:hover,.ptx-runestone-container .pagination>li>span:focus,.ptx-runestone-container .pagination>li>span:hover,.runestone-sphinx .pagination>li>a:focus,.runestone-sphinx .pagination>li>a:hover,.runestone-sphinx .pagination>li>span:focus,.runestone-sphinx .pagination>li>span:hover{background-color:#eee;border-color:#ddd;color:#23527c;z-index:2}.ptx-runestone-container .pagination>li:first-child>a,.ptx-runestone-container .pagination>li:first-child>span,.runestone-sphinx .pagination>li:first-child>a,.runestone-sphinx .pagination>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-left:0}.ptx-runestone-container .pagination>li:last-child>a,.ptx-runestone-container .pagination>li:last-child>span,.runestone-sphinx .pagination>li:last-child>a,.runestone-sphinx .pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.ptx-runestone-container .pagination>.active>a,.ptx-runestone-container .pagination>.active>a:focus,.ptx-runestone-container .pagination>.active>a:hover,.ptx-runestone-container .pagination>.active>span,.ptx-runestone-container .pagination>.active>span:focus,.ptx-runestone-container .pagination>.active>span:hover,.runestone-sphinx .pagination>.active>a,.runestone-sphinx .pagination>.active>a:focus,.runestone-sphinx .pagination>.active>a:hover,.runestone-sphinx .pagination>.active>span,.runestone-sphinx .pagination>.active>span:focus,.runestone-sphinx .pagination>.active>span:hover{background-color:#337ab7;border-color:#337ab7;color:#fff;cursor:default;z-index:3}.ptx-runestone-container .pagination>.disabled>a,.ptx-runestone-container .pagination>.disabled>a:focus,.ptx-runestone-container .pagination>.disabled>a:hover,.ptx-runestone-container .pagination>.disabled>span,.ptx-runestone-container .pagination>.disabled>span:focus,.ptx-runestone-container .pagination>.disabled>span:hover,.runestone-sphinx .pagination>.disabled>a,.runestone-sphinx .pagination>.disabled>a:focus,.runestone-sphinx .pagination>.disabled>a:hover,.runestone-sphinx .pagination>.disabled>span,.runestone-sphinx .pagination>.disabled>span:focus,.runestone-sphinx .pagination>.disabled>span:hover{background-color:#fff;border-color:#ddd;color:#777;cursor:not-allowed}.ptx-runestone-container .pagination-lg>li>a,.ptx-runestone-container .pagination-lg>li>span,.runestone-sphinx .pagination-lg>li>a,.runestone-sphinx .pagination-lg>li>span{font-size:18px;line-height:1.3333333;padding:10px 16px}.ptx-runestone-container .pagination-lg>li:first-child>a,.ptx-runestone-container .pagination-lg>li:first-child>span,.runestone-sphinx .pagination-lg>li:first-child>a,.runestone-sphinx .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.ptx-runestone-container .pagination-lg>li:last-child>a,.ptx-runestone-container .pagination-lg>li:last-child>span,.runestone-sphinx .pagination-lg>li:last-child>a,.runestone-sphinx .pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.ptx-runestone-container .pagination-sm>li>a,.ptx-runestone-container .pagination-sm>li>span,.runestone-sphinx .pagination-sm>li>a,.runestone-sphinx .pagination-sm>li>span{font-size:12px;line-height:1.5;padding:5px 10px}.ptx-runestone-container .pagination-sm>li:first-child>a,.ptx-runestone-container .pagination-sm>li:first-child>span,.runestone-sphinx .pagination-sm>li:first-child>a,.runestone-sphinx .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.ptx-runestone-container .pagination-sm>li:last-child>a,.ptx-runestone-container .pagination-sm>li:last-child>span,.runestone-sphinx .pagination-sm>li:last-child>a,.runestone-sphinx .pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.ptx-runestone-container .pager,.runestone-sphinx .pager{list-style:none;margin:20px 0;padding-left:0;text-align:center}.ptx-runestone-container .pager li,.runestone-sphinx .pager li{display:inline}.ptx-runestone-container .pager li>a,.ptx-runestone-container .pager li>span,.runestone-sphinx .pager li>a,.runestone-sphinx .pager li>span{background-color:#fff;border:1px solid #ddd;border-radius:15px;display:inline-block;padding:5px 14px}.ptx-runestone-container .pager li>a:focus,.ptx-runestone-container .pager li>a:hover,.runestone-sphinx .pager li>a:focus,.runestone-sphinx .pager li>a:hover{background-color:#eee;text-decoration:none}.ptx-runestone-container .pager .next>a,.ptx-runestone-container .pager .next>span,.runestone-sphinx .pager .next>a,.runestone-sphinx .pager .next>span{float:right}.ptx-runestone-container .pager .previous>a,.ptx-runestone-container .pager .previous>span,.runestone-sphinx .pager .previous>a,.runestone-sphinx .pager .previous>span{float:left}.ptx-runestone-container .pager .disabled>a,.ptx-runestone-container .pager .disabled>a:focus,.ptx-runestone-container .pager .disabled>a:hover,.ptx-runestone-container .pager .disabled>span,.runestone-sphinx .pager .disabled>a,.runestone-sphinx .pager .disabled>a:focus,.runestone-sphinx .pager .disabled>a:hover,.runestone-sphinx .pager .disabled>span{background-color:#fff;color:#777;cursor:not-allowed}.ptx-runestone-container .label,.runestone-sphinx .label{border-radius:.25em;color:#fff;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:baseline;white-space:nowrap}.ptx-runestone-container a.label:focus,.ptx-runestone-container a.label:hover,.runestone-sphinx a.label:focus,.runestone-sphinx a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.ptx-runestone-container .label:empty,.runestone-sphinx .label:empty{display:none}.ptx-runestone-container .btn .label,.runestone-sphinx .btn .label{position:relative;top:-1px}.ptx-runestone-container .label-default,.runestone-sphinx .label-default{background-color:#777}.ptx-runestone-container .label-default[href]:focus,.ptx-runestone-container .label-default[href]:hover,.runestone-sphinx .label-default[href]:focus,.runestone-sphinx .label-default[href]:hover{background-color:#5e5e5e}.ptx-runestone-container .label-primary,.runestone-sphinx .label-primary{background-color:#337ab7}.ptx-runestone-container .label-primary[href]:focus,.ptx-runestone-container .label-primary[href]:hover,.runestone-sphinx .label-primary[href]:focus,.runestone-sphinx .label-primary[href]:hover{background-color:#286090}.ptx-runestone-container .label-success,.runestone-sphinx .label-success{background-color:#5cb85c}.ptx-runestone-container .label-success[href]:focus,.ptx-runestone-container .label-success[href]:hover,.runestone-sphinx .label-success[href]:focus,.runestone-sphinx .label-success[href]:hover{background-color:#449d44}.ptx-runestone-container .label-info,.runestone-sphinx .label-info{background-color:#5bc0de}.ptx-runestone-container .label-info[href]:focus,.ptx-runestone-container .label-info[href]:hover,.runestone-sphinx .label-info[href]:focus,.runestone-sphinx .label-info[href]:hover{background-color:#31b0d5}.ptx-runestone-container .label-warning,.runestone-sphinx .label-warning{background-color:#f0ad4e}.ptx-runestone-container .label-warning[href]:focus,.ptx-runestone-container .label-warning[href]:hover,.runestone-sphinx .label-warning[href]:focus,.runestone-sphinx .label-warning[href]:hover{background-color:#ec971f}.ptx-runestone-container .label-danger,.runestone-sphinx .label-danger{background-color:#d9534f}.ptx-runestone-container .label-danger[href]:focus,.ptx-runestone-container .label-danger[href]:hover,.runestone-sphinx .label-danger[href]:focus,.runestone-sphinx .label-danger[href]:hover{background-color:#c9302c}.ptx-runestone-container .badge,.runestone-sphinx .badge{background-color:#777;border-radius:10px;color:#fff;display:inline-block;font-size:12px;font-weight:700;line-height:1;min-width:10px;padding:3px 7px;text-align:center;vertical-align:middle;white-space:nowrap}.ptx-runestone-container .badge:empty,.runestone-sphinx .badge:empty{display:none}.ptx-runestone-container .btn .badge,.runestone-sphinx .btn .badge{position:relative;top:-1px}.ptx-runestone-container .btn-group-xs>.btn .badge,.ptx-runestone-container .btn-xs .badge,.runestone-sphinx .btn-group-xs>.btn .badge,.runestone-sphinx .btn-xs .badge{padding:1px 5px;top:0}.ptx-runestone-container a.badge:focus,.ptx-runestone-container a.badge:hover,.runestone-sphinx a.badge:focus,.runestone-sphinx a.badge:hover{color:#fff;cursor:pointer;text-decoration:none}.ptx-runestone-container .list-group-item.active>.badge,.ptx-runestone-container .nav-pills>.active>a>.badge,.runestone-sphinx .list-group-item.active>.badge,.runestone-sphinx .nav-pills>.active>a>.badge{background-color:#fff;color:#337ab7}.ptx-runestone-container .list-group-item>.badge,.runestone-sphinx .list-group-item>.badge{float:right}.ptx-runestone-container .list-group-item>.badge+.badge,.runestone-sphinx .list-group-item>.badge+.badge{margin-right:5px}.ptx-runestone-container .nav-pills>li>a>.badge,.runestone-sphinx .nav-pills>li>a>.badge{margin-left:3px}.ptx-runestone-container .jumbotron,.runestone-sphinx .jumbotron{background-color:#eee;color:inherit;margin-bottom:30px;padding-bottom:30px;padding-top:30px}.ptx-runestone-container .jumbotron .h1,.ptx-runestone-container .jumbotron h1,.runestone-sphinx .jumbotron .h1,.runestone-sphinx .jumbotron h1{color:inherit}.ptx-runestone-container .jumbotron p,.runestone-sphinx .jumbotron p{font-size:21px;font-weight:200;margin-bottom:15px}.ptx-runestone-container .jumbotron>hr,.runestone-sphinx .jumbotron>hr{border-top-color:#d5d5d5}.ptx-runestone-container .container .jumbotron,.ptx-runestone-container .container-fluid .jumbotron,.runestone-sphinx .container .jumbotron,.runestone-sphinx .container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.ptx-runestone-container .jumbotron .container,.runestone-sphinx .jumbotron .container{max-width:100%}@media screen and (min-width:768px){.ptx-runestone-container .jumbotron,.runestone-sphinx .jumbotron{padding-bottom:48px;padding-top:48px}.ptx-runestone-container .container .jumbotron,.ptx-runestone-container .container-fluid .jumbotron,.runestone-sphinx .container .jumbotron,.runestone-sphinx .container-fluid .jumbotron{padding-left:60px;padding-right:60px}.ptx-runestone-container .jumbotron .h1,.ptx-runestone-container .jumbotron h1,.runestone-sphinx .jumbotron .h1,.runestone-sphinx .jumbotron h1{font-size:63px}}.ptx-runestone-container .thumbnail,.runestone-sphinx .thumbnail{background-color:#fff;border:1px solid #ddd;border-radius:4px;display:block;line-height:1.42857143;margin-bottom:20px;padding:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.ptx-runestone-container .thumbnail a>img,.ptx-runestone-container .thumbnail>img,.runestone-sphinx .thumbnail a>img,.runestone-sphinx .thumbnail>img{margin-left:auto;margin-right:auto}.ptx-runestone-container a.thumbnail.active,.ptx-runestone-container a.thumbnail:focus,.ptx-runestone-container a.thumbnail:hover,.runestone-sphinx a.thumbnail.active,.runestone-sphinx a.thumbnail:focus,.runestone-sphinx a.thumbnail:hover{border-color:#337ab7}.ptx-runestone-container .thumbnail .caption,.runestone-sphinx .thumbnail .caption{color:#333;padding:9px}.ptx-runestone-container .alert,.runestone-sphinx .alert{border:1px solid transparent;border-radius:4px;margin-bottom:20px;padding:15px}.ptx-runestone-container .alert h4,.runestone-sphinx .alert h4{color:inherit;margin-top:0}.ptx-runestone-container .alert .alert-link,.runestone-sphinx .alert .alert-link{font-weight:700}.ptx-runestone-container .alert>p,.ptx-runestone-container .alert>ul,.runestone-sphinx .alert>p,.runestone-sphinx .alert>ul{margin-bottom:0}.ptx-runestone-container .alert>p+p,.runestone-sphinx .alert>p+p{margin-top:5px}.ptx-runestone-container .alert-dismissable,.ptx-runestone-container .alert-dismissible,.runestone-sphinx .alert-dismissable,.runestone-sphinx .alert-dismissible{padding-right:35px}.ptx-runestone-container .alert-dismissable .close,.ptx-runestone-container .alert-dismissible .close,.runestone-sphinx .alert-dismissable .close,.runestone-sphinx .alert-dismissible .close{color:inherit;position:relative;right:-21px;top:-2px}.ptx-runestone-container .alert-success,.runestone-sphinx .alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.ptx-runestone-container .alert-success hr,.runestone-sphinx .alert-success hr{border-top-color:#c9e2b3}.ptx-runestone-container .alert-success .alert-link,.runestone-sphinx .alert-success .alert-link{color:#2b542c}.ptx-runestone-container .alert-info,.runestone-sphinx .alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.ptx-runestone-container .alert-info hr,.runestone-sphinx .alert-info hr{border-top-color:#a6e1ec}.ptx-runestone-container .alert-info .alert-link,.runestone-sphinx .alert-info .alert-link{color:#245269}.ptx-runestone-container .alert-warning,.runestone-sphinx .alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.ptx-runestone-container .alert-warning hr,.runestone-sphinx .alert-warning hr{border-top-color:#f7e1b5}.ptx-runestone-container .alert-warning .alert-link,.runestone-sphinx .alert-warning .alert-link{color:#66512c}.ptx-runestone-container .alert-danger,.runestone-sphinx .alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.ptx-runestone-container .alert-danger hr,.runestone-sphinx .alert-danger hr{border-top-color:#e4b9c0}.ptx-runestone-container .alert-danger .alert-link,.runestone-sphinx .alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.ptx-runestone-container .progress,.runestone-sphinx .progress{background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);height:20px;margin-bottom:20px;overflow:hidden}.ptx-runestone-container .progress-bar,.runestone-sphinx .progress-bar{background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);color:#fff;float:left;font-size:12px;height:100%;line-height:20px;text-align:center;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease;width:0}.ptx-runestone-container .progress-bar-striped,.ptx-runestone-container .progress-striped .progress-bar,.runestone-sphinx .progress-bar-striped,.runestone-sphinx .progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.ptx-runestone-container .progress-bar.active,.ptx-runestone-container .progress.active .progress-bar,.runestone-sphinx .progress-bar.active,.runestone-sphinx .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.ptx-runestone-container .progress-bar-success,.runestone-sphinx .progress-bar-success{background-color:#5cb85c}.ptx-runestone-container .progress-striped .progress-bar-success,.runestone-sphinx .progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.ptx-runestone-container .progress-bar-info,.runestone-sphinx .progress-bar-info{background-color:#5bc0de}.ptx-runestone-container .progress-striped .progress-bar-info,.runestone-sphinx .progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.ptx-runestone-container .progress-bar-warning,.runestone-sphinx .progress-bar-warning{background-color:#f0ad4e}.ptx-runestone-container .progress-striped .progress-bar-warning,.runestone-sphinx .progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.ptx-runestone-container .progress-bar-danger,.runestone-sphinx .progress-bar-danger{background-color:#d9534f}.ptx-runestone-container .progress-striped .progress-bar-danger,.runestone-sphinx .progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.ptx-runestone-container .media,.runestone-sphinx .media{margin-top:15px}.ptx-runestone-container .media:first-child,.runestone-sphinx .media:first-child{margin-top:0}.ptx-runestone-container .media,.ptx-runestone-container .media-body,.runestone-sphinx .media,.runestone-sphinx .media-body{zoom:1;overflow:hidden}.ptx-runestone-container .media-body,.runestone-sphinx .media-body{width:10000px}.ptx-runestone-container .media-object,.runestone-sphinx .media-object{display:block}.ptx-runestone-container .media-object.img-thumbnail,.runestone-sphinx .media-object.img-thumbnail{max-width:none}.ptx-runestone-container .media-right,.ptx-runestone-container .media>.pull-right,.runestone-sphinx .media-right,.runestone-sphinx .media>.pull-right{padding-left:10px}.ptx-runestone-container .media-left,.ptx-runestone-container .media>.pull-left,.runestone-sphinx .media-left,.runestone-sphinx .media>.pull-left{padding-right:10px}.ptx-runestone-container .media-body,.ptx-runestone-container .media-left,.ptx-runestone-container .media-right,.runestone-sphinx .media-body,.runestone-sphinx .media-left,.runestone-sphinx .media-right{display:table-cell;vertical-align:top}.ptx-runestone-container .media-middle,.runestone-sphinx .media-middle{vertical-align:middle}.ptx-runestone-container .media-bottom,.runestone-sphinx .media-bottom{vertical-align:bottom}.ptx-runestone-container .media-heading,.runestone-sphinx .media-heading{margin-bottom:5px;margin-top:0}.ptx-runestone-container .media-list,.runestone-sphinx .media-list{list-style:none;padding-left:0}.ptx-runestone-container .list-group,.runestone-sphinx .list-group{margin-bottom:20px;padding-left:0}.ptx-runestone-container .list-group-item,.runestone-sphinx .list-group-item{background-color:#fff;border:1px solid #ddd;display:block;margin-bottom:-1px;padding:10px 15px;position:relative}.ptx-runestone-container .list-group-item:first-child,.runestone-sphinx .list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.ptx-runestone-container .list-group-item:last-child,.runestone-sphinx .list-group-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;margin-bottom:0}.ptx-runestone-container .list-group-item.disabled,.ptx-runestone-container .list-group-item.disabled:focus,.ptx-runestone-container .list-group-item.disabled:hover,.runestone-sphinx .list-group-item.disabled,.runestone-sphinx .list-group-item.disabled:focus,.runestone-sphinx .list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.ptx-runestone-container .list-group-item.disabled .list-group-item-heading,.ptx-runestone-container .list-group-item.disabled:focus .list-group-item-heading,.ptx-runestone-container .list-group-item.disabled:hover .list-group-item-heading,.runestone-sphinx .list-group-item.disabled .list-group-item-heading,.runestone-sphinx .list-group-item.disabled:focus .list-group-item-heading,.runestone-sphinx .list-group-item.disabled:hover .list-group-item-heading{color:inherit}.ptx-runestone-container .list-group-item.disabled .list-group-item-text,.ptx-runestone-container .list-group-item.disabled:focus .list-group-item-text,.ptx-runestone-container .list-group-item.disabled:hover .list-group-item-text,.runestone-sphinx .list-group-item.disabled .list-group-item-text,.runestone-sphinx .list-group-item.disabled:focus .list-group-item-text,.runestone-sphinx .list-group-item.disabled:hover .list-group-item-text{color:#777}.ptx-runestone-container .list-group-item.active,.ptx-runestone-container .list-group-item.active:focus,.ptx-runestone-container .list-group-item.active:hover,.runestone-sphinx .list-group-item.active,.runestone-sphinx .list-group-item.active:focus,.runestone-sphinx .list-group-item.active:hover{background-color:#337ab7;border-color:#337ab7;color:#fff;z-index:2}.ptx-runestone-container .list-group-item.active .list-group-item-heading,.ptx-runestone-container .list-group-item.active .list-group-item-heading>.small,.ptx-runestone-container .list-group-item.active .list-group-item-heading>small,.ptx-runestone-container .list-group-item.active:focus .list-group-item-heading,.ptx-runestone-container .list-group-item.active:focus .list-group-item-heading>.small,.ptx-runestone-container .list-group-item.active:focus .list-group-item-heading>small,.ptx-runestone-container .list-group-item.active:hover .list-group-item-heading,.ptx-runestone-container .list-group-item.active:hover .list-group-item-heading>.small,.ptx-runestone-container .list-group-item.active:hover .list-group-item-heading>small,.runestone-sphinx .list-group-item.active .list-group-item-heading,.runestone-sphinx .list-group-item.active .list-group-item-heading>.small,.runestone-sphinx .list-group-item.active .list-group-item-heading>small,.runestone-sphinx .list-group-item.active:focus .list-group-item-heading,.runestone-sphinx .list-group-item.active:focus .list-group-item-heading>.small,.runestone-sphinx .list-group-item.active:focus .list-group-item-heading>small,.runestone-sphinx .list-group-item.active:hover .list-group-item-heading,.runestone-sphinx .list-group-item.active:hover .list-group-item-heading>.small,.runestone-sphinx .list-group-item.active:hover .list-group-item-heading>small{color:inherit}.ptx-runestone-container .list-group-item.active .list-group-item-text,.ptx-runestone-container .list-group-item.active:focus .list-group-item-text,.ptx-runestone-container .list-group-item.active:hover .list-group-item-text,.runestone-sphinx .list-group-item.active .list-group-item-text,.runestone-sphinx .list-group-item.active:focus .list-group-item-text,.runestone-sphinx .list-group-item.active:hover .list-group-item-text{color:#c7ddef}.ptx-runestone-container a.list-group-item,.ptx-runestone-container button.list-group-item,.runestone-sphinx a.list-group-item,.runestone-sphinx button.list-group-item{color:#555}.ptx-runestone-container a.list-group-item .list-group-item-heading,.ptx-runestone-container button.list-group-item .list-group-item-heading,.runestone-sphinx a.list-group-item .list-group-item-heading,.runestone-sphinx button.list-group-item .list-group-item-heading{color:#333}.ptx-runestone-container a.list-group-item:focus,.ptx-runestone-container a.list-group-item:hover,.ptx-runestone-container button.list-group-item:focus,.ptx-runestone-container button.list-group-item:hover,.runestone-sphinx a.list-group-item:focus,.runestone-sphinx a.list-group-item:hover,.runestone-sphinx button.list-group-item:focus,.runestone-sphinx button.list-group-item:hover{background-color:#f5f5f5;color:#555;text-decoration:none}.ptx-runestone-container button.list-group-item,.runestone-sphinx button.list-group-item{text-align:left;width:100%}.ptx-runestone-container .list-group-item-success,.runestone-sphinx .list-group-item-success{background-color:#dff0d8;color:#3c763d}.ptx-runestone-container a.list-group-item-success,.ptx-runestone-container button.list-group-item-success,.runestone-sphinx a.list-group-item-success,.runestone-sphinx button.list-group-item-success{color:#3c763d}.ptx-runestone-container a.list-group-item-success .list-group-item-heading,.ptx-runestone-container button.list-group-item-success .list-group-item-heading,.runestone-sphinx a.list-group-item-success .list-group-item-heading,.runestone-sphinx button.list-group-item-success .list-group-item-heading{color:inherit}.ptx-runestone-container a.list-group-item-success:focus,.ptx-runestone-container a.list-group-item-success:hover,.ptx-runestone-container button.list-group-item-success:focus,.ptx-runestone-container button.list-group-item-success:hover,.runestone-sphinx a.list-group-item-success:focus,.runestone-sphinx a.list-group-item-success:hover,.runestone-sphinx button.list-group-item-success:focus,.runestone-sphinx button.list-group-item-success:hover{background-color:#d0e9c6;color:#3c763d}.ptx-runestone-container a.list-group-item-success.active,.ptx-runestone-container a.list-group-item-success.active:focus,.ptx-runestone-container a.list-group-item-success.active:hover,.ptx-runestone-container button.list-group-item-success.active,.ptx-runestone-container button.list-group-item-success.active:focus,.ptx-runestone-container button.list-group-item-success.active:hover,.runestone-sphinx a.list-group-item-success.active,.runestone-sphinx a.list-group-item-success.active:focus,.runestone-sphinx a.list-group-item-success.active:hover,.runestone-sphinx button.list-group-item-success.active,.runestone-sphinx button.list-group-item-success.active:focus,.runestone-sphinx button.list-group-item-success.active:hover{background-color:#3c763d;border-color:#3c763d;color:#fff}.ptx-runestone-container .list-group-item-info,.runestone-sphinx .list-group-item-info{background-color:#d9edf7;color:#31708f}.ptx-runestone-container a.list-group-item-info,.ptx-runestone-container button.list-group-item-info,.runestone-sphinx a.list-group-item-info,.runestone-sphinx button.list-group-item-info{color:#31708f}.ptx-runestone-container a.list-group-item-info .list-group-item-heading,.ptx-runestone-container button.list-group-item-info .list-group-item-heading,.runestone-sphinx a.list-group-item-info .list-group-item-heading,.runestone-sphinx button.list-group-item-info .list-group-item-heading{color:inherit}.ptx-runestone-container a.list-group-item-info:focus,.ptx-runestone-container a.list-group-item-info:hover,.ptx-runestone-container button.list-group-item-info:focus,.ptx-runestone-container button.list-group-item-info:hover,.runestone-sphinx a.list-group-item-info:focus,.runestone-sphinx a.list-group-item-info:hover,.runestone-sphinx button.list-group-item-info:focus,.runestone-sphinx button.list-group-item-info:hover{background-color:#c4e3f3;color:#31708f}.ptx-runestone-container a.list-group-item-info.active,.ptx-runestone-container a.list-group-item-info.active:focus,.ptx-runestone-container a.list-group-item-info.active:hover,.ptx-runestone-container button.list-group-item-info.active,.ptx-runestone-container button.list-group-item-info.active:focus,.ptx-runestone-container button.list-group-item-info.active:hover,.runestone-sphinx a.list-group-item-info.active,.runestone-sphinx a.list-group-item-info.active:focus,.runestone-sphinx a.list-group-item-info.active:hover,.runestone-sphinx button.list-group-item-info.active,.runestone-sphinx button.list-group-item-info.active:focus,.runestone-sphinx button.list-group-item-info.active:hover{background-color:#31708f;border-color:#31708f;color:#fff}.ptx-runestone-container .list-group-item-warning,.runestone-sphinx .list-group-item-warning{background-color:#fcf8e3;color:#8a6d3b}.ptx-runestone-container a.list-group-item-warning,.ptx-runestone-container button.list-group-item-warning,.runestone-sphinx a.list-group-item-warning,.runestone-sphinx button.list-group-item-warning{color:#8a6d3b}.ptx-runestone-container a.list-group-item-warning .list-group-item-heading,.ptx-runestone-container button.list-group-item-warning .list-group-item-heading,.runestone-sphinx a.list-group-item-warning .list-group-item-heading,.runestone-sphinx button.list-group-item-warning .list-group-item-heading{color:inherit}.ptx-runestone-container a.list-group-item-warning:focus,.ptx-runestone-container a.list-group-item-warning:hover,.ptx-runestone-container button.list-group-item-warning:focus,.ptx-runestone-container button.list-group-item-warning:hover,.runestone-sphinx a.list-group-item-warning:focus,.runestone-sphinx a.list-group-item-warning:hover,.runestone-sphinx button.list-group-item-warning:focus,.runestone-sphinx button.list-group-item-warning:hover{background-color:#faf2cc;color:#8a6d3b}.ptx-runestone-container a.list-group-item-warning.active,.ptx-runestone-container a.list-group-item-warning.active:focus,.ptx-runestone-container a.list-group-item-warning.active:hover,.ptx-runestone-container button.list-group-item-warning.active,.ptx-runestone-container button.list-group-item-warning.active:focus,.ptx-runestone-container button.list-group-item-warning.active:hover,.runestone-sphinx a.list-group-item-warning.active,.runestone-sphinx a.list-group-item-warning.active:focus,.runestone-sphinx a.list-group-item-warning.active:hover,.runestone-sphinx button.list-group-item-warning.active,.runestone-sphinx button.list-group-item-warning.active:focus,.runestone-sphinx button.list-group-item-warning.active:hover{background-color:#8a6d3b;border-color:#8a6d3b;color:#fff}.ptx-runestone-container .list-group-item-danger,.runestone-sphinx .list-group-item-danger{background-color:#f2dede;color:#a94442}.ptx-runestone-container a.list-group-item-danger,.ptx-runestone-container button.list-group-item-danger,.runestone-sphinx a.list-group-item-danger,.runestone-sphinx button.list-group-item-danger{color:#a94442}.ptx-runestone-container a.list-group-item-danger .list-group-item-heading,.ptx-runestone-container button.list-group-item-danger .list-group-item-heading,.runestone-sphinx a.list-group-item-danger .list-group-item-heading,.runestone-sphinx button.list-group-item-danger .list-group-item-heading{color:inherit}.ptx-runestone-container a.list-group-item-danger:focus,.ptx-runestone-container a.list-group-item-danger:hover,.ptx-runestone-container button.list-group-item-danger:focus,.ptx-runestone-container button.list-group-item-danger:hover,.runestone-sphinx a.list-group-item-danger:focus,.runestone-sphinx a.list-group-item-danger:hover,.runestone-sphinx button.list-group-item-danger:focus,.runestone-sphinx button.list-group-item-danger:hover{background-color:#ebcccc;color:#a94442}.ptx-runestone-container a.list-group-item-danger.active,.ptx-runestone-container a.list-group-item-danger.active:focus,.ptx-runestone-container a.list-group-item-danger.active:hover,.ptx-runestone-container button.list-group-item-danger.active,.ptx-runestone-container button.list-group-item-danger.active:focus,.ptx-runestone-container button.list-group-item-danger.active:hover,.runestone-sphinx a.list-group-item-danger.active,.runestone-sphinx a.list-group-item-danger.active:focus,.runestone-sphinx a.list-group-item-danger.active:hover,.runestone-sphinx button.list-group-item-danger.active,.runestone-sphinx button.list-group-item-danger.active:focus,.runestone-sphinx button.list-group-item-danger.active:hover{background-color:#a94442;border-color:#a94442;color:#fff}.ptx-runestone-container .list-group-item-heading,.runestone-sphinx .list-group-item-heading{margin-bottom:5px;margin-top:0}.ptx-runestone-container .list-group-item-text,.runestone-sphinx .list-group-item-text{line-height:1.3;margin-bottom:0}.ptx-runestone-container .panel,.runestone-sphinx .panel{background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05);margin-bottom:20px}.ptx-runestone-container .panel-body,.runestone-sphinx .panel-body{padding:15px}.ptx-runestone-container .panel-heading,.runestone-sphinx .panel-heading{border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px;padding:10px 15px}.ptx-runestone-container .panel-heading>.dropdown .dropdown-toggle,.runestone-sphinx .panel-heading>.dropdown .dropdown-toggle{color:inherit}.ptx-runestone-container .panel-title,.runestone-sphinx .panel-title{color:inherit;font-size:16px;margin-bottom:0;margin-top:0}.ptx-runestone-container .panel-title>.small,.ptx-runestone-container .panel-title>.small>a,.ptx-runestone-container .panel-title>a,.ptx-runestone-container .panel-title>small,.ptx-runestone-container .panel-title>small>a,.runestone-sphinx .panel-title>.small,.runestone-sphinx .panel-title>.small>a,.runestone-sphinx .panel-title>a,.runestone-sphinx .panel-title>small,.runestone-sphinx .panel-title>small>a{color:inherit}.ptx-runestone-container .panel-footer,.runestone-sphinx .panel-footer{background-color:#f5f5f5;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #ddd;padding:10px 15px}.ptx-runestone-container .panel>.list-group,.ptx-runestone-container .panel>.panel-collapse>.list-group,.runestone-sphinx .panel>.list-group,.runestone-sphinx .panel>.panel-collapse>.list-group{margin-bottom:0}.ptx-runestone-container .panel>.list-group .list-group-item,.ptx-runestone-container .panel>.panel-collapse>.list-group .list-group-item,.runestone-sphinx .panel>.list-group .list-group-item,.runestone-sphinx .panel>.panel-collapse>.list-group .list-group-item{border-radius:0;border-width:1px 0}.ptx-runestone-container .panel>.list-group:first-child .list-group-item:first-child,.ptx-runestone-container .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child,.runestone-sphinx .panel>.list-group:first-child .list-group-item:first-child,.runestone-sphinx .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.ptx-runestone-container .panel>.list-group:last-child .list-group-item:last-child,.ptx-runestone-container .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child,.runestone-sphinx .panel>.list-group:last-child .list-group-item:last-child,.runestone-sphinx .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.ptx-runestone-container .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child,.runestone-sphinx .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.ptx-runestone-container .list-group+.panel-footer,.ptx-runestone-container .panel-heading+.list-group .list-group-item:first-child,.runestone-sphinx .list-group+.panel-footer,.runestone-sphinx .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.ptx-runestone-container .panel>.panel-collapse>.table,.ptx-runestone-container .panel>.table,.ptx-runestone-container .panel>.table-responsive>.table,.runestone-sphinx .panel>.panel-collapse>.table,.runestone-sphinx .panel>.table,.runestone-sphinx .panel>.table-responsive>.table{margin-bottom:0}.ptx-runestone-container .panel>.panel-collapse>.table caption,.ptx-runestone-container .panel>.table caption,.ptx-runestone-container .panel>.table-responsive>.table caption,.runestone-sphinx .panel>.panel-collapse>.table caption,.runestone-sphinx .panel>.table caption,.runestone-sphinx .panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.ptx-runestone-container .panel>.table:first-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.runestone-sphinx .panel>.table:first-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.ptx-runestone-container .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.ptx-runestone-container .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.ptx-runestone-container .panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.runestone-sphinx .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.runestone-sphinx .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.runestone-sphinx .panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.ptx-runestone-container .panel>.table:last-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.runestone-sphinx .panel>.table:last-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.ptx-runestone-container .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.ptx-runestone-container .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.ptx-runestone-container .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.runestone-sphinx .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.runestone-sphinx .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.runestone-sphinx .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.ptx-runestone-container .panel>.panel-body+.table,.ptx-runestone-container .panel>.panel-body+.table-responsive,.ptx-runestone-container .panel>.table+.panel-body,.ptx-runestone-container .panel>.table-responsive+.panel-body,.runestone-sphinx .panel>.panel-body+.table,.runestone-sphinx .panel>.panel-body+.table-responsive,.runestone-sphinx .panel>.table+.panel-body,.runestone-sphinx .panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.ptx-runestone-container .panel>.table>tbody:first-child>tr:first-child td,.ptx-runestone-container .panel>.table>tbody:first-child>tr:first-child th,.runestone-sphinx .panel>.table>tbody:first-child>tr:first-child td,.runestone-sphinx .panel>.table>tbody:first-child>tr:first-child th{border-top:0}.ptx-runestone-container .panel>.table-bordered,.ptx-runestone-container .panel>.table-responsive>.table-bordered,.runestone-sphinx .panel>.table-bordered,.runestone-sphinx .panel>.table-responsive>.table-bordered{border:0}.ptx-runestone-container .panel>.table-bordered>tbody>tr>td:first-child,.ptx-runestone-container .panel>.table-bordered>tbody>tr>th:first-child,.ptx-runestone-container .panel>.table-bordered>tfoot>tr>td:first-child,.ptx-runestone-container .panel>.table-bordered>tfoot>tr>th:first-child,.ptx-runestone-container .panel>.table-bordered>thead>tr>td:first-child,.ptx-runestone-container .panel>.table-bordered>thead>tr>th:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.runestone-sphinx .panel>.table-bordered>tbody>tr>td:first-child,.runestone-sphinx .panel>.table-bordered>tbody>tr>th:first-child,.runestone-sphinx .panel>.table-bordered>tfoot>tr>td:first-child,.runestone-sphinx .panel>.table-bordered>tfoot>tr>th:first-child,.runestone-sphinx .panel>.table-bordered>thead>tr>td:first-child,.runestone-sphinx .panel>.table-bordered>thead>tr>th:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.ptx-runestone-container .panel>.table-bordered>tbody>tr>td:last-child,.ptx-runestone-container .panel>.table-bordered>tbody>tr>th:last-child,.ptx-runestone-container .panel>.table-bordered>tfoot>tr>td:last-child,.ptx-runestone-container .panel>.table-bordered>tfoot>tr>th:last-child,.ptx-runestone-container .panel>.table-bordered>thead>tr>td:last-child,.ptx-runestone-container .panel>.table-bordered>thead>tr>th:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.runestone-sphinx .panel>.table-bordered>tbody>tr>td:last-child,.runestone-sphinx .panel>.table-bordered>tbody>tr>th:last-child,.runestone-sphinx .panel>.table-bordered>tfoot>tr>td:last-child,.runestone-sphinx .panel>.table-bordered>tfoot>tr>th:last-child,.runestone-sphinx .panel>.table-bordered>thead>tr>td:last-child,.runestone-sphinx .panel>.table-bordered>thead>tr>th:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.ptx-runestone-container .panel>.table-bordered>tbody>tr:first-child>td,.ptx-runestone-container .panel>.table-bordered>tbody>tr:first-child>th,.ptx-runestone-container .panel>.table-bordered>tbody>tr:last-child>td,.ptx-runestone-container .panel>.table-bordered>tbody>tr:last-child>th,.ptx-runestone-container .panel>.table-bordered>tfoot>tr:last-child>td,.ptx-runestone-container .panel>.table-bordered>tfoot>tr:last-child>th,.ptx-runestone-container .panel>.table-bordered>thead>tr:first-child>td,.ptx-runestone-container .panel>.table-bordered>thead>tr:first-child>th,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.ptx-runestone-container .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.ptx-runestone-container .panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.runestone-sphinx .panel>.table-bordered>tbody>tr:first-child>td,.runestone-sphinx .panel>.table-bordered>tbody>tr:first-child>th,.runestone-sphinx .panel>.table-bordered>tbody>tr:last-child>td,.runestone-sphinx .panel>.table-bordered>tbody>tr:last-child>th,.runestone-sphinx .panel>.table-bordered>tfoot>tr:last-child>td,.runestone-sphinx .panel>.table-bordered>tfoot>tr:last-child>th,.runestone-sphinx .panel>.table-bordered>thead>tr:first-child>td,.runestone-sphinx .panel>.table-bordered>thead>tr:first-child>th,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.runestone-sphinx .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.runestone-sphinx .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.runestone-sphinx .panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.ptx-runestone-container .panel>.table-responsive,.runestone-sphinx .panel>.table-responsive{border:0;margin-bottom:0}.ptx-runestone-container .panel-group,.runestone-sphinx .panel-group{margin-bottom:20px}.ptx-runestone-container .panel-group .panel,.runestone-sphinx .panel-group .panel{border-radius:4px;margin-bottom:0}.ptx-runestone-container .panel-group .panel+.panel,.runestone-sphinx .panel-group .panel+.panel{margin-top:5px}.ptx-runestone-container .panel-group .panel-heading,.runestone-sphinx .panel-group .panel-heading{border-bottom:0}.ptx-runestone-container .panel-group .panel-heading+.panel-collapse>.list-group,.ptx-runestone-container .panel-group .panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-group .panel-heading+.panel-collapse>.list-group,.runestone-sphinx .panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.ptx-runestone-container .panel-group .panel-footer,.runestone-sphinx .panel-group .panel-footer{border-top:0}.ptx-runestone-container .panel-group .panel-footer+.panel-collapse .panel-body,.runestone-sphinx .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.ptx-runestone-container .panel-default,.runestone-sphinx .panel-default{border-color:#ddd}.ptx-runestone-container .panel-default>.panel-heading,.runestone-sphinx .panel-default>.panel-heading{background-color:#f5f5f5;border-color:#ddd;color:#333}.ptx-runestone-container .panel-default>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.ptx-runestone-container .panel-default>.panel-heading .badge,.runestone-sphinx .panel-default>.panel-heading .badge{background-color:#333;color:#f5f5f5}.ptx-runestone-container .panel-default>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.ptx-runestone-container .panel-primary,.runestone-sphinx .panel-primary{border-color:#337ab7}.ptx-runestone-container .panel-primary>.panel-heading,.runestone-sphinx .panel-primary>.panel-heading{background-color:#337ab7;border-color:#337ab7;color:#fff}.ptx-runestone-container .panel-primary>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.ptx-runestone-container .panel-primary>.panel-heading .badge,.runestone-sphinx .panel-primary>.panel-heading .badge{background-color:#fff;color:#337ab7}.ptx-runestone-container .panel-primary>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.ptx-runestone-container .panel-success,.runestone-sphinx .panel-success{border-color:#d6e9c6}.ptx-runestone-container .panel-success>.panel-heading,.runestone-sphinx .panel-success>.panel-heading{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.ptx-runestone-container .panel-success>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.ptx-runestone-container .panel-success>.panel-heading .badge,.runestone-sphinx .panel-success>.panel-heading .badge{background-color:#3c763d;color:#dff0d8}.ptx-runestone-container .panel-success>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.ptx-runestone-container .panel-info,.runestone-sphinx .panel-info{border-color:#bce8f1}.ptx-runestone-container .panel-info>.panel-heading,.runestone-sphinx .panel-info>.panel-heading{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.ptx-runestone-container .panel-info>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.ptx-runestone-container .panel-info>.panel-heading .badge,.runestone-sphinx .panel-info>.panel-heading .badge{background-color:#31708f;color:#d9edf7}.ptx-runestone-container .panel-info>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.ptx-runestone-container .panel-warning,.runestone-sphinx .panel-warning{border-color:#faebcc}.ptx-runestone-container .panel-warning>.panel-heading,.runestone-sphinx .panel-warning>.panel-heading{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.ptx-runestone-container .panel-warning>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.ptx-runestone-container .panel-warning>.panel-heading .badge,.runestone-sphinx .panel-warning>.panel-heading .badge{background-color:#8a6d3b;color:#fcf8e3}.ptx-runestone-container .panel-warning>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.ptx-runestone-container .panel-danger,.runestone-sphinx .panel-danger{border-color:#ebccd1}.ptx-runestone-container .panel-danger>.panel-heading,.runestone-sphinx .panel-danger>.panel-heading{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.ptx-runestone-container .panel-danger>.panel-heading+.panel-collapse>.panel-body,.runestone-sphinx .panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.ptx-runestone-container .panel-danger>.panel-heading .badge,.runestone-sphinx .panel-danger>.panel-heading .badge{background-color:#a94442;color:#f2dede}.ptx-runestone-container .panel-danger>.panel-footer+.panel-collapse>.panel-body,.runestone-sphinx .panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.ptx-runestone-container .embed-responsive,.runestone-sphinx .embed-responsive{display:block;height:0;overflow:hidden;padding:0;position:relative}.ptx-runestone-container .embed-responsive .embed-responsive-item,.ptx-runestone-container .embed-responsive embed,.ptx-runestone-container .embed-responsive iframe,.ptx-runestone-container .embed-responsive object,.ptx-runestone-container .embed-responsive video,.runestone-sphinx .embed-responsive .embed-responsive-item,.runestone-sphinx .embed-responsive embed,.runestone-sphinx .embed-responsive iframe,.runestone-sphinx .embed-responsive object,.runestone-sphinx .embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.ptx-runestone-container .embed-responsive-16by9,.runestone-sphinx .embed-responsive-16by9{padding-bottom:56.25%}.ptx-runestone-container .embed-responsive-4by3,.runestone-sphinx .embed-responsive-4by3{padding-bottom:75%}.ptx-runestone-container .well,.runestone-sphinx .well{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);margin-bottom:20px;min-height:20px;padding:19px}.ptx-runestone-container .well blockquote,.runestone-sphinx .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.ptx-runestone-container .well-lg,.runestone-sphinx .well-lg{border-radius:6px;padding:24px}.ptx-runestone-container .well-sm,.runestone-sphinx .well-sm{border-radius:3px;padding:9px}.ptx-runestone-container .close,.runestone-sphinx .close{color:#000;filter:alpha(opacity=20);float:right;font-size:21px;font-weight:700;line-height:1;opacity:.2;text-shadow:0 1px 0 #fff}.ptx-runestone-container .close:focus,.ptx-runestone-container .close:hover,.runestone-sphinx .close:focus,.runestone-sphinx .close:hover{color:#000;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}.ptx-runestone-container button.close,.runestone-sphinx button.close{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;cursor:pointer;padding:0}.ptx-runestone-container .modal-open,.runestone-sphinx .modal-open{overflow:hidden}.ptx-runestone-container .modal,.runestone-sphinx .modal{-webkit-overflow-scrolling:touch;bottom:0;display:none;left:0;outline:0;overflow:hidden;position:fixed;right:0;top:0;z-index:1050}.ptx-runestone-container .modal.fade .modal-dialog,.runestone-sphinx .modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out}.ptx-runestone-container .modal.in .modal-dialog,.runestone-sphinx .modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.ptx-runestone-container .modal-open .modal,.runestone-sphinx .modal-open .modal{overflow-x:hidden;overflow-y:auto}.ptx-runestone-container .modal-dialog,.runestone-sphinx .modal-dialog{margin:10px;position:relative;width:auto}.ptx-runestone-container .modal-content,.runestone-sphinx .modal-content{background-clip:padding-box;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0;position:relative}.ptx-runestone-container .modal-backdrop,.runestone-sphinx .modal-backdrop{background-color:#000;bottom:0;left:0;position:fixed;right:0;top:0;z-index:1040}.ptx-runestone-container .modal-backdrop.fade,.runestone-sphinx .modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.ptx-runestone-container .modal-backdrop.in,.runestone-sphinx .modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.ptx-runestone-container .modal-header,.runestone-sphinx .modal-header{border-bottom:1px solid #e5e5e5;padding:15px}.ptx-runestone-container .modal-header .close,.runestone-sphinx .modal-header .close{margin-top:-2px}.ptx-runestone-container .modal-title,.runestone-sphinx .modal-title{line-height:1.42857143;margin:0}.ptx-runestone-container .modal-body,.runestone-sphinx .modal-body{padding:15px;position:relative}.ptx-runestone-container .modal-footer,.runestone-sphinx .modal-footer{border-top:1px solid #e5e5e5;padding:15px;text-align:right}.ptx-runestone-container .modal-footer .btn+.btn,.runestone-sphinx .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.ptx-runestone-container .modal-footer .btn-group .btn+.btn,.runestone-sphinx .modal-footer .btn-group .btn+.btn{margin-left:-1px}.ptx-runestone-container .modal-footer .btn-block+.btn-block,.runestone-sphinx .modal-footer .btn-block+.btn-block{margin-left:0}.ptx-runestone-container .modal-scrollbar-measure,.runestone-sphinx .modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:768px){.ptx-runestone-container .modal-dialog,.runestone-sphinx .modal-dialog{margin:30px auto;width:600px}.ptx-runestone-container .modal-content,.runestone-sphinx .modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.ptx-runestone-container .modal-sm,.runestone-sphinx .modal-sm{width:300px}}@media (min-width:992px){.ptx-runestone-container .modal-lg,.runestone-sphinx .modal-lg{width:900px}}.ptx-runestone-container .tooltip,.runestone-sphinx .tooltip{word-wrap:normal;display:block;filter:alpha(opacity=0);font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1070}.ptx-runestone-container .tooltip.in,.runestone-sphinx .tooltip.in{filter:alpha(opacity=90);opacity:.9}.ptx-runestone-container .tooltip.top,.runestone-sphinx .tooltip.top{margin-top:-3px;padding:5px 0}.ptx-runestone-container .tooltip.right,.runestone-sphinx .tooltip.right{margin-left:3px;padding:0 5px}.ptx-runestone-container .tooltip.bottom,.runestone-sphinx .tooltip.bottom{margin-top:3px;padding:5px 0}.ptx-runestone-container .tooltip.left,.runestone-sphinx .tooltip.left{margin-left:-3px;padding:0 5px}.ptx-runestone-container .tooltip.top .tooltip-arrow,.runestone-sphinx .tooltip.top .tooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:50%;margin-left:-5px}.ptx-runestone-container .tooltip.top-left .tooltip-arrow,.runestone-sphinx .tooltip.top-left .tooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;margin-bottom:-5px;right:5px}.ptx-runestone-container .tooltip.top-right .tooltip-arrow,.runestone-sphinx .tooltip.top-right .tooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:5px;margin-bottom:-5px}.ptx-runestone-container .tooltip.right .tooltip-arrow,.runestone-sphinx .tooltip.right .tooltip-arrow{border-right-color:#000;border-width:5px 5px 5px 0;left:0;margin-top:-5px;top:50%}.ptx-runestone-container .tooltip.left .tooltip-arrow,.runestone-sphinx .tooltip.left .tooltip-arrow{border-left-color:#000;border-width:5px 0 5px 5px;margin-top:-5px;right:0;top:50%}.ptx-runestone-container .tooltip.bottom .tooltip-arrow,.runestone-sphinx .tooltip.bottom .tooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:50%;margin-left:-5px;top:0}.ptx-runestone-container .tooltip.bottom-left .tooltip-arrow,.runestone-sphinx .tooltip.bottom-left .tooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;margin-top:-5px;right:5px;top:0}.ptx-runestone-container .tooltip.bottom-right .tooltip-arrow,.runestone-sphinx .tooltip.bottom-right .tooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:5px;margin-top:-5px;top:0}.ptx-runestone-container .tooltip-inner,.runestone-sphinx .tooltip-inner{background-color:#000;border-radius:4px;color:#fff;max-width:200px;padding:3px 8px;text-align:center}.ptx-runestone-container .tooltip-arrow,.runestone-sphinx .tooltip-arrow{border-color:transparent;border-style:solid;height:0;position:absolute;width:0}.ptx-runestone-container .popover,.runestone-sphinx .popover{word-wrap:normal;background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.42857143;max-width:276px;padding:1px;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1060}.ptx-runestone-container .popover.top,.runestone-sphinx .popover.top{margin-top:-10px}.ptx-runestone-container .popover.right,.runestone-sphinx .popover.right{margin-left:10px}.ptx-runestone-container .popover.bottom,.runestone-sphinx .popover.bottom{margin-top:10px}.ptx-runestone-container .popover.left,.runestone-sphinx .popover.left{margin-left:-10px}.ptx-runestone-container .popover>.arrow,.runestone-sphinx .popover>.arrow{border-width:11px}.ptx-runestone-container .popover>.arrow,.ptx-runestone-container .popover>.arrow:after,.runestone-sphinx .popover>.arrow,.runestone-sphinx .popover>.arrow:after{border-color:transparent;border-style:solid;display:block;height:0;position:absolute;width:0}.ptx-runestone-container .popover>.arrow:after,.runestone-sphinx .popover>.arrow:after{border-width:10px;content:""}.ptx-runestone-container .popover.top>.arrow,.runestone-sphinx .popover.top>.arrow{border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px;left:50%;margin-left:-11px}.ptx-runestone-container .popover.top>.arrow:after,.runestone-sphinx .popover.top>.arrow:after{border-bottom-width:0;border-top-color:#fff;bottom:1px;content:" ";margin-left:-10px}.ptx-runestone-container .popover.right>.arrow,.runestone-sphinx .popover.right>.arrow{border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25);left:-11px;margin-top:-11px;top:50%}.ptx-runestone-container .popover.right>.arrow:after,.runestone-sphinx .popover.right>.arrow:after{border-left-width:0;border-right-color:#fff;bottom:-10px;content:" ";left:1px}.ptx-runestone-container .popover.bottom>.arrow,.runestone-sphinx .popover.bottom>.arrow{border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);border-top-width:0;left:50%;margin-left:-11px;top:-11px}.ptx-runestone-container .popover.bottom>.arrow:after,.runestone-sphinx .popover.bottom>.arrow:after{border-bottom-color:#fff;border-top-width:0;content:" ";margin-left:-10px;top:1px}.ptx-runestone-container .popover.left>.arrow,.runestone-sphinx .popover.left>.arrow{border-left-color:#999;border-left-color:rgba(0,0,0,.25);border-right-width:0;margin-top:-11px;right:-11px;top:50%}.ptx-runestone-container .popover.left>.arrow:after,.runestone-sphinx .popover.left>.arrow:after{border-left-color:#fff;border-right-width:0;bottom:-10px;content:" ";right:1px}.ptx-runestone-container .popover-title,.runestone-sphinx .popover-title{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0;font-size:14px;margin:0;padding:8px 14px}.ptx-runestone-container .popover-content,.runestone-sphinx .popover-content{padding:9px 14px}.ptx-runestone-container .carousel,.runestone-sphinx .carousel{position:relative}.ptx-runestone-container .carousel-inner,.runestone-sphinx .carousel-inner{overflow:hidden;position:relative;width:100%}.ptx-runestone-container .carousel-inner>.item,.runestone-sphinx .carousel-inner>.item{display:none;position:relative;-webkit-transition:left .6s ease-in-out;-o-transition:left .6s ease-in-out;transition:left .6s ease-in-out}.ptx-runestone-container .carousel-inner>.item>a>img,.ptx-runestone-container .carousel-inner>.item>img,.runestone-sphinx .carousel-inner>.item>a>img,.runestone-sphinx .carousel-inner>.item>img{line-height:1}@media (-webkit-transform-3d),(transform-3d){.ptx-runestone-container .carousel-inner>.item,.runestone-sphinx .carousel-inner>.item{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px;-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out}.ptx-runestone-container .carousel-inner>.item.active.right,.ptx-runestone-container .carousel-inner>.item.next,.runestone-sphinx .carousel-inner>.item.active.right,.runestone-sphinx .carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.ptx-runestone-container .carousel-inner>.item.active.left,.ptx-runestone-container .carousel-inner>.item.prev,.runestone-sphinx .carousel-inner>.item.active.left,.runestone-sphinx .carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.ptx-runestone-container .carousel-inner>.item.active,.ptx-runestone-container .carousel-inner>.item.next.left,.ptx-runestone-container .carousel-inner>.item.prev.right,.runestone-sphinx .carousel-inner>.item.active,.runestone-sphinx .carousel-inner>.item.next.left,.runestone-sphinx .carousel-inner>.item.prev.right{left:0;-webkit-transform:translateZ(0);transform:translateZ(0)}}.ptx-runestone-container .carousel-inner>.active,.ptx-runestone-container .carousel-inner>.next,.ptx-runestone-container .carousel-inner>.prev,.runestone-sphinx .carousel-inner>.active,.runestone-sphinx .carousel-inner>.next,.runestone-sphinx .carousel-inner>.prev{display:block}.ptx-runestone-container .carousel-inner>.active,.runestone-sphinx .carousel-inner>.active{left:0}.ptx-runestone-container .carousel-inner>.next,.ptx-runestone-container .carousel-inner>.prev,.runestone-sphinx .carousel-inner>.next,.runestone-sphinx .carousel-inner>.prev{position:absolute;top:0;width:100%}.ptx-runestone-container .carousel-inner>.next,.runestone-sphinx .carousel-inner>.next{left:100%}.ptx-runestone-container .carousel-inner>.prev,.runestone-sphinx .carousel-inner>.prev{left:-100%}.ptx-runestone-container .carousel-inner>.next.left,.ptx-runestone-container .carousel-inner>.prev.right,.runestone-sphinx .carousel-inner>.next.left,.runestone-sphinx .carousel-inner>.prev.right{left:0}.ptx-runestone-container .carousel-inner>.active.left,.runestone-sphinx .carousel-inner>.active.left{left:-100%}.ptx-runestone-container .carousel-inner>.active.right,.runestone-sphinx .carousel-inner>.active.right{left:100%}.ptx-runestone-container .carousel-control,.runestone-sphinx .carousel-control{background-color:transparent;bottom:0;color:#fff;filter:alpha(opacity=50);font-size:20px;left:0;opacity:.5;position:absolute;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);top:0;width:15%}.ptx-runestone-container .carousel-control.left,.runestone-sphinx .carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,transparent 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(90deg,rgba(0,0,0,.5) 0,transparent);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000",endColorstr="#00000000",GradientType=1)}.ptx-runestone-container .carousel-control.right,.runestone-sphinx .carousel-control.right{background-image:-webkit-linear-gradient(left,transparent,rgba(0,0,0,.5));background-image:-o-linear-gradient(left,transparent 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(transparent),to(rgba(0,0,0,.5)));background-image:linear-gradient(90deg,transparent 0,rgba(0,0,0,.5));background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000",endColorstr="#80000000",GradientType=1);left:auto;right:0}.ptx-runestone-container .carousel-control:focus,.ptx-runestone-container .carousel-control:hover,.runestone-sphinx .carousel-control:focus,.runestone-sphinx .carousel-control:hover{color:#fff;filter:alpha(opacity=90);opacity:.9;outline:0;text-decoration:none}.ptx-runestone-container .carousel-control .glyphicon-chevron-left,.ptx-runestone-container .carousel-control .glyphicon-chevron-right,.ptx-runestone-container .carousel-control .icon-next,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .glyphicon-chevron-left,.runestone-sphinx .carousel-control .glyphicon-chevron-right,.runestone-sphinx .carousel-control .icon-next,.runestone-sphinx .carousel-control .icon-prev{display:inline-block;margin-top:-10px;position:absolute;top:50%;z-index:5}.ptx-runestone-container .carousel-control .glyphicon-chevron-left,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .glyphicon-chevron-left,.runestone-sphinx .carousel-control .icon-prev{left:50%;margin-left:-10px}.ptx-runestone-container .carousel-control .glyphicon-chevron-right,.ptx-runestone-container .carousel-control .icon-next,.runestone-sphinx .carousel-control .glyphicon-chevron-right,.runestone-sphinx .carousel-control .icon-next{margin-right:-10px;right:50%}.ptx-runestone-container .carousel-control .icon-next,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .icon-next,.runestone-sphinx .carousel-control .icon-prev{font-family:serif;height:20px;line-height:1;width:20px}.ptx-runestone-container .carousel-control .icon-prev:before,.runestone-sphinx .carousel-control .icon-prev:before{content:"\2039"}.ptx-runestone-container .carousel-control .icon-next:before,.runestone-sphinx .carousel-control .icon-next:before{content:"\203a"}.ptx-runestone-container .carousel-indicators,.runestone-sphinx .carousel-indicators{bottom:10px;left:50%;list-style:none;margin-left:-30%;padding-left:0;position:absolute;text-align:center;width:60%;z-index:15}.ptx-runestone-container .carousel-indicators li,.runestone-sphinx .carousel-indicators li{background-color:#000\9;background-color:transparent;border:1px solid #fff;border-radius:10px;cursor:pointer;display:inline-block;height:10px;margin:1px;text-indent:-999px;width:10px}.ptx-runestone-container .carousel-indicators .active,.runestone-sphinx .carousel-indicators .active{background-color:#fff;height:12px;margin:0;width:12px}.ptx-runestone-container .carousel-caption,.runestone-sphinx .carousel-caption{bottom:20px;color:#fff;left:15%;padding-bottom:20px;padding-top:20px;position:absolute;right:15%;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);z-index:10}.ptx-runestone-container .carousel-caption .btn,.runestone-sphinx .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.ptx-runestone-container .carousel-control .glyphicon-chevron-left,.ptx-runestone-container .carousel-control .glyphicon-chevron-right,.ptx-runestone-container .carousel-control .icon-next,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .glyphicon-chevron-left,.runestone-sphinx .carousel-control .glyphicon-chevron-right,.runestone-sphinx .carousel-control .icon-next,.runestone-sphinx .carousel-control .icon-prev{font-size:30px;height:30px;margin-top:-10px;width:30px}.ptx-runestone-container .carousel-control .glyphicon-chevron-left,.ptx-runestone-container .carousel-control .icon-prev,.runestone-sphinx .carousel-control .glyphicon-chevron-left,.runestone-sphinx .carousel-control .icon-prev{margin-left:-10px}.ptx-runestone-container .carousel-control .glyphicon-chevron-right,.ptx-runestone-container .carousel-control .icon-next,.runestone-sphinx .carousel-control .glyphicon-chevron-right,.runestone-sphinx .carousel-control .icon-next{margin-right:-10px}.ptx-runestone-container .carousel-caption,.runestone-sphinx .carousel-caption{left:20%;padding-bottom:30px;right:20%}.ptx-runestone-container .carousel-indicators,.runestone-sphinx .carousel-indicators{bottom:20px}}.ptx-runestone-container .btn-group-vertical>.btn-group:after,.ptx-runestone-container .btn-group-vertical>.btn-group:before,.ptx-runestone-container .btn-toolbar:after,.ptx-runestone-container .btn-toolbar:before,.ptx-runestone-container .clearfix:after,.ptx-runestone-container .clearfix:before,.ptx-runestone-container .container-fluid:after,.ptx-runestone-container .container-fluid:before,.ptx-runestone-container .container:after,.ptx-runestone-container .container:before,.ptx-runestone-container .dl-horizontal dd:after,.ptx-runestone-container .dl-horizontal dd:before,.ptx-runestone-container .form-horizontal .form-group:after,.ptx-runestone-container .form-horizontal .form-group:before,.ptx-runestone-container .modal-footer:after,.ptx-runestone-container .modal-footer:before,.ptx-runestone-container .modal-header:after,.ptx-runestone-container .modal-header:before,.ptx-runestone-container .nav:after,.ptx-runestone-container .nav:before,.ptx-runestone-container .navbar-collapse:after,.ptx-runestone-container .navbar-collapse:before,.ptx-runestone-container .navbar-header:after,.ptx-runestone-container .navbar-header:before,.ptx-runestone-container .navbar:after,.ptx-runestone-container .navbar:before,.ptx-runestone-container .pager:after,.ptx-runestone-container .pager:before,.ptx-runestone-container .panel-body:after,.ptx-runestone-container .panel-body:before,.ptx-runestone-container .row:after,.ptx-runestone-container .row:before,.runestone-sphinx .btn-group-vertical>.btn-group:after,.runestone-sphinx .btn-group-vertical>.btn-group:before,.runestone-sphinx .btn-toolbar:after,.runestone-sphinx .btn-toolbar:before,.runestone-sphinx .clearfix:after,.runestone-sphinx .clearfix:before,.runestone-sphinx .container-fluid:after,.runestone-sphinx .container-fluid:before,.runestone-sphinx .container:after,.runestone-sphinx .container:before,.runestone-sphinx .dl-horizontal dd:after,.runestone-sphinx .dl-horizontal dd:before,.runestone-sphinx .form-horizontal .form-group:after,.runestone-sphinx .form-horizontal .form-group:before,.runestone-sphinx .modal-footer:after,.runestone-sphinx .modal-footer:before,.runestone-sphinx .modal-header:after,.runestone-sphinx .modal-header:before,.runestone-sphinx .nav:after,.runestone-sphinx .nav:before,.runestone-sphinx .navbar-collapse:after,.runestone-sphinx .navbar-collapse:before,.runestone-sphinx .navbar-header:after,.runestone-sphinx .navbar-header:before,.runestone-sphinx .navbar:after,.runestone-sphinx .navbar:before,.runestone-sphinx .pager:after,.runestone-sphinx .pager:before,.runestone-sphinx .panel-body:after,.runestone-sphinx .panel-body:before,.runestone-sphinx .row:after,.runestone-sphinx .row:before{content:" ";display:table}.ptx-runestone-container .btn-group-vertical>.btn-group:after,.ptx-runestone-container .btn-toolbar:after,.ptx-runestone-container .clearfix:after,.ptx-runestone-container .container-fluid:after,.ptx-runestone-container .container:after,.ptx-runestone-container .dl-horizontal dd:after,.ptx-runestone-container .form-horizontal .form-group:after,.ptx-runestone-container .modal-footer:after,.ptx-runestone-container .modal-header:after,.ptx-runestone-container .nav:after,.ptx-runestone-container .navbar-collapse:after,.ptx-runestone-container .navbar-header:after,.ptx-runestone-container .navbar:after,.ptx-runestone-container .pager:after,.ptx-runestone-container .panel-body:after,.ptx-runestone-container .row:after,.runestone-sphinx .btn-group-vertical>.btn-group:after,.runestone-sphinx .btn-toolbar:after,.runestone-sphinx .clearfix:after,.runestone-sphinx .container-fluid:after,.runestone-sphinx .container:after,.runestone-sphinx .dl-horizontal dd:after,.runestone-sphinx .form-horizontal .form-group:after,.runestone-sphinx .modal-footer:after,.runestone-sphinx .modal-header:after,.runestone-sphinx .nav:after,.runestone-sphinx .navbar-collapse:after,.runestone-sphinx .navbar-header:after,.runestone-sphinx .navbar:after,.runestone-sphinx .pager:after,.runestone-sphinx .panel-body:after,.runestone-sphinx .row:after{clear:both}.ptx-runestone-container .center-block,.runestone-sphinx .center-block{display:block;margin-left:auto;margin-right:auto}.ptx-runestone-container .pull-right,.runestone-sphinx .pull-right{float:right!important}.ptx-runestone-container .pull-left,.runestone-sphinx .pull-left{float:left!important}.ptx-runestone-container .hide,.runestone-sphinx .hide{display:none!important}.ptx-runestone-container .show,.runestone-sphinx .show{display:block!important}.ptx-runestone-container .invisible,.runestone-sphinx .invisible{visibility:hidden}.ptx-runestone-container .text-hide,.runestone-sphinx .text-hide{background-color:transparent;border:0;color:transparent;font:0/0 a;text-shadow:none}.ptx-runestone-container .hidden,.runestone-sphinx .hidden{display:none!important}.ptx-runestone-container .affix,.runestone-sphinx .affix{position:fixed}@-ms-viewport{width:device-width}.ptx-runestone-container .visible-lg,.ptx-runestone-container .visible-lg-block,.ptx-runestone-container .visible-lg-inline,.ptx-runestone-container .visible-lg-inline-block,.ptx-runestone-container .visible-md,.ptx-runestone-container .visible-md-block,.ptx-runestone-container .visible-md-inline,.ptx-runestone-container .visible-md-inline-block,.ptx-runestone-container .visible-sm,.ptx-runestone-container .visible-sm-block,.ptx-runestone-container .visible-sm-inline,.ptx-runestone-container .visible-sm-inline-block,.ptx-runestone-container .visible-xs,.ptx-runestone-container .visible-xs-block,.ptx-runestone-container .visible-xs-inline,.ptx-runestone-container .visible-xs-inline-block,.runestone-sphinx .visible-lg,.runestone-sphinx .visible-lg-block,.runestone-sphinx .visible-lg-inline,.runestone-sphinx .visible-lg-inline-block,.runestone-sphinx .visible-md,.runestone-sphinx .visible-md-block,.runestone-sphinx .visible-md-inline,.runestone-sphinx .visible-md-inline-block,.runestone-sphinx .visible-sm,.runestone-sphinx .visible-sm-block,.runestone-sphinx .visible-sm-inline,.runestone-sphinx .visible-sm-inline-block,.runestone-sphinx .visible-xs,.runestone-sphinx .visible-xs-block,.runestone-sphinx .visible-xs-inline,.runestone-sphinx .visible-xs-inline-block{display:none!important}@media (max-width:767px){.ptx-runestone-container .visible-xs,.runestone-sphinx .visible-xs{display:block!important}.ptx-runestone-container table.visible-xs,.runestone-sphinx table.visible-xs{display:table!important}.ptx-runestone-container tr.visible-xs,.runestone-sphinx tr.visible-xs{display:table-row!important}.ptx-runestone-container td.visible-xs,.ptx-runestone-container th.visible-xs,.runestone-sphinx td.visible-xs,.runestone-sphinx th.visible-xs{display:table-cell!important}.ptx-runestone-container .visible-xs-block,.runestone-sphinx .visible-xs-block{display:block!important}.ptx-runestone-container .visible-xs-inline,.runestone-sphinx .visible-xs-inline{display:inline!important}.ptx-runestone-container .visible-xs-inline-block,.runestone-sphinx .visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.ptx-runestone-container .visible-sm,.runestone-sphinx .visible-sm{display:block!important}.ptx-runestone-container table.visible-sm,.runestone-sphinx table.visible-sm{display:table!important}.ptx-runestone-container tr.visible-sm,.runestone-sphinx tr.visible-sm{display:table-row!important}.ptx-runestone-container td.visible-sm,.ptx-runestone-container th.visible-sm,.runestone-sphinx td.visible-sm,.runestone-sphinx th.visible-sm{display:table-cell!important}.ptx-runestone-container .visible-sm-block,.runestone-sphinx .visible-sm-block{display:block!important}.ptx-runestone-container .visible-sm-inline,.runestone-sphinx .visible-sm-inline{display:inline!important}.ptx-runestone-container .visible-sm-inline-block,.runestone-sphinx .visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.ptx-runestone-container .visible-md,.runestone-sphinx .visible-md{display:block!important}.ptx-runestone-container table.visible-md,.runestone-sphinx table.visible-md{display:table!important}.ptx-runestone-container tr.visible-md,.runestone-sphinx tr.visible-md{display:table-row!important}.ptx-runestone-container td.visible-md,.ptx-runestone-container th.visible-md,.runestone-sphinx td.visible-md,.runestone-sphinx th.visible-md{display:table-cell!important}.ptx-runestone-container .visible-md-block,.runestone-sphinx .visible-md-block{display:block!important}.ptx-runestone-container .visible-md-inline,.runestone-sphinx .visible-md-inline{display:inline!important}.ptx-runestone-container .visible-md-inline-block,.runestone-sphinx .visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.ptx-runestone-container .visible-lg,.runestone-sphinx .visible-lg{display:block!important}.ptx-runestone-container table.visible-lg,.runestone-sphinx table.visible-lg{display:table!important}.ptx-runestone-container tr.visible-lg,.runestone-sphinx tr.visible-lg{display:table-row!important}.ptx-runestone-container td.visible-lg,.ptx-runestone-container th.visible-lg,.runestone-sphinx td.visible-lg,.runestone-sphinx th.visible-lg{display:table-cell!important}.ptx-runestone-container .visible-lg-block,.runestone-sphinx .visible-lg-block{display:block!important}.ptx-runestone-container .visible-lg-inline,.runestone-sphinx .visible-lg-inline{display:inline!important}.ptx-runestone-container .visible-lg-inline-block,.runestone-sphinx .visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.ptx-runestone-container .hidden-xs,.runestone-sphinx .hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.ptx-runestone-container .hidden-sm,.runestone-sphinx .hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.ptx-runestone-container .hidden-md,.runestone-sphinx .hidden-md{display:none!important}}@media (min-width:1200px){.ptx-runestone-container .hidden-lg,.runestone-sphinx .hidden-lg{display:none!important}}.ptx-runestone-container .visible-print,.runestone-sphinx .visible-print{display:none!important}@media print{.ptx-runestone-container .visible-print,.runestone-sphinx .visible-print{display:block!important}.ptx-runestone-container table.visible-print,.runestone-sphinx table.visible-print{display:table!important}.ptx-runestone-container tr.visible-print,.runestone-sphinx tr.visible-print{display:table-row!important}.ptx-runestone-container td.visible-print,.ptx-runestone-container th.visible-print,.runestone-sphinx td.visible-print,.runestone-sphinx th.visible-print{display:table-cell!important}}.ptx-runestone-container .visible-print-block,.runestone-sphinx .visible-print-block{display:none!important}@media print{.ptx-runestone-container .visible-print-block,.runestone-sphinx .visible-print-block{display:block!important}}.ptx-runestone-container .visible-print-inline,.runestone-sphinx .visible-print-inline{display:none!important}@media print{.ptx-runestone-container .visible-print-inline,.runestone-sphinx .visible-print-inline{display:inline!important}}.ptx-runestone-container .visible-print-inline-block,.runestone-sphinx .visible-print-inline-block{display:none!important}@media print{.ptx-runestone-container .visible-print-inline-block,.runestone-sphinx .visible-print-inline-block{display:inline-block!important}.ptx-runestone-container .hidden-print,.runestone-sphinx .hidden-print{display:none!important}}.ptx-runestone-container :root,.runestone-sphinx :root{--background:#fff;--outerBackground:#eee;--links:#0645ad;--bodyFont:#000;--tooltip:#fff;--grayToWhite:#333;--navbar:#f8f8f8;--navbarFont:#707070;--navbarFontHover:#000;--alerts:#d9edf7;--completionButton:#f19711;--completionButtonHover:#ff9f19;--admonition:#fcf8e3;--admonitionBorder:#fbeed5;--codeButtons:#474949;--codeButtonsBorder:#474949;--dangerAlerts:#f2dede;--successAlerts:#dff0d8;--contentWidthRegular:660px;--contentWidthWide:1060px;--componentBgColor:#f0f8ff;--componentBorderColor:#000;--questionBgColor:#e1efff}.ptx-runestone-container [data-theme=dark],.runestone-sphinx [data-theme=dark]{--background:#2c2f33;--outerBackground:#23272a;--links:#7289da;--bodyFont:#99aab5;--tooltip:#000;--grayToWhite:#fff;--navbar:#3d3d3d;--navbarFont:#fff;--navbarFontHover:#d6d6d6;--alerts:#714082;--completionButton:#650087;--completionButtonHover:#560073;--admonition:#3d3d3d;--admonitionBorder:#262626;--codeButtons:#7289da;--codeButtonsBorder:#fff;--dangerAlerts:#8c2626;--successAlerts:#217300;--componentBgColor:#07467d;--componentBorderColor:#939090;--questionBgColor:#17555d}.ptx-runestone-container div.assignment-nav,.runestone-sphinx div.assignment-nav{background-color:var(--componentBgColor);border-color:var(--componentBorderColor);border-style:solid;border-width:1px;padding-bottom:5px;padding-top:5px}.ptx-runestone-container td.linenos pre,.runestone-sphinx td.linenos pre{color:#6b6b6b}.ptx-runestone-container .str,.runestone-sphinx .str{color:#006b00}.ptx-runestone-container .parsons .block,.runestone-sphinx .parsons .block{background-color:#fafafa}.ptx-runestone-container .highlight .c1,.runestone-sphinx .highlight .c1{color:#376a7b}.ptx-runestone-container .highlight .nn,.runestone-sphinx .highlight .nn{color:#0f6c95}.ptx-runestone-container .highlight .gp,.runestone-sphinx .highlight .gp{color:#a14c08}.ptx-runestone-container .highlight .si,.runestone-sphinx .highlight .si{color:#3c773d}.ptx-runestone-container .highlight .nc,.runestone-sphinx .highlight .nc{color:#0b719d}.ptx-runestone-container ul.search li div.context,.runestone-sphinx ul.search li div.context{color:#6b6b6b}.ptx-runestone-container span.highlighted,.runestone-sphinx span.highlighted{color:#4d4d4d}.ptx-runestone-container .CodeMirror-linenumber,.runestone-sphinx .CodeMirror-linenumber{color:#6b6b6b}.ptx-runestone-container .alert-warning,.runestone-sphinx .alert-warning{background-color:var(--admonition);border-color:var(--admonitionBorder)}.ptx-runestone-container div.ExecutionVisualizer table#pyCodeOutput .lineNo,.runestone-sphinx div.ExecutionVisualizer table#pyCodeOutput .lineNo{color:#6b6b6b}.ptx-runestone-container body,.runestone-sphinx body{background-color:var(--outerBackground);counter-reset:rscomponent;padding-top:60px}.ptx-runestone-container h5,.runestone-sphinx h5{font-weight:700;padding:10px 0}.ptx-runestone-container #table-of-contents a,.runestone-sphinx #table-of-contents a{color:var(--links)}.ptx-runestone-container #table-of-contents a:hover,.runestone-sphinx #table-of-contents a:hover{color:var(--links);text-decoration:underline}.ptx-runestone-container #table-of-contents.section,.runestone-sphinx #table-of-contents.section{font-size:16px}.ptx-runestone-container .navbar-default,.runestone-sphinx .navbar-default{background-color:var(--navbar)}.ptx-runestone-container .navbar-default .navbar-nav>li,.ptx-runestone-container .navbar-default .navbar-nav>li>a,.runestone-sphinx .navbar-default .navbar-nav>li,.runestone-sphinx .navbar-default .navbar-nav>li>a{color:var(--navbarFont)}.ptx-runestone-container .navbar-default .navbar-nav>li>a:hover,.runestone-sphinx .navbar-default .navbar-nav>li>a:hover{color:var(--navbarFontHover)}.ptx-runestone-container .navbar-default .navbar-brand,.runestone-sphinx .navbar-default .navbar-brand{color:var(--navbarFont)}.ptx-runestone-container .toctree-wrapper,.runestone-sphinx .toctree-wrapper{font-size:16px}.ptx-runestone-container .toctree-wrapper a,.runestone-sphinx .toctree-wrapper a{color:var(--links)}.ptx-runestone-container .toctree-wrapper a:hover,.runestone-sphinx .toctree-wrapper a:hover{color:var(--links);text-decoration:underline}.ptx-runestone-container #index-and-search.section,.runestone-sphinx #index-and-search.section{font-size:16px}.ptx-runestone-container #index-and-search.section a,.runestone-sphinx #index-and-search.section a{color:var(--links)}.ptx-runestone-container #index-and-search.section a:hover,.runestone-sphinx #index-and-search.section a:hover{color:var(--links);text-decoration:underline}.ptx-runestone-container a,.runestone-sphinx a{color:var(--links)}@media (max-width:768px){.ptx-runestone-container body,.runestone-sphinx body{padding-top:0}.ptx-runestone-container .navbar-fixed-top,.runestone-sphinx .navbar-fixed-top{position:static}}@media (min-width:768px){.ptx-runestone-container .navbar .divider-vertical,.runestone-sphinx .navbar .divider-vertical{border-left:1px solid #f2f2f2;margin:0 3px}.ptx-runestone-container .navbar-fixed-top .container,.runestone-sphinx .navbar-fixed-top .container{padding:0}}.ptx-runestone-container div.container,.runestone-sphinx div.container{background-color:var(--background)}.ptx-runestone-container .container,.runestone-sphinx .container{padding-left:10px;padding-right:10px}.ptx-runestone-container .runestone,.runestone-sphinx .runestone{background-color:var(--componentBgColor);border-color:var(--componentBorderColor);border-radius:10px;border-style:solid;clear:both;margin-bottom:20px;margin-top:20px;padding:15px}.ptx-runestone-container #main-content section>:not(section),.runestone-sphinx #main-content section>:not(section){margin-left:auto;margin-right:auto;max-width:var(--contentWidthRegular)}.ptx-runestone-container #main-content section>.codelens,.ptx-runestone-container #main-content section>.jupyterlite_sphinx_iframe_container,.ptx-runestone-container #main-content section>.question,.ptx-runestone-container #main-content section>.runestone.ac_section,.ptx-runestone-container #main-content section>.runestone.codelens,.ptx-runestone-container #main-content section>.runestone.parsons-container,.ptx-runestone-container #main-content section>.runestone.parsons-problems,.ptx-runestone-container #main-content section>.timedAssessment,.ptx-runestone-container #main-content section>section,.runestone-sphinx #main-content section>.codelens,.runestone-sphinx #main-content section>.jupyterlite_sphinx_iframe_container,.runestone-sphinx #main-content section>.question,.runestone-sphinx #main-content section>.runestone.ac_section,.runestone-sphinx #main-content section>.runestone.codelens,.runestone-sphinx #main-content section>.runestone.parsons-container,.runestone-sphinx #main-content section>.runestone.parsons-problems,.runestone-sphinx #main-content section>.timedAssessment,.runestone-sphinx #main-content section>section{margin-left:auto;margin-right:auto;max-width:var(--contentWidthWide)}.ptx-runestone-container #main-content section>.full-width,.runestone-sphinx #main-content section>.full-width{max-width:var(--contentWidthWide)}.ptx-runestone-container .container section>img,.runestone-sphinx .container section>img{display:block;margin-left:auto;margin-right:auto}.ptx-runestone-container .container-fluid>.navbar-collapse,.ptx-runestone-container .container-fluid>.navbar-header,.ptx-runestone-container .container>.navbar-collapse,.ptx-runestone-container .container>.navbar-header,.runestone-sphinx .container-fluid>.navbar-collapse,.runestone-sphinx .container-fluid>.navbar-header,.runestone-sphinx .container>.navbar-collapse,.runestone-sphinx .container>.navbar-header{margin-left:0;margin-right:0}.ptx-runestone-container .navbar>.container .navbar-brand,.runestone-sphinx .navbar>.container .navbar-brand{margin-left:0}.ptx-runestone-container .navbar>.container,.runestone-sphinx .navbar>.container{background-color:var(--navbar)}.ptx-runestone-container .navbar-toggle,.runestone-sphinx .navbar-toggle{margin-right:0}.ptx-runestone-container .footer>.container,.runestone-sphinx .footer>.container{background-color:var(--outerBackground)}.ptx-runestone-container .footer>.container p>a,.runestone-sphinx .footer>.container p>a{color:var(--links)}.ptx-runestone-container .brand-logo,.runestone-sphinx .brand-logo{display:block;float:left;margin-top:4px}.ptx-runestone-container .brand-logo img,.runestone-sphinx .brand-logo img{height:40px}.ptx-runestone-container .social-menu,.runestone-sphinx .social-menu{padding:10px 10px 15px 20px;width:220px}.ptx-runestone-container .fb-like,.runestone-sphinx .fb-like{margin-top:7px}.ptx-runestone-container .fb_iframe_widget iframe,.ptx-runestone-container .fb_iframe_widget span,.runestone-sphinx .fb_iframe_widget iframe,.runestone-sphinx .fb_iframe_widget span{height:20px!important;width:82px!important}.ptx-runestone-container .twitter-follow-button,.runestone-sphinx .twitter-follow-button{margin-top:10px}.ptx-runestone-container .gittip,.runestone-sphinx .gittip{margin-top:8px}.ptx-runestone-container .gittip-button,.runestone-sphinx .gittip-button{margin-bottom:-6px}.ptx-runestone-container .dropdown-menu>li>div,.ptx-runestone-container .dropdown-menu>li>label,.ptx-runestone-container .dropdown-menu>li>span,.runestone-sphinx .dropdown-menu>li>div,.runestone-sphinx .dropdown-menu>li>label,.runestone-sphinx .dropdown-menu>li>span{clear:both;color:var(--grayToWhite);display:block;font-weight:700;line-height:20px;padding:3px 20px;white-space:nowrap}.ptx-runestone-container .dropdown-menu>li>label:focus,.ptx-runestone-container .dropdown-menu>li>label:hover,.runestone-sphinx .dropdown-menu>li>label:focus,.runestone-sphinx .dropdown-menu>li>label:hover{background-color:#f5f5f5;color:#262626;text-decoration:none}.ptx-runestone-container .dropdown-menu>li>a,.runestone-sphinx .dropdown-menu>li>a{color:var(--grayToWhite)}.ptx-runestone-container .loggedinuser,.runestone-sphinx .loggedinuser{font-weight:700}.ptx-runestone-container .CodeMirror,.runestone-sphinx .CodeMirror{background-color:var(--background);clear:both;margin:0 0 1em}.ptx-runestone-container .ac_section .CodeMirror pre,.runestone-sphinx .ac_section .CodeMirror pre{word-wrap:normal;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;-o-border-radius:0;border-radius:0;border-width:0;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:inherit;margin:0;padding:0;white-space:pre}.ptx-runestone-container btn.btn-sm,.ptx-runestone-container button.btn,.ptx-runestone-container input[type=button].btn.btn-sm,.ptx-runestone-container input[type=submit].btn.btn-sm,.runestone-sphinx btn.btn-sm,.runestone-sphinx button.btn,.runestone-sphinx input[type=button].btn.btn-sm,.runestone-sphinx input[type=submit].btn.btn-sm{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:1em}.ptx-runestone-container .dropdown-menu .input-group .input-group-btn button.btn,.runestone-sphinx .dropdown-menu .input-group .input-group-btn button.btn{font-size:14px}.ptx-runestone-container .btn,.runestone-sphinx .btn{margin:5px}.ptx-runestone-container .btn.disabled,.runestone-sphinx .btn.disabled{pointer-events:auto}.ptx-runestone-container .btn-default,.ptx-runestone-container .btn-default.disabled,.ptx-runestone-container .btn-default.disabled:hover,.ptx-runestone-container .btn-default[disabled],.ptx-runestone-container .btn-default[disabled]:hover,.runestone-sphinx .btn-default,.runestone-sphinx .btn-default.disabled,.runestone-sphinx .btn-default.disabled:hover,.runestone-sphinx .btn-default[disabled],.runestone-sphinx .btn-default[disabled]:hover{background-color:var(--codeButtons);border-color:var(codeButtonsBorder);color:#fff}.ptx-runestone-container .btn-default.active,.ptx-runestone-container .btn-default:active,.ptx-runestone-container .btn-default:focus,.ptx-runestone-container .btn-default:hover,.runestone-sphinx .btn-default.active,.runestone-sphinx .btn-default:active,.runestone-sphinx .btn-default:focus,.runestone-sphinx .btn-default:hover{background-color:#3a3c3c;border-color:#2e2f2f;color:#fff}.ptx-runestone-container input[type=checkbox],.ptx-runestone-container input[type=radio],.runestone-sphinx input[type=checkbox],.runestone-sphinx input[type=radio]{margin-right:5px}.ptx-runestone-container .tooltip,.runestone-sphinx .tooltip{z-index:2000!important}.ptx-runestone-container .tooltip.in,.runestone-sphinx .tooltip.in{filter:alpha(opacity=80);opacity:.8}.ptx-runestone-container h2,.runestone-sphinx h2{margin-top:20px}.ptx-runestone-container .alert form,.runestone-sphinx .alert form{margin-bottom:0}.ptx-runestone-container .alert,.runestone-sphinx .alert{color:var(--grayToWhite);padding:10px}.ptx-runestone-container .alert-info,.runestone-sphinx .alert-info{background-color:var(--alerts)}.ptx-runestone-container .alert-danger,.runestone-sphinx .alert-danger{background-color:var(--dangerAlerts)}.ptx-runestone-container .alert-success,.runestone-sphinx .alert-success{background-color:var(--successAlerts)}.ptx-runestone-container .unittest-results.alert-danger,.runestone-sphinx .unittest-results.alert-danger{background-color:var(--dangerAlerts)!important}.ptx-runestone-container .unittest-results.alert-success,.runestone-sphinx .unittest-results.alert-success{background-color:var(--successAlerts)!important}.ptx-runestone-container .alert label,.runestone-sphinx .alert label{font-weight:400}.ptx-runestone-container .navbar_message,.runestone-sphinx .navbar_message{font-weight:700;margin-top:15px}.ptx-runestone-container dt.label>span.brackets:not(span.brackets>a),.ptx-runestone-container dt.label>span.fn-backref:not(span.fn-backref>a),.runestone-sphinx dt.label>span.brackets:not(span.brackets>a),.runestone-sphinx dt.label>span.fn-backref:not(span.fn-backref>a){color:#000}.ptx-runestone-container .admonition,.runestone-sphinx .admonition{background-color:var(--admonition);border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;margin-bottom:20px!important;margin-top:20px!important;padding:8px 35px 8px 14px!important;text-shadow:0 1px 0 hsla(0,0%,100%,.5)}.ptx-runestone-container .admonition.caution,.runestone-sphinx .admonition.caution{background-color:#f2dede;border-color:#eed3d7;color:#a33f3e}.ptx-runestone-container .admonition.note,.ptx-runestone-container .admonition.tip,.runestone-sphinx .admonition.note,.runestone-sphinx .admonition.tip{background-color:#d9edf7;border-color:#bce8f1;color:#333}.ptx-runestone-container div.flash,.runestone-sphinx div.flash{-webkit-font-smoothing:antialiased;background-color:#000;background-image:-webkit-linear-gradient(top,#222,#000);background-image:-o-linear-gradient(top,#222,#000);background-image:-moz-linear-gradient(90deg,#222,#000);background-image:linear-gradient(top,#222,#000);background-repeat:repeat-x;border:2px solid #fff;border-radius:8px;-moz-border-radius:8px;-webkit-border-radius:8px;color:#fff;cursor:pointer;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;margin:0 0 10px 10px;opacity:.95;padding:10px;position:fixed;right:45px;top:55px;vertical-align:middle;z-index:2000}.ptx-runestone-container #web2py_user_form,.runestone-sphinx #web2py_user_form{margin-top:10px}.ptx-runestone-container #web2py_user_form form,.runestone-sphinx #web2py_user_form form{float:left;margin-right:150px;padding-top:3px}.ptx-runestone-container #web2py_user_form td,.runestone-sphinx #web2py_user_form td{padding-bottom:15px}.ptx-runestone-container #web2py_user_form td.w2p_fw,.runestone-sphinx #web2py_user_form td.w2p_fw{width:299px}.ptx-runestone-container #auth-actions,.runestone-sphinx #auth-actions{margin-top:50px}.ptx-runestone-container #sign_in_text td,.runestone-sphinx #sign_in_text td{color:#333;font-family:lucida grande,Verdana,sans-serif;font-size:17px;padding-bottom:13px}.ptx-runestone-container #auth_user_remember,.runestone-sphinx #auth_user_remember{margin-top:-20px}.ptx-runestone-container #exercises>ol>li,.ptx-runestone-container #programming-exercises>ol>li,.runestone-sphinx #exercises>ol>li,.runestone-sphinx #programming-exercises>ol>li{margin-bottom:30px}.ptx-runestone-container #exercises>ol>li:nth-child(2n),.ptx-runestone-container #programming-exercises>ol>li:nth-child(2n),.runestone-sphinx #exercises>ol>li:nth-child(2n),.runestone-sphinx #programming-exercises>ol>li:nth-child(2n){background:#faf7df;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1.2em 1.4em}.ptx-runestone-container .scratch-ac-modal,.runestone-sphinx .scratch-ac-modal{max-height:90%;overflow-y:scroll;width:90%}.ptx-runestone-container .compare-modal .progress,.runestone-sphinx .compare-modal .progress{margin-bottom:0}.ptx-runestone-container .compare-me-progress,.runestone-sphinx .compare-me-progress{width:100%}.ptx-runestone-container .compare-me-progress .progress-bar,.ptx-runestone-container .unittest-results-progress .progress-bar,.runestone-sphinx .compare-me-progress .progress-bar,.runestone-sphinx .unittest-results-progress .progress-bar{color:#333}.ptx-runestone-container .unittest-results-progress,.runestone-sphinx .unittest-results-progress{width:25%}.ptx-runestone-container .compare-modal,.runestone-sphinx .compare-modal{width:350px}.ptx-runestone-container .compare-modal table,.runestone-sphinx .compare-modal table{border-collapse:separate;border-spacing:10px 5px}.ptx-runestone-container .codelens-modal,.runestone-sphinx .codelens-modal{bottom:auto;left:auto;right:20%;top:20%}@media (max-width:768px){.ptx-runestone-container .codelens-modal,.runestone-sphinx .codelens-modal{bottom:0!important;left:0!important;right:0!important;top:0!important}}.ptx-runestone-container .codelens-modal>.modal-dialog,.runestone-sphinx .codelens-modal>.modal-dialog{width:400px}.ptx-runestone-container .footnote.table,.runestone-sphinx .footnote.table{margin-bottom:10px;width:auto}.ptx-runestone-container .footnote.table td.label,.runestone-sphinx .footnote.table td.label{background-color:#d9edf7;padding:2px 5px}.ptx-runestone-container .ac-canvas,.runestone-sphinx .ac-canvas{background-color:#fff;display:inline-block}.ptx-runestone-container .video-play-overlay,.runestone-sphinx .video-play-overlay{background-position:50%;background-repeat:no-repeat;height:85px;left:44%;position:relative;top:-150px;width:130px}.ptx-runestone-container .video_popup video,.runestone-sphinx .video_popup video{cursor:pointer;width:var(--contentWidthRegular)}.ptx-runestone-container .ui-sortable-helper,.runestone-sphinx .ui-sortable-helper{height:auto!important;width:auto!important}.ptx-runestone-container .navLink,.runestone-sphinx .navLink{bottom:65px;display:inline;opacity:.4;position:fixed;z-index:2}.ptx-runestone-container .navLink:hover,.runestone-sphinx .navLink:hover{opacity:1}.ptx-runestone-container .navLink a,.runestone-sphinx .navLink a{background-color:#fff;border:2px solid #d3d3d3;display:inline-block;height:50px;width:100px}.ptx-runestone-container #relations-next,.runestone-sphinx #relations-next{right:35px}.ptx-runestone-container #relations-prev,.runestone-sphinx #relations-prev{left:35px}.ptx-runestone-container .nextprev-list,.runestone-sphinx .nextprev-list{height:50px;margin:10px;padding-left:0}@media (max-width:600px){.ptx-runestone-container .navLink,.runestone-sphinx .navLink{bottom:auto;display:inline-block;position:absolute}.ptx-runestone-container #relations-next,.ptx-runestone-container #relations-prev,.runestone-sphinx #relations-next,.runestone-sphinx #relations-prev{display:inline;padding:0 20px;width:25%}}.ptx-runestone-container #completionButton,.runestone-sphinx #completionButton{color:var(--completionButtonText);font-weight:700;margin-bottom:15px;margin-top:25px;padding-left:70px;padding-right:70px}.ptx-runestone-container .buttonAskCompletion,.runestone-sphinx .buttonAskCompletion{background-color:var(--completionButton);border-color:var(--completionButtonHover);font-weight:700}.ptx-runestone-container .buttonAskCompletion:hover,.runestone-sphinx .buttonAskCompletion:hover{background-color:var(--completionButtonHover);border-color:var(--completionButtonHover)}.ptx-runestone-container .buttonConfirmCompletion,.runestone-sphinx .buttonConfirmCompletion{background-color:#377e22;border-color:#3dc682;color:#fff!important}.ptx-runestone-container .buttonConfirmCompletion:hover,.runestone-sphinx .buttonConfirmCompletion:hover{background-color:#3dc682;border-color:#3dc682}.ptx-runestone-container .navLinkBg,.runestone-sphinx .navLinkBg{background-color:#fff;bottom:55px;-webkit-box-shadow:0 0 3px rgba(50,50,50,.5);-moz-box-shadow:0 0 3px rgba(50,50,50,.5);box-shadow:0 0 3px rgba(50,50,50,.5);color:#999;font-weight:700;height:40px;position:fixed;z-index:1}.ptx-runestone-container .navLinkBg:hover,.runestone-sphinx .navLinkBg:hover{color:#999}.ptx-runestone-container #navLinkBgRight,.runestone-sphinx #navLinkBgRight{padding:10px 15px 0 65px;right:-1000px}.ptx-runestone-container #navLinkBgLeft,.runestone-sphinx #navLinkBgLeft{left:-65px;padding-left:15px;padding-right:50px}.ptx-runestone-container .activehtml,.runestone-sphinx .activehtml{background-color:#fff;height:400px;width:100%}.ptx-runestone-container .container section>div.sidebar,.runestone-sphinx .container section>div.sidebar{margin:0 0 .5em 1em}.ptx-runestone-container a.disqus_thread_link,.runestone-sphinx a.disqus_thread_link{display:block}.ptx-runestone-container .reveal_button,.runestone-sphinx .reveal_button{display:block;margin-left:0}.ptx-runestone-container iframe[seamless],.runestone-sphinx iframe[seamless]{display:block}@media (min-width:768px){.ptx-runestone-container .container section>div.sidebar,.runestone-sphinx .container section>div.sidebar{margin:0 3em .5em 1em}}@media (min-width:992px){.ptx-runestone-container .container section>div.sidebar,.runestone-sphinx .container section>div.sidebar{margin:0 11em .5em 1em}}@media (min-width:1200px){.ptx-runestone-container .container section>div.sidebar,.runestone-sphinx .container section>div.sidebar{margin:0 18em .5em 1em}}.ptx-runestone-container div.ExecutionVisualizer table.visualizer,.runestone-sphinx div.ExecutionVisualizer table.visualizer{background-color:#fff;margin-left:auto;margin-right:auto;width:auto}.ptx-runestone-container .sltooltip,.runestone-sphinx .sltooltip{bottom:120%;display:block;font-size:11px;margin-left:-2em;margin-top:-2px;padding-bottom:5px;position:absolute;visibility:visible;z-index:1020}.ptx-runestone-container .sltooltip .sltooltip-arrow,.runestone-sphinx .sltooltip .sltooltip-arrow{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000;bottom:0;height:0;left:50%;margin-left:-5px;position:absolute;width:0}.ptx-runestone-container .sltooltip-inner,.runestone-sphinx .sltooltip-inner{background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:var(--tooltip);max-width:200px;padding:3px 8px;text-align:center;text-decoration:none}.ptx-runestone-container ul.dropdown-menu.globaltoc,.runestone-sphinx ul.dropdown-menu.globaltoc{max-height:700px;overflow:auto}.ptx-runestone-container .globaltoc span.caption-text,.runestone-sphinx .globaltoc span.caption-text{display:inline-block;font-size:large;font-weight:700}.ptx-runestone-container textarea.lp-result,.runestone-sphinx textarea.lp-result{font-family:monospace;height:10em;width:100%}.ptx-runestone-container .visuallyhidden,.runestone-sphinx .visuallyhidden{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.ptx-runestone-container .visuallyhidden.focusable:active,.ptx-runestone-container .visuallyhidden.focusable:focus,.runestone-sphinx .visuallyhidden.focusable:active,.runestone-sphinx .visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;white-space:inherit;width:auto}.ptx-runestone-container .blockquote,.runestone-sphinx .blockquote{font-size:large;font-style:italic;padding-left:2em;padding-right:2em;text-align:center}.ptx-runestone-container #subchapterprogress.ui-progressbar .ui-progressbar-value,.runestone-sphinx #subchapterprogress.ui-progressbar .ui-progressbar-value{border-radius:0;margin:0}.ptx-runestone-container #subchapterprogress>div,.runestone-sphinx #subchapterprogress>div{background:green}.ptx-runestone-container #subchapterprogress>div.loggedout,.runestone-sphinx #subchapterprogress>div.loggedout{background:#d3d3d3}.ptx-runestone-container .runestone_caption,.runestone-sphinx .runestone_caption{text-align:center}.ptx-runestone-container .runestone_caption_divid,.runestone-sphinx .runestone_caption_divid{opacity:50%}.ptx-runestone-container #questions .runestone_caption:before,.runestone-sphinx #questions .runestone_caption:before{content:"Problem: " counter(rscomponent) " -- ";counter-increment:rscomponent}.ptx-runestone-container body,.runestone-sphinx body{color:var(--bodyFont)}.ptx-runestone-container .jupyter_container .output,.runestone-sphinx .jupyter_container .output{margin-top:10px}.ptx-runestone-container .jupyter_container .output td,.ptx-runestone-container .jupyter_container .output th,.runestone-sphinx .jupyter_container .output td,.runestone-sphinx .jupyter_container .output th{padding-left:5px;padding-right:5px}.ptx-runestone-container .dropdown-menu>li>label.theme-switch,.runestone-sphinx .dropdown-menu>li>label.theme-switch{align-items:center;cursor:pointer;display:flex;font-weight:400}.ptx-runestone-container .theme-switch input,.runestone-sphinx .theme-switch input{display:none}.ptx-runestone-container .theme-switch .slider,.runestone-sphinx .theme-switch .slider{background-color:#ccc;height:1.25em;margin-right:3px;position:relative;transition:.4s;width:2em}.ptx-runestone-container .theme-switch .slider:before,.runestone-sphinx .theme-switch .slider:before{background-color:#fff;bottom:2px;content:"";height:calc(1.25em - 4px);left:2px;position:absolute;transition:.4s;width:calc(1.25em - 4px)}.ptx-runestone-container .theme-switch input:checked+.slider,.runestone-sphinx .theme-switch input:checked+.slider{background-color:#66bb6a}.ptx-runestone-container .theme-switch input:checked+.slider:before,.runestone-sphinx .theme-switch input:checked+.slider:before{transform:translateX(calc(.75em - 1px))}.ptx-runestone-container .theme-switch .slider.round,.ptx-runestone-container .theme-switch .slider.round:before,.runestone-sphinx .theme-switch .slider.round,.runestone-sphinx .theme-switch .slider.round:before{border-radius:1.25em}.ptx-runestone-container .adcopy,.runestone-sphinx .adcopy{background-color:#f2e0c3;border:2px solid #000;border-radius:10px;margin-left:auto;margin-right:auto;margin-top:10px;padding:10px;width:60%}.ptx-runestone-container .adcopy .donateb,.runestone-sphinx .adcopy .donateb{margin-left:30%}.ptx-runestone-container .isCorrect:before,.runestone-sphinx .isCorrect:before{content:"\e86c ";float:right;font-family:Material Symbols Outlined;padding-left:4px}.ptx-runestone-container .isInCorrect:before,.runestone-sphinx .isInCorrect:before{content:"\e349 ";float:right;font-family:Material Symbols Outlined;padding-left:4px}.ptx-runestone-container .isAssigned:before,.runestone-sphinx .isAssigned:before{content:"\f3de ";float:right;font-family:Material Symbols Outlined;padding-left:4px}.ptx-runestone-container .isCorrect.isAssigned:before,.runestone-sphinx .isCorrect.isAssigned:before{content:"\e86c \f3de ";float:right;font-family:Material Symbols Outlined;padding-left:4px}.ptx-runestone-container .isInCorrect.isAssigned:before,.runestone-sphinx .isInCorrect.isAssigned:before{content:"\e349 \f3de ";float:right;font-family:Material Symbols Outlined;padding-left:4px}.ptx-runestone-container pre,.runestone-sphinx pre{background:inherit;color:inherit}.ptx-runestone-container summary.ptx-footnote__number,.runestone-sphinx summary.ptx-footnote__number{display:inline}.ptx-runestone-container summary.knowl__link,.runestone-sphinx summary.knowl__link{display:list-item inline}.ptx-runestone-container details.ptx-footnote,.runestone-sphinx details.ptx-footnote{display:inline}.ptx-runestone-container .handsontable td,.ptx-runestone-container .handsontable th,.runestone-sphinx .handsontable td,.runestone-sphinx .handsontable th{background-color:var(--content-background,#fff);color:var(--bodyFont,#000)}.ptx-runestone-container legend,.runestone-sphinx legend{border-bottom-color:var(--grayToWhite,#333);color:var(--grayToWhite,#333)}.ptx-runestone-container .autopermalink,.runestone-sphinx .autopermalink{display:none}.ptx-runestone-container :root,.runestone-sphinx :root{--codebuttons:#474949}.ptx-runestone-container [data-theme=dark],.runestone-sphinx [data-theme=dark]{--codebuttons:#2c0aa6}.ptx-runestone-container li.dropdown.open a.dropdown-toggle,.ptx-runestone-container li.dropdown.open a.dropdown-toggle:focus,.runestone-sphinx li.dropdown.open a.dropdown-toggle,.runestone-sphinx li.dropdown.open a.dropdown-toggle:focus{background-color:#2a5659!important;border:0!important;color:#f8f8f8!important}.ptx-runestone-container a.dropdown-toggle:focus,.runestone-sphinx a.dropdown-toggle:focus{background-color:#52a6ac!important;color:#f8f8f8!important}.ptx-runestone-container li.divider-vertical,.runestone-sphinx li.divider-vertical{margin:0!important}.ptx-runestone-container li.dropdown a.dropdown-toggle,.runestone-sphinx li.dropdown a.dropdown-toggle{padding:15px 18px!important}.ptx-runestone-container button.btn.btn-default:active,.ptx-runestone-container button.btn.btn-default:focus,.runestone-sphinx button.btn.btn-default:active,.runestone-sphinx button.btn.btn-default:focus{background-color:#fff!important;color:#474949!important}.ptx-runestone-container button.btn.btn-default,.runestone-sphinx button.btn.btn-default{background-color:#474949!important;color:#fff!important}.ptx-runestone-container button.btn.btn-default.btn-sm.disabled:active,.ptx-runestone-container button.btn.btn-default.btn-sm.disabled:focus,.runestone-sphinx button.btn.btn-default.btn-sm.disabled:active,.runestone-sphinx button.btn.btn-default.btn-sm.disabled:focus{background-color:#fff!important;color:#474949!important}.ptx-runestone-container button.btn.btn-default.btn-sm.disabled,.runestone-sphinx button.btn.btn-default.btn-sm.disabled{background-color:#474949!important;color:#fff!important}.ptx-runestone-container button.btn.btn-success:active,.ptx-runestone-container button.btn.btn-success:focus,.runestone-sphinx button.btn.btn-success:active,.runestone-sphinx button.btn.btn-success:focus{background-color:#fff!important;color:#427e44!important}.ptx-runestone-container button.btn.btn-success,.runestone-sphinx button.btn.btn-success{background-color:#427e44!important;color:#fff!important}.ptx-runestone-container button.btn.btn-primary:active,.ptx-runestone-container button.btn.btn-primary:focus,.runestone-sphinx button.btn.btn-primary:active,.runestone-sphinx button.btn.btn-primary:focus{background-color:#fff!important;color:#3379b6!important}.ptx-runestone-container button.btn.btn-primary,.runestone-sphinx button.btn.btn-primary{background-color:#3379b6!important;color:#fff!important}.ptx-runestone-container button.btn.btn-info:active,.ptx-runestone-container button.btn.btn-info:focus,.runestone-sphinx button.btn.btn-info:active,.runestone-sphinx button.btn.btn-info:focus{background-color:#fff!important;color:#1a6a83!important}.ptx-runestone-container button.btn.btn-info,.runestone-sphinx button.btn.btn-info{background-color:#1a6a83!important;color:#fff!important}.ptx-runestone-container button.btn.btn-warning:active,.ptx-runestone-container button.btn.btn-warning:focus,.runestone-sphinx button.btn.btn-warning:active,.runestone-sphinx button.btn.btn-warning:focus{background-color:#fff!important;color:#945c0e!important}.ptx-runestone-container button.btn.btn-warning,.runestone-sphinx button.btn.btn-warning{background-color:#945c0e!important;color:#fff!important}.ptx-runestone-container button.btn.btn-danger:active,.ptx-runestone-container button.btn.btn-danger:focus,.runestone-sphinx button.btn.btn-danger:active,.runestone-sphinx button.btn.btn-danger:focus{background-color:#fff!important;color:#d33a35!important}.ptx-runestone-container button.btn.btn-danger,.runestone-sphinx button.btn.btn-danger{background-color:#d33a35!important;color:#fff!important}.ptx-runestone-container button.btn.btn-link:active,.ptx-runestone-container button.btn.btn-link:focus,.runestone-sphinx button.btn.btn-link:active,.runestone-sphinx button.btn.btn-link:focus{background-color:#1a6a83!important;color:#fff!important}.ptx-runestone-container button.btn.btn-link,.runestone-sphinx button.btn.btn-link{background-color:#fff!important;color:#1a6a83!important}:root{--background:#fff;--outerBackground:#eee;--links:#0645ad;--bodyFont:var(--body-text-color,#000);--tooltip:#fff;--grayToWhite:#333;--navbar:#f8f8f8;--navbarFont:#707070;--navbarFontHover:#000;--alerts:#d9edf7;--completionButton:#f19711;--completionButtonHover:#ff9f19;--completionButtonText:#000;--admonition:#fcf8e3;--admonitionBorder:#fbeed5;--codeButtons:#474949;--codeButtonsBorder:#474949;--dangerAlerts:#f2dede;--successAlerts:#dff0d8;--contentWidthRegular:660px;--contentWidthWide:1060px;--componentBgColor:#f0f8ff;--componentBorderColor:#000;--questionBgColor:#e1efff;--parsonsBgColor:#ffa;--parsonsBorderColor:#ee0;--parsonsCorrectBgColor:#dff0d8;--parsonsCorrectBorderColor:#ade595;--parsonsIncorrectBgColor:#f2dede;--parsonsIncorrectBorderColor:#f2b6b6}:root.dark-mode{--background:#2c2f33;--outerBackground:#23272a;--links:#7289da;--bodyFont:var(--body-text-color,#99aab5);--tooltip:#000;--grayToWhite:#aaa;--navbar:#3d3d3d;--navbarFont:#fff;--navbarFontHover:#d6d6d6;--alerts:#714082;--completionButton:#650087;--completionButtonHover:#560073;--completionButtonText:#fff;--admonition:#3d3d3d;--admonitionBorder:#262626;--codeButtons:#67739d;--codeButtonsBorder:#fff;--dangerAlerts:#8c2626;--successAlerts:#217300;--componentBgColor:var(--rs-component-bg,var(--knowl-background,#07467d));--componentBorderColor:var(--rs-component-border,var(--knowl-border-color,#939090));--questionBgColor:var(--rs-component-bg,var(--knowl-nested-1-background,#0f5a9b));--parsonsBgColor:#e8e8b2;--parsonsBorderColor:#a8a82d;--parsonsCorrectBgColor:#a3c097;--parsonsCorrectBorderColor:#60904c;--parsonsIncorrectBgColor:#ae9090;--parsonsIncorrectBorderColor:#c16b6b}[data-theme=dark]{--background:#2c2f33;--outerBackground:#23272a;--links:#7289da;--bodyFont:#99aab5;--tooltip:#000;--grayToWhite:#fff;--navbar:#3d3d3d;--navbarFont:#fff;--navbarFontHover:#d6d6d6;--alerts:#714082;--completionButton:#650087;--completionButtonHover:#560073;--completionButtonText:#fff;--admonition:#3d3d3d;--admonitionBorder:#262626;--codeButtons:#7289da;--codeButtonsBorder:#fff;--dangerAlerts:#8c2626;--successAlerts:#217300;--componentBgColor:#07467d;--componentBorderColor:#939090;--questionBgColor:#17555d}#scprogresscontainer{margin:10px auto;max-width:500px;width:100%}#subchapterprogress{background-color:var(--alerts);border:1px solid var(--grayToWhite);border-radius:5px;height:20px;position:relative;width:100%}.exercise-statement{display:block;margin-bottom:1em}:root{--menu:#fff}[data-theme=dark]{--menu:#000}.my-highlighted-text{background-color:#ff9}.social-highlighted-text{background-color:#fcc}.highlight-option-box{left:0;position:absolute;top:0}.highlight-option-box li{height:24px}#continue-reading{display:none;padding-top:20px}#continue-reading a{float:right;margin-right:20px}li.completed{list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO5JREFUeNpi/P//PwMlgImBQjAwBthc4osH4skgNguJGrmA1BQgjgPiUJIMAGpWBVKrgNgAiL2P6H3aRrQBQM12QGo1EIsBcQxMM0oYABXxAjETFs2+QGobVHM9UPNSjEAEKgoEUjeBuBhNcwDUZm4gXg/U3IRuAcwLSkAsCcRdQE16QDoRiG2BGGQbOxA/BOIcbN5jhKVEoMYiINULFT8PxCJALAvlhwBtX4vXAKghpSBXoKlZCtQcQ1RCAirsBlJVSEIfgLiRpJQINKQdSNVCuTOB/Nt44xjkBWzY+iJvGRBr4pKHYUZKszNAgAEAln9yGpx/ZXMAAAAASUVORK5CYII=)}li.active{list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIlJREFUeNpi/P//PwMlgImBQjAMDGCBsxZIkaYz4RmaAZhAHYjNoOxTQHwTvwsQgAeIe4E4DU18FhAXAPF3QgbMB+IQLOIgA4WAOBRfIOri0AwDIDktfAbYEBF89jRNB0eI0HMEnwGXgXgNHs1roGrweiERGmUMWKIxkZh08AWI04G4j5iEBBBgAPddF58mobqdAAAAAElFTkSuQmCC)}.infoTextCompleted{color:#3dc682}.infoTextActive,.infoTextCompleted{display:none;font-size:.9em;font-style:italic;margin-left:10px;opacity:.7}.infoTextActive{color:#ff9f19}.dropdown-menu{background-clip:padding-box;background-color:var(--menu);border:1px solid rgba(0,0,0,.2);border-radius:5px 5px 5px 5px;box-shadow:0 5px 10px rgba(0,0,0,.2);display:none;list-style:none outside none;margin:1px 0 0;min-width:160px;padding:4px 0;position:absolute;top:100%;z-index:1000}.dropdown-menu ul{list-style:disc none outside;margin:0 0 9px 25px;padding:0}.sidebar-highlights{background-color:#ff9}div.documentwrapper{border:0}div.bodywrapper{border-right:0}div.sphinxsidebar{border-left:1px solid #ccc;padding-left:10px}.body>.section .section{padding-top:1px}#jump-to-chapter{border:1px solid #ccc;letter-spacing:.015em;line-height:120%;margin-left:auto;margin-right:auto;padding:.5em;width:80%}#navigation-links{background-color:#f8f8f8;border:1px solid #ccc;margin:10px;padding:10px}.matrixeq_container{margin:0 0 6px;padding:6px}span.matrix_table{border:2px solid #000;margin:0 0 4px;overflow:visible;padding:0 1px;text-align:center}span.matrix_column,span.matrix_table{background-color:inherit;display:inline-table}span.matrix_column{border-width:0;font-family:monospace;font-size:12px;margin:0 1px;padding:2px 8px;vertical-align:middle}span.matrix_column div{background-color:inherit;display:block;margin:1px;padding:2px}span.matrix_table .matrix_column{border-style:none;margin-left:5px;margin-right:5px}span.matrix_table:before{top:-2px}span.matrix_table:after,span.matrix_table:before{background-color:inherit;content:" ";display:block;height:2px;margin:0 auto;position:relative;text-align:center;width:85%;z-index:100}span.matrix_table:after{top:2px}span.matrix_column:before{top:-2px}span.matrix_column:after,span.matrix_column:before{content:" ";display:block;height:2px;position:relative;width:85%;z-index:100}span.matrix_column:after{top:2px}span.matrix_table span.matrix_column:after,span.matrix_table span.matrix_column:before{height:0}span.matrix_table input[type=text]{appearance:none;background-color:inherit;box-shadow:none;display:block;font-family:sans-serif;font-size:12px;height:24px;margin:0;text-align:right;width:50px}span.matrix_operator{font-family:monospace;font-size:18px;margin:0 4px;padding:0}span.matrix_label,span.matrix_operator{display:inline-table;vertical-align:middle}span.matrix_label{font-family:sans-serif;font-size:12px;margin:0 1px;padding:0 0 0 20px}.lightcyanColor{background-color:#e0ffff}.lightgreyColor{background-color:#d3d3d3}.purpleColor{background-color:#dfb5e8}.yellowColor{background-color:#fdff9d}.webgl_container{background-color:#fcf8e3;display:block;margin-bottom:1em}.webgl_cmds,.webgl_container{box-sizing:border-box;width:100%}.webgl_cmds{padding:6px;text-align:center}.webgl_row2{box-sizing:border-box;display:block;height:550px;padding:0 4px;width:100%}.webgl_canvas,.webgl_editors{box-sizing:border-box;display:block;float:left;visibility:visible;width:50%}.webgl_canvas{font-size:12px;font-weight:400;padding-left:5px}.webgl_output{box-sizing:border-box;float:left;margin-top:6px;padding:4px;width:100%}.webgl_nav_tabs{background-color:#cfccb8;border-color:#fbeed5;display:inline-flex;height:31px;margin:0;overflow:hidden;padding:6px 0 0;width:100%}.webgl_nav_tabs,.webgl_nav_tabs li{border-top-left-radius:4px;border-top-right-radius:4px;list-style-type:none}.webgl_nav_tabs li{background-color:#e6e2cc;float:left;font-size:9pt;margin:0 0 0 4px;padding:4px 1px 4px 4px;position:relative}.webgl_nav_tabs li>a{color:#555;padding:8px;text-decoration:none}.webgl_nav_tabs>li>a:hover{border-bottom-width:0;border-color:#b4b19d}.webgl_nav_tabs li.active{background-color:#fff;list-style-image:none;list-style-type:none}.webgl_tab_content{background-color:#fcf8e3;border:0;clear:both;color:#c09853;margin:0 0 20px;position:absolute;width:100%;z-index:1}.webgl_tab_content.active{z-index:2}.webgl_tab_content>*{margin-left:auto;margin-right:auto}.webgl_tab_content .clearfix{position:static}.webgl_tab_editor{background-color:#fcf8e3;border:0;clear:both;color:#c09853;margin:0 0 20px;padding:10px 4px;position:absolute;width:100%}.webgl_code{float:left;width:100%}.webgl_tab_contents_text{background-color:#fcf8e3;border:0;clear:both;color:#c09853;margin:0 0 20px;padding:10px 4px;position:absolute;width:100%;z-index:1}.webgl_errorMessages{color:red}.webgl_warningMessages{color:#aa22a4}.webgl_infoMessages{color:#189040}.webgl_output_div{background-color:#fff;border:1px solid #d3d3d3;font-size:12px;font-weight:400;height:14em;margin:2px;overflow:auto;padding-bottom:4px;padding-left:4px;padding-top:4px;width:100%}.webgl_editor_highlight{background-color:#eee}.webgl_btn{background-color:thistle;border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;font-size:12px;font-weight:400;margin-bottom:0;padding:3px 6px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.webgl_tabbed_editor{font-family:monospace,sans-serif;font-size:9pt;font-style:normal;resize:none;width:100%}.canvas3D{height:100%;width:100%}.CodeMirror.webgl-default{border:1px solid #eee;font-family:monospace,sans-serif;font-size:8pt;font-style:normal}button.btn.webgl-default{font-size:8pt}.runestone-sphinx .hidden{display:none}.runestone-sphinx .view-toggle{padding:.85em}.runestone-sphinx .presentation-mode section *{display:none}.runestone-sphinx .presentation-mode section .runestone,.runestone-sphinx .presentation-mode section .runestone *{display:initial}.runestone-sphinx .full-height,.runestone-sphinx .present{height:100vh}.runestone-sphinx .bottom{bottom:0;position:absolute}.runestone-sphinx #codeDisplayDiv{width:auto!important}.runestone-sphinx div.ExecutionVisualizer #dataViz{margin:0}.runestone-sphinx div.ExecutionVisualizer div#stackHeader{text-align:center}.runestone-sphinx #stackFrame{display:block!important}.runestone-sphinx #stackHeapTable{width:100%}.runestone-sphinx #stackHeapTable tr{justify-content:space-around}.runestone-sphinx div.ExecutionVisualizer td#heap_td,.runestone-sphinx div.ExecutionVisualizer td#stack_td{flex:1}.runestone-sphinx .presentation-title{display:none}.runestone-sphinx .present .presentation-title{display:block}.runestone-sphinx div.ExecutionVisualizer div#heap{float:none;padding-left:0}.runestone-sphinx #heap_td tr,.runestone-sphinx #stack_td tr{display:table-row}.runestone-sphinx #codeDisplayDiv{margin:0 auto}.runestone-sphinx #vizLayoutTd{flex:1}.runestone-sphinx #vizLayoutTdFirst{flex:2}.runestone-sphinx #vizLayoutTdSecond{flex:1}.runestone-sphinx #vizLayoutTdThird{flex:2}.runestone-sphinx #progOutputs{display:block!important;margin:0 20px;width:60%}.runestone-sphinx #pyStdout{width:100%!important}.runestone-sphinx div.ExecutionVisualizer #pyStdout{margin-bottom:1em}.runestone-sphinx div.ExecutionVisualizer table.visualizer{width:100%}.runestone-sphinx .present #vizLayoutTdThird{text-align:left}.runestone-sphinx .ac-block{display:flex;margin-bottom:1em}.runestone-sphinx .row-mode .ac-block{display:block;margin-bottom:0}.runestone-sphinx .row-mode .ac_code_div,.runestone-sphinx .row-mode .ac_output{display:block;float:none;max-width:none;width:auto}.runestone-sphinx .row-mode .ac_code_div{margin-bottom:1em}.runestone-sphinx .ac_section>*{max-width:100%}.runestone-sphinx .ac_output{display:block;max-width:100%}.runestone-sphinx .ac_output pre{min-height:60px;visibility:visible!important}.runestone-sphinx .CodeMirror{border-radius:3px;margin:0;max-width:100%;min-height:60px}.runestone-sphinx .container section>runestone:not(.ac_section){margin:0;max-width:none}.runestone-sphinx .presentation-options{align-items:center;display:flex;justify-content:flex-end}.runestone-sphinx .layout-btn{align-items:center;background-color:#fbeed5;border:2px solid #dfd4be;border-radius:2px;display:flex;justify-content:center;margin:0 .5rem;padding:.25rem;transition:all .2s ease}.runestone-sphinx .layout-btn.active-layout,.runestone-sphinx .layout-btn:focus{border:2px solid #979797;outline:none}.runestone-sphinx .sketchpad-container{min-height:300px;min-width:50%;padding:0 15px}.runestone-sphinx .card-mode .sketchpad-container{display:inline-block;margin:0;vertical-align:top;width:50%}.runestone-sphinx .row-mode .error{margin:20px 15px}.runestone-sphinx .card-mode .error{display:inline-block;margin:28px 0 0;padding:0 15px;vertical-align:top;width:50%}.runestone-sphinx .sketchpad{background:#fff;border:2px solid grey;border-radius:3px;display:block;min-height:300px;width:100%}.runestone-sphinx .btn-presenter{border-radius:3px;font-weight:500;margin:1.5rem 0 1.5rem 1.5rem;padding:.5rem 1rem}.runestone-sphinx .btn-grey-outline{background:#fff;border:2px solid grey;color:grey}.runestone-sphinx .btn-grey-solid{background:grey;border:2px solid grey;color:#fff}.runestone-sphinx body.present .ac_section>*{max-width:none}.runestone-sphinx body.present iframe{width:100%}.runestone-sphinx body.present #relations-next,.runestone-sphinx body.present #relations-prev,.runestone-sphinx body.present .navLinkBg{display:none}.runestone-sphinx body.present .btn-presenter{position:absolute}.runestone-sphinx body.present .btn-presenter.prev-exercise{left:0}.runestone-sphinx body.present .btn-presenter.next-exercise{right:0} +/*# sourceMappingURL=prefix-runestone.6ec5960970d8b364.css.map*/ \ No newline at end of file diff --git a/course/_static/prefix-runestone.677a75a9120449ff.css.gz b/course/_static/prefix-runestone.6ec5960970d8b364.css.gz similarity index 76% rename from course/_static/prefix-runestone.677a75a9120449ff.css.gz rename to course/_static/prefix-runestone.6ec5960970d8b364.css.gz index 506a516f262356f78848e3661595a57dc906c449..2203d00d3ca415e84de5c7d460e7be1d1a86fc6b 100755 GIT binary patch delta 9112 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 .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: 400;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: \"\\00A0 \\2014\";\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n color: #333333;\n word-break: break-all;\n word-wrap: break-word;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1,\n .col-sm-2,\n .col-sm-3,\n .col-sm-4,\n .col-sm-5,\n .col-sm-6,\n .col-sm-7,\n .col-sm-8,\n .col-sm-9,\n .col-sm-10,\n .col-sm-11,\n .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1,\n .col-md-2,\n .col-md-3,\n .col-md-4,\n .col-md-5,\n .col-md-6,\n .col-md-7,\n .col-md-8,\n .col-md-9,\n .col-md-10,\n .col-md-11,\n .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1,\n .col-lg-2,\n .col-lg-3,\n .col-lg-4,\n .col-lg-5,\n .col-lg-6,\n .col-lg-7,\n .col-lg-8,\n .col-lg-9,\n .col-lg-10,\n .col-lg-11,\n .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n position: static;\n display: table-column;\n float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n display: table-cell;\n float: none;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n min-height: 0.01%;\n overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: 700;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-top: 4px \\9;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n vertical-align: middle;\n cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\n.form-control-static {\n min-height: 34px;\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-right: 0;\n padding-left: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n background-color: #f2dede;\n border-color: #a94442;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n padding-top: 7px;\n margin-top: 0;\n margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n padding-top: 7px;\n margin-bottom: 0;\n text-align: right;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n filter: alpha(opacity=65);\n opacity: 0.65;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n background-image: none;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n background-image: none;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n background-image: none;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n background-image: none;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n background-image: none;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n background-image: none;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n font-weight: 400;\n color: #337ab7;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n -o-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n -o-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n -o-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n background-color: #337ab7;\n outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n content: \"\";\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .navbar-right .dropdown-menu-left {\n right: auto;\n left: 0;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n cursor: default;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n padding-right: 15px;\n padding-left: 15px;\n overflow-x: visible;\n border-top: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-right: 0;\n padding-left: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-brand {\n float: left;\n height: 50px;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-right: 15px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n padding: 10px 15px;\n margin-right: -15px;\n margin-left: -15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-right: 15px;\n margin-left: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n color: #fff;\n background-color: #080808;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n padding: 0 5px;\n color: #ccc;\n content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n margin-left: -1px;\n line-height: 1.42857143;\n color: #337ab7;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n cursor: default;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n text-align: center;\n list-style: none;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n}\n.label {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n padding-right: 15px;\n padding-left: 15px;\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-right: 60px;\n padding-left: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-right: auto;\n margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@-o-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n height: 20px;\n margin-bottom: 20px;\n overflow: hidden;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n -webkit-background-size: 40px 40px;\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n padding-left: 0;\n margin-bottom: 20px;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #eeeeee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n color: #555;\n text-decoration: none;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-right: 15px;\n padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n margin-bottom: 0;\n border: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n filter: alpha(opacity=20);\n opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: -webkit-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.modal-backdrop.in {\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-bottom: 0;\n margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 12px;\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.tooltip.in {\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.tooltip.top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.tooltip.right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.tooltip.bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.tooltip.left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n right: 5px;\n bottom: 0;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow:after {\n content: \"\";\n border-width: 10px;\n}\n.popover.top > .arrow {\n bottom: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n bottom: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-color: #fff;\n border-bottom-width: 0;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n border-left-width: 0;\n}\n.popover.right > .arrow:after {\n bottom: -10px;\n left: 1px;\n content: \" \";\n border-right-color: #fff;\n border-left-width: 0;\n}\n.popover.bottom > .arrow {\n top: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.bottom > .arrow:after {\n top: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n right: 1px;\n bottom: -10px;\n content: \" \";\n border-right-width: 0;\n border-left-color: #fff;\n}\n.popover-title {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner > .item {\n position: relative;\n display: none;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: -webkit-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 15%;\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control.right {\n right: 0;\n left: auto;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n}\n.carousel-control .icon-prev:before {\n content: \"\\2039\";\n}\n.carousel-control .icon-next:before {\n content: \"\\203a\";\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n border: 1px solid #fff;\n border-radius: 10px;\n}\n.carousel-indicators .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n display: table;\n content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/* Variables holding theme colors */\n:root {\n --background: #ffffff;\n --outerBackground: #eeeeee;\n --links: #0645ad;\n --bodyFont: #000000;\n --tooltip: #ffffff;\n --grayToWhite: #333333;\n --navbar: #f8f8f8;\n --navbarFont: #707070;\n --navbarFontHover: #000000;\n --alerts: #d9edf7;\n --completionButton: #f19711;\n --completionButtonHover: #ff9f19;\n --admonition: #fcf8e3;\n --admonitionBorder: #fbeed5;\n --codeButtons: #474949;\n --codeButtonsBorder: #474949;\n --dangerAlerts: #f2dede;\n --successAlerts: #dff0d8;\n --contentWidthRegular: 660px;\n --contentWidthWide: 1060px;\n --componentBgColor: #f0f8ff;\n --componentBorderColor: #000000;\n --questionBgColor: #e1efff;\n}\n\n/* @media (prefers-color-scheme: dark) {\n :root {\n --background: #2c2f33;\n --outerBackground: #23272a;\n --links: #7289da;\n --bodyFont: #99aab5;\n --tooltip: #000000;\n --grayToWhite: #ffffff;\n --navbar: #3d3d3d;\n --navbarFont: #ffffff;\n --navbarFontHover: #d6d6d6;\n --alerts: #714082;\n --completionButton: #650087;\n --completionButtonHover: #560073;\n --admonition: #3d3d3d;\n --admonitionBorder: #262626;\n --codeButtons: #7289da;\n --codeButtonsBorder: #ffffff;\n --dangerAlerts: #8c2626;\n --successAlerts: #217300;\n --componentBgColor: #07467d;\n --componentBorderColor: #939090;\n --questionBgColor: rgb(23, 85, 93);\n }\n}\n\nNeeded??? */\n[data-theme=\"dark\"] {\n --background: #2c2f33;\n --outerBackground: #23272a;\n --links: #7289da;\n --bodyFont: #99aab5;\n --tooltip: #000000;\n --grayToWhite: #ffffff;\n --navbar: #3d3d3d;\n --navbarFont: #ffffff;\n --navbarFontHover: #d6d6d6;\n --alerts: #714082;\n --completionButton: #650087;\n --completionButtonHover: #560073;\n --admonition: #3d3d3d;\n --admonitionBorder: #262626;\n --codeButtons: #7289da;\n --codeButtonsBorder: #ffffff;\n --dangerAlerts: #8c2626;\n --successAlerts: #217300;\n --componentBgColor: #07467d;\n --componentBorderColor: #939090;\n --questionBgColor: rgb(23, 85, 93);\n}\n\n/* for assignment navigation */\ndiv.assignment-nav {\n background-color: var(--componentBgColor);\n border-style: solid;\n border-color: var(--componentBorderColor);\n border-width: 1px;\n padding-bottom: 5px;\n padding-top: 5px;\n\n}\n\n/* custom modification of basic.css for color-contrast (AA compliant) */\ntd.linenos pre {\n color: #6b6b6b;\n}\n\n/* custom modification of prettify.css for color-contrast (AA compliant) */\n.str {\n color: #006b00;\n}\n\n/* custom modification of parsons.css for color-contrast (AA compliant) */\n.parsons .block {\n background-color: #fafafa;\n}\n\n/* custom modification of pygments.css for color-contrast (AA compliant) */\n.highlight .c1 {\n color: #376a7b;\n}\n\n.highlight .nn {\n color: #0f6c95;\n}\n\n.highlight .gp {\n color: #a14c08;\n}\n\n.highlight .si {\n color: #3c773d;\n}\n\n.highlight .nc {\n color: #0b719d;\n}\n\n/* `Search` functionality's result custom modification for color-contrast (AA compliant) */\nul.search li div.context {\n color: #6b6b6b;\n}\n\nspan.highlighted {\n color: #4d4d4d;\n}\n\n/* ActiveCode gutter custom modification for color-contrast (AA compliant) */\n\n.CodeMirror-linenumber {\n color: #6b6b6b;\n}\n\n.alert-warning {\n background-color: var(--admonition);\n border-color: var(--admonitionBorder);\n}\n\n/* Python code output custom modification for color-contrast (AA compliant) */\ndiv.ExecutionVisualizer table#pyCodeOutput .lineNo {\n color: #6b6b6b;\n}\n\n/* Runestone custom modifications */\n\nbody {\n counter-reset: rscomponent;\n padding-top: 60px;\n background-color: var(--outerBackground);\n}\n\nh5 {\n font-weight: bold;\n padding: 10px 0;\n}\n\n/* table-of-contents related styles for color-contrast (AA compliant) */\n#table-of-contents a {\n color: var(--links);\n}\n\n#table-of-contents a:hover {\n color: var(--links);\n text-decoration: underline;\n}\n\n#table-of-contents.section {\n font-size: 16px;\n}\n\n/* navbar-brand color contrast (AA compliant) */\n.navbar-default {\n background-color: var(--navbar);\n}\n\n.navbar-default .navbar-nav > li {\n color: var(--navbarFont);\n}\n\n.navbar-default .navbar-nav > li > a {\n color: var(--navbarFont);\n}\n\n.navbar-default .navbar-nav > li > a:hover {\n color: var(--navbarFontHover);\n}\n\n.navbar-default .navbar-brand {\n color: var(--navbarFont);\n}\n\n/* acknowledgement related styles for color-contrast (AA compliant) */\n.toctree-wrapper {\n font-size: 16px;\n}\n\n.toctree-wrapper a {\n color: var(--links);\n}\n\n.toctree-wrapper a:hover {\n color: var(--links);\n text-decoration: underline;\n}\n\n/* index and search related styles for color-contrast (AA compliant) */\n#index-and-search.section {\n font-size: 16px;\n}\n\n#index-and-search.section a {\n color: var(--links);\n}\n\n#index-and-search.section a:hover {\n color: var(--links);\n text-decoration: underline;\n}\n\n/* custom style for `a` tag for color-contrast (AA compliant) */\n\na {\n color: var(--links);\n}\n\n/* navbar and menu related styles */\n@media (max-width: 768px) {\n /* Remove top padding when top navbar goes collapsed in narrow viewports */\n body {\n padding-top: 0;\n }\n\n .navbar-fixed-top {\n position: static;\n }\n}\n\n@media (min-width: 768px) {\n /* when navbar is collapsed we don't want any vertical dividers taking up space */\n .navbar .divider-vertical {\n margin: 0 3px;\n border-left: 1px solid #f2f2f2;\n }\n\n .navbar-fixed-top .container {\n padding: 0;\n }\n}\n\ndiv.container {\n background-color: var(--background);\n}\n\n.container {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.runestone {\n clear: both;\n background-color: var(--componentBgColor);\n padding: 15px;\n border-style: solid;\n border-color: var(--componentBorderColor);\n border-radius: 10px;\n margin-bottom: 20px;\n margin-top: 20px;\n }\n\n/* Sets width of content \"column\" */\n#main-content section > *:not(section) {\n max-width: var(--contentWidthRegular);\n margin-left: auto;\n margin-right: auto;\n\n}\n\n/* Handle content in nested sections by allowing them to grow*/\n#main-content section > section,\n/* And then make sure a few items are wider by default */\n#main-content section > .runestone.ac_section,\n#main-content section > .runestone.codelens,\n#main-content section > .question,\n#main-content section > .runestone.parsons-container,\n#main-content section > .runestone.parsons-problems,\n#main-content section > .codelens,\n#main-content section > .timedAssessment,\n#main-content section > .jupyterlite_sphinx_iframe_container\n{\n max-width: var(--contentWidthWide);\n margin-left: auto;\n margin-right: auto;\n}\n\n/* Allow individual elements to request being larger */\n#main-content section > .full-width {\n max-width: var(--contentWidthWide);\n}\n\n.container section > img {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.container-fluid > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container > .navbar-header {\n margin-left: 0;\n margin-right: 0;\n}\n\n.navbar > .container .navbar-brand {\n margin-left: 0;\n}\n\n.navbar > .container {\n background-color: var(--navbar);\n}\n\n.navbar-toggle {\n margin-right: 0px;\n}\n\n.footer > .container {\n background-color: var(--outerBackground);\n}\n\n.footer > .container p > a {\n color: var(--links);\n}\n\n.brand-logo {\n float: left;\n display: block;\n margin-top: 4px;\n}\n\n.brand-logo img {\n height: 40px;\n}\n\n.social-menu {\n width: 220px;\n padding: 10px 10px 15px 20px;\n}\n\n.fb-like {\n margin-top: 7px;\n}\n\n.fb_iframe_widget span,\n.fb_iframe_widget iframe {\n height: 20px !important;\n width: 82px !important;\n}\n\n.twitter-follow-button {\n margin-top: 10px;\n}\n\n.gittip {\n margin-top: 8px;\n}\n\n.gittip-button {\n margin-bottom: -6px;\n}\n\n.dropdown-menu > li > span,\n.dropdown-menu > li > div,\n.dropdown-menu > li > label {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: bold;\n line-height: 20px;\n color: var(--grayToWhite);\n white-space: nowrap;\n}\n\n.dropdown-menu > li > label:hover, .dropdown-menu > li > label:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n\n.dropdown-menu > li > a {\n color: var(--grayToWhite);\n}\n\n.loggedinuser {\n font-weight: bold;\n}\n\n/* end navbar and menu related styles */\n.CodeMirror {\n margin: 0 0 1em 0;\n background-color: var(--background);\n clear: both;\n}\n\n.ac_section .CodeMirror pre {\n -moz-border-radius: 0;\n -webkit-border-radius: 0;\n -o-border-radius: 0;\n border-radius: 0;\n border-width: 0;\n margin: 0;\n padding: 0;\n background: transparent;\n font-family: Menlo, Monaco, Consolas,\"Courier New\", monospace;\n font-size: inherit;\n padding: 0;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n}\n\nbutton.btn,\nbtn.btn-sm,\ninput[type=\"submit\"].btn.btn-sm,\ninput[type=\"button\"].btn.btn-sm {\n font-size: 1em;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n\n/* Fix search menu button */\n.dropdown-menu .input-group .input-group-btn button.btn {\n font-size: 14px;\n}\n\n.btn {\n margin: 5px;\n}\n\n.btn.disabled {\n /* needed in Bootstrap 3 to allow tooltips on disabled buttons */\n pointer-events: auto;\n}\n\n.btn-default,\n.btn-default.disabled,\n.btn-default[disabled],\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover {\n color: #ffffff;\n background-color: var(--codeButtons);\n border-color: var(codeButtonsBorder);\n}\n\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active {\n background-color: #3a3c3c;\n border-color: #2e2f2f;\n color: #ffffff;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin-right: 5px;\n}\n\n.tooltip {\n z-index: 2000 !important;\n}\n\n.tooltip.in {\n opacity: 0.8;\n filter: alpha(opacity=80);\n}\n\nh2 {\n margin-top: 20px;\n}\n\n.alert form {\n margin-bottom: 0;\n}\n\n/* default bookstrap alert color is hard to read (low contrast). */\n.alert {\n color: var(--grayToWhite);\n padding: 10px;\n}\n\n.alert-info {\n background-color: var(--alerts);\n}\n\n.alert-danger {\n background-color: var(--dangerAlerts);\n}\n\n.alert-success {\n background-color: var(--successAlerts);\n}\n\n/* override the color styles applied by Skulpt to the unittest results divs */\n.unittest-results.alert-danger {\n background-color: var(--dangerAlerts) !important;\n}\n\n.unittest-results.alert-success {\n background-color: var(--successAlerts) !important;\n}\n\n.alert label {\n font-weight: normal;\n}\n\n.navbar_message {\n margin-top: 15px;\n font-weight: bold;\n}\n/*\nMissing brackets\n================\nThe default styling from Sphinx's ``basic.css`` doesn't style multiple references to the same reference with brackets. Here's the relevant snippet of CSS:\n\n.. code-block:: CSS\n :number-lines:\n\n a.brackets:before,\n span.brackets > a:before{\n content: \"[\";\n }\n\n a.brackets:after,\n span.brackets > a:after {\n content: \"]\";\n }\n\nThe HTML for a footnote reference is:\n\n.. code-block:: HTML\n :number-lines:\n\n 2\n\nThe HTML for a typical footnote is:\n\n.. code-block:: HTML\n :number-lines:\n\n
    \n
    \n \n 1\n \n
    \n
    Omitted this...
    \n
    \n\nThe HTML for a footnote referenced multiple times is:\n\n.. code-block:: HTML\n :number-lines:\n\n
    \n
    \n 1\n \n (1,2,3)\n \n
    \n
    Omitted this...
    \n
    \n\nHowever, there's no (current) CSS selector that will add a ``content`` to the multiply-referenced footnote without adding an additional ``content`` to the typical footnote: we want to select ``dt.label > span.brackets > text-only content`` or ``dt.label > span.brackets > :not(:has a)`` (see the unsupported `:has selector `_. So, I see no solution for this (outside JS).\n\n\nIncorrect color\n===============\nSecond, the Bootstrap theme (v3.4.1) contains the following CSS, from ``node_modules/bootstrap/dist/css/less/labels.less``:\n\n.. code-block:: CSS\n :number-lines:\n\n .label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n ...more here omitted...\n }\n\nALL this therefore gets applied to footnotes, since they have the ``label`` class. Because the ``@label-color`` is white, this CSS makes the reference invisible against the default (light mode) white background. I like the rest of the styling changes (even though they differ from the standard Sphinx settings), so only the color is changed.\n*/\ndt.label > span.brackets:not(span.brackets > a),\ndt.label > span.fn-backref:not(span.fn-backref > a) {\n color: black;\n}\n\n/* These admonition styles styles are copied from the Bootstrap .alert classes.\n Most of the !important declarations are to override the Sphinx basic.css styles */\n.admonition {\n padding: 8px 35px 8px 14px !important;\n margin-bottom: 20px !important;\n margin-top: 20px !important;\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n background-color: var(--admonition);\n border: 1px solid #fbeed5;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n}\n\n/* .alert-danger */\n.admonition.caution {\n color: #a33f3e;\n background-color: #f2dede;\n border-color: #eed3d7;\n}\n\n/* .alert-info */\n.admonition.tip,\n.admonition.note {\n color: #333;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n\n/* from web2py.css */\ndiv.flash {\n font-weight: bold;\n position: fixed;\n padding: 10px;\n top: 55px;\n right: 45px;\n opacity: 0.95;\n margin: 0 0 10px 10px;\n vertical-align: middle;\n cursor: pointer;\n color: #ffffff;\n background-color: #000;\n border: 2px solid #fff;\n border-radius: 8px;\n -moz-border-radius: 8px;\n -webkit-border-radius: 8px;\n background-image: -webkit-linear-gradient(top, #222, #000);\n background-image: -o-linear-gradient(top, #222, #000);\n background-image: -moz-linear-gradient(90deg, #222, #000);\n background-image: linear-gradient(top, #222, #000);\n background-repeat: repeat-x;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n z-index: 2000;\n}\n\n/* Styles for the login, registration, and Janrain forms */\n#web2py_user_form {\n margin-top: 10px;\n}\n\n#web2py_user_form form {\n float: left;\n margin-right: 150px;\n padding-top: 3px;\n}\n\n#web2py_user_form td {\n padding-bottom: 15px;\n}\n\n#web2py_user_form td.w2p_fw {\n width: 299px;\n}\n\n#auth-actions {\n margin-top: 50px;\n}\n\n#sign_in_text td {\n font-size: 17px;\n color: #333;\n font-family: \"lucida grande\", Verdana, sans-serif;\n padding-bottom: 13px;\n}\n\n#auth_user_remember {\n margin-top: -20px;\n}\n\n/* End login, registration, Janrain styles */\n\n/* end-of-chapter exercises styles */\n#exercises > ol > li,\n#programming-exercises > ol > li {\n margin-bottom: 30px;\n}\n\n#exercises > ol > li:nth-child(even),\n#programming-exercises > ol > li:nth-child(even) {\n padding: 1.2em 1.4em;\n background: #faf7df;\n border: 1px solid #fbeed5;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n}\n\n/* End chapter exercises styles */\n\n/* Modal dialog styles (scratch activecode, compare me, etc) */\n.scratch-ac-modal {\n width: 90%;\n max-height: 90%;\n overflow-y: scroll;\n}\n\n.compare-modal .progress {\n margin-bottom: 0;\n}\n\n.compare-me-progress {\n width: 100%;\n}\n\n.compare-me-progress .progress-bar,\n.unittest-results-progress .progress-bar {\n color: #333;\n}\n\n\n.unittest-results-progress {\n width: 25%;\n}\n\n.compare-modal {\n width: 350px;\n}\n\n.compare-modal table {\n border-collapse: separate;\n border-spacing: 10px 5px;\n}\n\n.codelens-modal {\n /* we set some custom position styles so that the modal doesn't obscure the codelens visualizer */\n top: 20%;\n right: 20%;\n left: auto;\n bottom: auto;\n}\n\n@media (max-width: 768px) {\n /* remove any custom position styles when the screen is small (mobile devices)\n to prevent the modal from being partially off the screen */\n .codelens-modal {\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: 0 !important;\n }\n}\n\n.codelens-modal > .modal-dialog {\n width: 400px;\n}\n\n/* End modal dialog styles */\n\n.footnote.table {\n width: auto;\n margin-bottom: 10px;\n}\n\n.footnote.table td.label {\n padding: 2px 5px 2px 5px;\n background-color: #d9edf7;\n}\n\n.ac-canvas {\n background-color: white;\n display: inline-block;\n}\n\n.video-play-overlay {\n position: relative;\n top: -150px;\n left: 44%;\n height: 85px;\n width: 130px;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n.video_popup video {\n width: var(--contentWidthRegular);\n cursor: pointer;\n}\n\n.ui-sortable-helper {\n height: auto !important;\n width: auto !important;\n}\n\n.navLink {\n z-index: 2;\n display: inline;\n bottom: 65px;\n position: fixed;\n opacity: 0.4;\n}\n\n.navLink:hover {\n opacity: 1;\n}\n\n.navLink a {\n display: inline-block;\n background-color: white;\n border-style: solid;\n border-color: lightgrey;\n border-width: 2px;\n width: 100px;\n height: 50px;\n}\n\n#relations-next {\n right: 35px;\n}\n\n#relations-prev {\n left: 35px;\n}\n\n.nextprev-list {\n margin: 10px;\n padding-left: 0;\n height: 50px;\n}\n\n@media (max-width: 600px) {\n .navLink {\n display: inline-block;\n bottom: auto;\n position: absolute;\n }\n\n #relations-next,\n #relations-prev {\n width: 25%;\n padding: 0 20px;\n display: inline;\n }\n}\n\n#completionButton {\n margin-top: 25px;\n margin-bottom: 15px;\n padding-left: 70px;\n padding-right: 70px;\n color: var(--completionButtonText);\n font-weight: bold;\n}\n\n.buttonAskCompletion {\n background-color: var(--completionButton);\n border-color: var(--completionButtonHover);\n font-weight: bold;\n}\n\n.buttonAskCompletion:hover {\n background-color: var(--completionButtonHover);\n border-color: var(--completionButtonHover);\n}\n\n.buttonConfirmCompletion {\n background-color: #377e22;\n border-color: #3dc682;\n color: #ffffff !important;\n}\n\n.buttonConfirmCompletion:hover {\n background-color: #3dc682;\n border-color: #3dc682;\n}\n\n.navLinkBg {\n height: 40px;\n background-color: #ffffff;\n z-index: 1;\n position: fixed;\n bottom: 55px;\n color: #999;\n font-weight: bold;\n -webkit-box-shadow: 0px 0px 3px rgba(50, 50, 50, 0.5);\n -moz-box-shadow: 0px 0px 3px rgba(50, 50, 50, 0.5);\n box-shadow: 0px 0px 3px rgba(50, 50, 50, 0.5);\n}\n\n.navLinkBg:hover {\n color: #999;\n}\n\n#navLinkBgRight {\n right: -1000px;\n padding: 10px 15px 0 65px;\n}\n\n#navLinkBgLeft {\n left: -65px;\n padding-left: 15px;\n padding-right: 50px;\n}\n\n.activehtml {\n width: 100%;\n height: 400px;\n background-color: #ffffff;\n}\n\n.container section > div.sidebar {\n margin: 0 0 0.5em 1em;\n}\n\na.disqus_thread_link {\n display: block;\n}\n\n.reveal_button {\n display: block;\n margin-left: 0;\n}\n\niframe[seamless] {\n display: block;\n}\n\n@media (min-width: 768px) {\n .container section > div.sidebar {\n margin: 0 3em 0.5em 1em;\n }\n}\n\n@media (min-width: 992px) {\n .container section > div.sidebar {\n margin: 0 11em 0.5em 1em;\n }\n}\n\n@media (min-width: 1200px) {\n .container section > div.sidebar {\n margin: 0 18em 0.5em 1em;\n }\n}\n\ndiv.ExecutionVisualizer table.visualizer {\n width: auto;\n margin-left: auto;\n margin-right: auto;\n background-color: #ffffff;\n}\n\n.sltooltip {\n position: absolute;\n z-index: 1020;\n display: block;\n padding-bottom: 5px;\n font-size: 11px;\n visibility: visible;\n margin-top: -2px;\n bottom: 120%;\n margin-left: -2em;\n}\n\n.sltooltip .sltooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-top: 5px solid #000000;\n border-right: 5px solid transparent;\n border-left: 5px solid transparent;\n position: absolute;\n width: 0;\n height: 0;\n}\n\n.sltooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: var(--tooltip);\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n}\n\nul.dropdown-menu.globaltoc {\n max-height: 700px;\n overflow: auto;\n}\n\n.globaltoc span.caption-text {\n display: inline-block;\n font-weight: bold;\n font-size: large;\n}\n\n/* Style lp textareas. */\ntextarea.lp-result {\n width: 100%;\n height: 10em;\n font-family: monospace;\n}\n\n/*\n * Hide only visually, but have it available for screen readers:\n * https://snook.ca/archives/html_and_css/hiding-content-for-accessibility\n *\n * 1. For long content, line feeds are not interpreted as spaces and small width\n * causes content to wrap 1 word per line:\n * https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe\n */\n\n.visuallyhidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n white-space: nowrap;\n /* 1 */\n}\n\n/*\n * Extends the .visuallyhidden class to allow the element\n * to be focusable when navigated to via the keyboard:\n * https://www.drupal.org/node/897638\n */\n\n.visuallyhidden.focusable:active,\n.visuallyhidden.focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n white-space: inherit;\n}\n\n.blockquote {\n text-align: center;\n font-size: large;\n font-style: italic;\n padding-left: 2em;\n padding-right: 2em;\n}\n\n\n#subchapterprogress.ui-progressbar .ui-progressbar-value {\n margin: 0;\n border-radius: 0px;\n}\n\n#subchapterprogress > div {\n background: green;\n}\n\n#subchapterprogress > div.loggedout {\n background: lightgray;\n}\n\n.runestone_caption {\n text-align: center;\n}\n\n.runestone_caption_divid {\n opacity: 50%;\n}\n\n#questions .runestone_caption:before {\n counter-increment: rscomponent;\n content: \"Problem: \" counter(rscomponent) \" -- \";\n}\n\nbody {\n color: var(--bodyFont);\n}\n\n.jupyter_container .output {\n margin-top: 10px;\n}\n\n.jupyter_container .output td {\n padding-left: 5px;\n padding-right: 5px;\n}\n\n.jupyter_container .output th {\n padding-left: 5px;\n padding-right: 5px;\n}\n\n/*Theme toggle*/\n.dropdown-menu > li > label.theme-switch {\n display: flex;\n align-items: center;\n font-weight: normal;\n cursor: pointer;\n}\n\n.theme-switch input {\n display: none;\n}\n\n.theme-switch .slider {\nbackground-color: #ccc;\nheight: 1.25em;\nwidth: 2em;\ntransition: 0.4s;\nposition: relative;\nmargin-right: 3px;\n}\n\n.theme-switch .slider:before {\n background-color: #fff;\n bottom: 2px;\n content: \"\";\n height: calc(1.25em - 4px);\n left: 2px;\n position: absolute;\n transition: 0.4s;\n width: calc(1.25em - 4px);\n}\n\n.theme-switch input:checked + .slider {\n background-color: #66bb6a;\n}\n\n.theme-switch input:checked + .slider:before {\n transform: translateX( calc(0.75em - 1px) );\n}\n\n.theme-switch .slider.round {\n border-radius: 1.25em;\n}\n\n.theme-switch .slider.round:before {\n border-radius: 1.25em;\n}\n/*End theme toggle*/\n\n/* for ads */\n.adcopy {\n width: 60%;\n background-color: #f2e0c3;\n padding: 10px;\n margin-left: auto;\n margin-right: auto;\n margin-top: 10px;\n border: solid black 2px;\n border-radius: 10px;\n}\n\n.adcopy .donateb {\n\n margin-left: 30%;\n}\n\n.isCorrect:before {\n /*content: url(https://em-content.zobj.net/thumbs/240/apple/325/check-mark_2714-fe0f.png);*/\n font-family: \"Material Symbols Outlined\";\n content: \"\\e86c \";\n float:right;\n padding-left: 4px;\n}\n\n.isInCorrect:before {\n /*content: url(https://em-content.zobj.net/thumbs/240/apple/325/check-mark_2714-fe0f.png);*/\n font-family: \"Material Symbols Outlined\";\n content: \"\\e349 \";\n float:right;\n padding-left: 4px;\n}\n\n.isAssigned:before {\n /*content: url(https://em-content.zobj.net/thumbs/240/apple/325/check-mark_2714-fe0f.png);*/\n font-family: \"Material Symbols Outlined\";\n content: \"\\f3de \";\n float:right;\n padding-left: 4px;\n}\n\n/* When both isCorrect and isAssigned are present, show both icons */\n.isCorrect.isAssigned:before {\n font-family: \"Material Symbols Outlined\";\n content: \"\\e86c \\f3de \";\n /*content: \"✅ 📋 \";*/\n float:right;\n padding-left: 4px;\n}\n\n/* When both isInCorrect and isAssigned are present, show both icons */\n.isInCorrect.isAssigned:before {\n font-family: \"Material Symbols Outlined\";\n content: \"\\e349 \\f3de \";\n float:right;\n padding-left: 4px;\n}\n\n/* ---------------------------------------------------------- */\n/* Redo some PreTeXt styles undone by Bootstrap */\npre {\n color: inherit;\n background: inherit;\n}\n\nsummary.ptx-footnote__number {\n display: inline;\n}\n\nsummary.knowl__link {\n display: list-item inline;\n}\n\ndetails.ptx-footnote {\n display: inline;\n}\n/* ---------------------------------------------------------- */\n\n.handsontable td, .handsontable th {\n background-color: var(--content-background, #fff);\n color: var(--bodyFont, #000);\n}\n\n\nlegend {\n /* allow darkmode to override legend color */\n color: var(--grayToWhite, #333);\n border-bottom-color: var(--grayToWhite, #333);\n}\n\n.autopermalink {\n display: none;\n}","/*\n**********************************************\n|docname| - a WCAG 2.0 AA compliant stylesheet\n**********************************************\n*/\n\n/* Variables holding theme colors */\n:root {\n\t--codebuttons: #474949;\n}\n[data-theme=\"dark\"] {\n\t--codebuttons: #2c0aa6;\n}\n/*Navigation Tabbing Styling*/\nli.dropdown.open a.dropdown-toggle, li.dropdown.open a.dropdown-toggle:focus {\n\tborder:0px !important;\n\t/*background-color: #346A6E!important;*/\n\tbackground-color: #2A5659 !important;\n\tcolor:#F8F8F8 !important;\n}\na.dropdown-toggle:focus {\n\t /*border:1px solid #5B9DD9 !important;\n\t color:#5B9DD9 !important;\n\t width:48px !important;*/\n\t background-color: #52A6AC!important;\n\t color:#F8F8F8 !important;\n}\n/* Border Manipulation */\nli.divider-vertical {\n\tmargin:0px !important;\n}\nli.dropdown a.dropdown-toggle {\n\tpadding:15px 18px !important;\n}\n\n/*\nBootstrap button styling\n*/\n\n/* Default Button */\n/* Passes WCAG 2.0 */\nbutton.btn.btn-default:active {\n\tcolor:#474949 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-default:focus {\n\tcolor:#474949 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-default{\n\tcolor:#FFFFFF !important;\n\tbackground-color: rgb(71, 73, 73) !important;\n}\nbutton.btn.btn-default.btn-sm.disabled:active {\n\tcolor:#474949 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-default.btn-sm.disabled:focus {\n\tcolor:#474949 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-default.btn-sm.disabled{\n\tcolor:#FFFFFF !important;\n\tbackground-color:#474949 !important;\n}\n/* Sucess Button */\n/* Failed WCAG 2.0, #255425 passes */\nbutton.btn.btn-success:active {\n\tcolor:#427e44 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-success:focus {\n\tcolor:#427e44!important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-success {\n\tcolor:#FFFFFF !important;\n\tbackground-color:#427e44!important;\n}\n\n/*Primary Button*/\n/* fails WCAG 2.0, #265986 passes */\nbutton.btn.btn-primary:active {\n\tcolor:#3379b6!important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-primary:focus {\n\tcolor:#3379b6 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-primary {\n\tcolor:#FFFFFF !important;\n\tbackground-color:#3379b6 !important;\n}\n\n\n/*Info Button */\n/* Fails, WCAG 2.0, #155569 passes*/\nbutton.btn.btn-info:active {\n\tcolor:#1a6a83!important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-info:focus {\n\tcolor:#1a6a83 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-info{\n\tcolor:#FFFFFF !important;\n\tbackground-color:#1a6a83 !important;\n}\n\n/*Warning Button*/\n/*Fails WCAG 2.0, #794b0b*/\nbutton.btn.btn-warning:active {\n\tcolor:#945c0e !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-warning:focus {\n\tcolor:#945c0e !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-warning {\n\tcolor:#FFFFFF !important;\n\tbackground-color:#945c0e !important;\n}\n\n/*Danger Button */\n/*Fails, #a62924 passes*/\nbutton.btn.btn-danger:active {\n\tcolor:#d33a35 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-danger:focus {\n\tcolor:#d33a35 !important;\n\tbackground-color:#FFFFFF !important;\n}\nbutton.btn.btn-danger{\n\tcolor:#FFFFFF !important;\n\tbackground-color:#d33a35 !important;\n}\n\n/*Link Button*/\n/*Fails AAA, passes with #265986*/\nbutton.btn.btn-link:active {\n\tcolor:#FFFFFF!important;\n\tbackground-color:#1a6a83 !important;\n}\nbutton.btn.btn-link:focus {\n\tcolor:#FFFFFF !important;\n\tbackground-color:#1a6a83 !important;\n}\nbutton.btn.btn-link {\n\tcolor:#1a6a83 !important;\n\tbackground-color:#FFFFFF !important;\n}","/* Variables holding theme colors */\n:root {\n\t--menu: #FFFFFF;\n}\n\n[data-theme=\"dark\"] {\n\t--menu: #000000;\n}\n\n.my-highlighted-text{\n\tbackground-color:#FFFF99;\n}\n.social-highlighted-text{\n\tbackground-color:#FFCCCC;\n}\n.highlight-option-box{\n\tposition:absolute;\n\ttop:0px;\n\tleft:0px;\n}\n.highlight-option-box li{ \n\theight:24px;\n}\n#continue-reading{\n\tpadding-top:20px;\n\tdisplay: none;\n}\n#continue-reading a{\n\tfloat:right;\n\tmargin-right:20px;\n}\nli.completed\n{\nlist-style-image: url('completed.png');\n}\nli.active\n{\nlist-style-image: url('active.png');\n}\n.infoTextCompleted{\n\tmargin-left:10px;\n\tfont-size:0.9em;\n\tcolor:#3dc682;\n\tdisplay:none;\n\tfont-style:italic;\n\topacity: 0.7;\n}\n.infoTextActive{\n\tmargin-left:10px;\n\tfont-size:0.9em;\n\tcolor:#ff9f19;\n\tdisplay:none;\n\tfont-style:italic;\n\topacity: 0.7;\n}\n.dropdown-menu{\n\tbackground-clip: padding-box;\n background-color: var(--menu);\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 5px 5px 5px 5px;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n display: none;\n list-style: none outside none;\n margin: 1px 0 0;\n min-width: 160px;\n padding: 4px 0;\n position: absolute;\n top: 100%;\n z-index: 1000;\n}\n.dropdown-menu ul {\n list-style: disc outside none;\n margin: 0 0 9px 25px;\n padding: 0;\n}\n\n.sidebar-highlights{\n background-color:#FFFF99;\n}\ndiv.documentwrapper {\n\tborder : 0 none;\n}\ndiv.bodywrapper {\n\tborder-right: 0 none;\n}\ndiv.sphinxsidebar {\n\tborder-left: 1px solid #CCCCCC;\n\tpadding-left: 10px;\n}\n.body>.section .section{\n\tpadding-top: 1px;\n}\n#jump-to-chapter{\n border: 1px solid #CCCCCC;\n letter-spacing: 0.015em;\n line-height: 120%;\n padding: 0.5em;\n\twidth: 80%;\n\tmargin-left: auto;\n\tmargin-right: auto;\n}\n#navigation-links{\n\tbackground-color: #F8F8F8;\n border: 1px solid #CCCCCC;\n\tpadding:10px;\n\tmargin:10px;\n}\n",".matrixeq_container {\n padding: 6px 6px 6px 6px;\n margin: 0px 0px 6px 0px;\n}\n\nspan.matrix_table {\n display: inline-table;\n background-color: inherit;\n border-width: 2px 2px;\n border-style: solid;\n border-color: black;\n text-align: center;\n padding: 0px 1px;\n margin: 0px 0px 4px 0px;\n overflow: visible;\n}\n\nspan.matrix_column {\n display: inline-table;\n background-color: inherit;\n padding: 2px 8px 2px 8px;\n margin: 0px 1px;\n border-width: 0px 0px 0px 0px;\n font-family: monospace;\n font-size: 12px;\n vertical-align: middle;\n}\n\nspan.matrix_column div {\n display: block;\n margin: 1px;\n padding: 2px;\n background-color: inherit;\n}\n\nspan.matrix_table .matrix_column {\n border-style: none;\n margin-left: 5px;\n margin-right: 5px;\n}\n\nspan.matrix_table:before {\n content: \" \";\n background-color: inherit;\n width: 85%;\n text-align: center;\n height: 2px;\n position: relative;\n top: -2px;\n z-index: 100;\n display: block;\n margin: 0px auto;\n}\n\nspan.matrix_table:after {\n content: \" \";\n background-color: inherit;\n width: 85%;\n text-align: center;\n height: 2px;\n position: relative;\n top: 2px;\n z-index: 100;\n display: block;\n margin: 0px auto;\n}\n\nspan.matrix_column:before {\n content: \" \";\n width: 85%;\n height: 2px;\n position: relative;\n top: -2px;\n z-index: 100;\n display: block;\n}\n\nspan.matrix_column:after {\n content: \" \";\n width: 85%;\n height: 2px;\n position: relative;\n top: 2px;\n z-index: 100;\n display: block;\n}\n\nspan.matrix_table span.matrix_column:before {\n height: 0px;\n}\n\nspan.matrix_table span.matrix_column:after {\n height: 0px;\n}\n\nspan.matrix_table input[type=\"text\"] {\n display: block;\n margin: 0;\n width: 50px;\n height: 24px;\n font-family: sans-serif;\n font-size: 12px;\n appearance: none;\n box-shadow: none;\n text-align: right;\n background-color: inherit;\n}\n\nspan.matrix_operator {\n display: inline-table;\n padding: 0px;\n margin: 0px 4px 0px 4px;\n font-family: monospace;\n font-size: 18px;\n vertical-align: middle;\n}\n\nspan.matrix_label {\n display: inline-table;\n padding: 0px 0px 0px 20px;\n margin: 0px 1px;\n font-family: sans-serif;\n font-size: 12px;\n vertical-align: middle;\n}\n\n/* Colors for matrix highlighting */\n\n.lightcyanColor {\n background-color: lightcyan;\n}\n\n.lightgreyColor {\n background-color: lightgrey;\n}\n\n.purpleColor {\n background-color: #DFB5E8;\n}\n\n.yellowColor {\n background-color: #FDFF9D;\n}\n\n\n\n","/********************* Colour reference chart****************\nelememt ********* property ********* colour ********\n\nwebgl_container background-color #fcf8e3\n\n*/\n\n/* Major sections */\n.webgl_container {\n background-color: #fcf8e3;\n box-sizing: border-box;\n width: 100%;\n display: block;\n margin-bottom: 1em;\n}\n\n.webgl_cmds {\n box-sizing: border-box;\n width: 100%;\n text-align: center;\n padding: 6px;\n}\n\n.webgl_row2 {\n box-sizing: border-box;\n width: 100%;\n padding: 0px 4px 0px 4px;\n display: block;\n height: 550px;\n}\n\n.webgl_editors {\n box-sizing: border-box;\n float: left;\n display: block;\n visibility: visible;\n width: 50%;\n}\n\n.webgl_canvas {\n box-sizing: border-box;\n float: left;\n display: block;\n visibility: visible;\n font-size: 12px;\n font-weight: normal;\n padding-left: 5px;\n width: 50%;\n}\n\n.webgl_output {\n box-sizing: border-box;\n width: 100%;\n padding: 4px;\n margin-top: 6px;\n float: left;\n}\n\n/* Details within each section */\n/* Tabbed titles, ul horizontal list */\n.webgl_nav_tabs {\n height: 31px;\n width: 100%;\n margin: 0px;\n padding: 6px 0px 0px 0px;\n background-color: #CFCCB8;\n border-color: #fbeed5;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n list-style-type: none;\n overflow: hidden;\n display: inline-flex;\n}\n\n.webgl_nav_tabs li {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n margin: 0px 0px 0px 4px;\n padding: 4px 1px 4px 4px;\n list-style-type: none;\n position: relative;\n float: left;\n background-color: #E6E2CC;\n font-size: 9pt;\n}\n\n.webgl_nav_tabs li > a {\n padding: 8px 8px 8px 8px;\n color: #555;\n text-decoration: none;\n}\n\n.webgl_nav_tabs > li > a:hover {\n border-color: #b4b19d;\n border-bottom-width: 0;\n}\n\n.webgl_nav_tabs li.active {\n background-color: #ffffff;\n list-style-type: none;\n list-style-image: none;\n}\n\n/* Webgl editors */\n.webgl_tab_content {\n width: 100%;\n position: absolute;\n clear: both;\n margin: 0px 0px 20px 0px;\n border: 0px;\n color: #c09853;\n background-color: #fcf8e3;\n z-index: 1;\n}\n\n.webgl_tab_content.active {\n z-index: 2;\n}\n\n.webgl_tab_content > * {\n margin-left: auto;\n margin-right: auto;\n /*\tposition:relative; */\n}\n\n.webgl_tab_content .clearfix {\n position: initial;\n}\n\n.webgl_tab_editor {\n width: 100%;\n position: absolute;\n clear: both;\n padding: 10px 4px 10px 4px;\n margin: 0px 0px 20px 0px;\n border: 0px;\n color: #c09853;\n background-color: #fcf8e3;\n}\n\n/* span that contains the tabbed text editors */\n.webgl_code {\n width: 100%;\n float: left;\n}\n\n.webgl_tab_contents_text {\n width: 100%;\n position: absolute;\n clear: both;\n padding: 10px 4px 10px 4px;\n margin: 0px 0px 20px 0px;\n border: 0px;\n color: #c09853;\n background-color: #fcf8e3;\n z-index: 1;\n}\n\n.webgl_errorMessages {\n color: red;\n}\n\n.webgl_warningMessages {\n color: rgb(170, 34, 164);\n}\n\n.webgl_infoMessages {\n color: rgb(24, 144, 64);\n}\n\n.webgl_output_div {\n width: 100%;\n margin: 2px;\n border: 1px solid lightgrey;\n padding-bottom: 4px;\n padding-top: 4px;\n padding-left: 4px;\n background-color: white;\n overflow: auto;\n height: 14em;\n font-size: 12px;\n font-weight: normal;\n}\n\n.webgl_editor_highlight {\n background-color: #EEEEEE; /* very light grey */\n}\n\n/* \nRemoved as these rules apply to entire browser window and not just webgl interactives\n::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 7px;\n}\n::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n*/\n\n.webgl_btn {\n display: inline-block;\n padding: 3px 6px;\n margin-bottom: 0;\n background-color: thistle;\n font-size: 12px;\n font-weight: normal;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n cursor: pointer;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n -o-user-select: none;\n user-select: none;\n}\n\n.webgl_checkbox {\n}\n\n.webgl_tabbed_editor {\n width: 100%;\n resize: none;\n font-family: monospace, sans-serif;\n font-size: 9pt;\n font-style: normal;\n}\n\n.canvas3D {\n width: 100%;\n height: 100%;\n}\n\n.CodeMirror.webgl-default {\n border: 1px solid #eee;\n font-family: monospace, sans-serif;\n font-size: 8pt;\n font-style: normal;\n}\n\nbutton.btn.webgl-default {\n font-size: 8pt;\n}\n\n\n",".runestone-sphinx {\n @import (less) url(\"./presenter_mode.css\");\n}\n",".hidden{\n display: none;\n}\n\n.view-toggle{\n padding: 0.85em;\n}\n\n.presentation-mode section *{\n display: none;\n}\n\n.presentation-mode section .runestone, .presentation-mode section .runestone *{\n display: initial;\n}\n\n.present{\n height: 100vh;\n}\n\n.full-height{\n height: 100vh;\n}\n\n.bottom{\n position: absolute;\n bottom: 0;\n}\n\n#codeDisplayDiv{\n width: auto!important;\n}\n\ndiv.ExecutionVisualizer #dataViz{\n margin: 0;\n}\n\ndiv.ExecutionVisualizer div#stackHeader {\n text-align: center;\n}\n\n#stackFrame{\n display: block!important;\n}\n\n#stackHeapTable {\n width: 100%;\n}\n\n#stackHeapTable tr {\n justify-content: space-around;\n}\n\ndiv.ExecutionVisualizer td#stack_td, div.ExecutionVisualizer td#heap_td {\n flex: 1;\n}\n\n.presentation-title {\n display: none;\n}\n\n.present .presentation-title {\n display: block;\n}\n\ndiv.ExecutionVisualizer div#heap {\n float: none;\n padding-left: 0;\n}\n\n#stack_td tr {\n display: table-row;\n}\n\n#heap_td tr {\n display: table-row;\n}\n\n#codeDisplayDiv{\n margin: 0 auto;\n}\n\n/* bnm -- comment this out for now as it breaks codelens indentation and arrows\n.visualizer tr{\n display: flex;\n}\n*/\n\n#vizLayoutTd{\n flex: 1;\n}\n\n#vizLayoutTdFirst {\n flex: 2;\n}\n\n#vizLayoutTdSecond {\n flex: 1;\n}\n\n#vizLayoutTdThird {\n flex: 2;\n}\n\n#progOutputs {\n display: block!important;\n margin: 0 20px;\n width: 60%;\n}\n\n#pyStdout {\n width: 100%!important;\n}\n\ndiv.ExecutionVisualizer #pyStdout {\n margin-bottom: 1em;\n}\n\ndiv.ExecutionVisualizer table.visualizer {\n width: 100%;\n}\n\n.present #vizLayoutTdThird{\n text-align: left;\n}\n\n.ac-block{\n display: flex;\n margin-bottom: 1em;\n}\n\n.row-mode .ac-block{\n display: block;\n margin-bottom: 0;\n}\n\n.row-mode .ac_output, .row-mode .ac_code_div{\n float: none;\n display: block;\n width: auto;\n max-width: none;\n}\n\n.row-mode .ac_code_div{\n margin-bottom: 1em;\n}\n\n.ac_section>* {\n max-width: 100%;\n}\n\n.ac_output{\n display: block;\n max-width: 100%;\n}\n\n.ac_output pre {\n visibility: visible!important;\n min-height: 60px;\n}\n\n.CodeMirror{\n margin: 0;\n max-width: 100%;\n border-radius: 3px;\n min-height: 60px;\n}\n\n.container section > runestone:not(.ac_section){\n max-width:none;\n margin: 0;\n}\n\n.presentation-options {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n}\n\n.layout-btn {\n background-color: #FBEED5;\n border: 2px solid #DFD4BE;\n border-radius: 2px;\n padding: .25rem;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 0 .5rem;\n transition: all .2s ease;\n}\n\n.layout-btn.active-layout, .layout-btn:focus {\n border: 2px solid #979797;\n outline: none;\n}\n\n.sketchpad-container {\n min-width: 50%;\n min-height: 300px;\n padding: 0 15px;\n}\n\n.card-mode .sketchpad-container {\n width: 50%;\n margin: 0;\n display: inline-block;\n /*margin: 0 -15px;*/\n vertical-align: top;\n}\n\n.row-mode .error {\n margin: 20px 15px;\n}\n\n.card-mode .error {\n margin: 28px 0 0;\n width: 50%;\n display: inline-block;\n padding: 0 15px;\n vertical-align: top;\n margin-top: 28px;\n}\n\n.sketchpad {\n background: white;\n border: 2px solid grey;\n border-radius: 3px;\n width: 100%;\n min-height: 300px;\n display: block;\n}\n\n.btn-presenter {\n padding: .5rem 1rem;\n border-radius: 3px;\n font-weight: 500;\n margin: 1.5rem 0 1.5rem 1.5rem;\n}\n\n.btn-grey-outline {\n border: 2px solid grey;\n color: grey;\n background: white;\n}\n\n.btn-grey-solid {\n border: 2px solid grey;\n color: white;\n background: grey;\n}\n\nbody.present .ac_section>* {\n max-width: none;\n}\nbody.present iframe {\n width: 100%;\n}\n\nbody.present {\n /* font-size: 2.0em; */\n}\n\nbody.present #relations-prev, body.present #relations-next, body.present .navLinkBg {\n display: none;\n}\n\nbody.present .btn-presenter {\n position: absolute;\n}\nbody.present .btn-presenter.prev-exercise { left: 0px; }\nbody.present .btn-presenter.next-exercise { right: 0px; }\n\n/* .col-md-12 {\n width: 58.333333333333336%;\n}\n\n.card-mode .col-md-7 {\n width: 50%;\n} */\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/course/_static/prefix-runestone.6ec5960970d8b364.css.map.gz b/course/_static/prefix-runestone.6ec5960970d8b364.css.map.gz new file mode 100755 index 0000000000000000000000000000000000000000..b5ab973f2355c6b0e275fd75e6a40471ebbd8ff3 GIT binary patch literal 53075 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 E0J&HPEdT%j literal 0 HcmV?d00001 diff --git a/course/_static/prefix-runestone.1c010553c35c544c.bundle.js b/course/_static/prefix-runestone.80892ed1280c2803.bundle.js similarity index 76% rename from course/_static/prefix-runestone.1c010553c35c544c.bundle.js rename to course/_static/prefix-runestone.80892ed1280c2803.bundle.js index 4aa295a..584271e 100755 --- a/course/_static/prefix-runestone.1c010553c35c544c.bundle.js +++ b/course/_static/prefix-runestone.80892ed1280c2803.bundle.js @@ -1,3 +1,3 @@ -/*! For license information please see prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt */ -(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[222],{3403:()=>{!function(e){var t=function(t,n){var o;(o=function(t,i){i=i||0,t.find("> li > a.internal, > ul, > li > ul").each((function(t,a){var s=e(a),r=a.tagName.toLowerCase(),d=s.children("li"),l=e(s.parent("li"),s.parent().parent("li"));"ul"===r&&i>=n&&d.length>0&&(l.addClass("dropdown-submenu").children("a").first().attr("tabindex",-1),s.addClass("dropdown-menu")),o(s,i+1)}))})(t)};patchTables=function(){e("table.docutils").removeClass("docutils").addClass("table").attr("border",0)},e((function(){if(e("#navbar.navbar-fixed-top").length>0){var n=e("#navbar").height(),o=function(){scrollBy(0,-n-10)};location.hash&&o(),window.addEventListener("hashchange",o)}e(".dropdown-menu").each((function(){e(this).find("ul").each((function(t,n){e(n).addClass("unstyled")}))})),e("ul.globaltoc li").length?t(e("ul.globaltoc"),1):e(".globaltoc-container").remove(),t(e("ul.localtoc"),2),e(".dropdown-menu ul").not(".dropdown-menu").each((function(){var t=e(this),n=t.parent(),o=n[0].tagName.toLowerCase(),i=t.children().detach();"ul"===o?t.replaceWith(i):"li"===o&&(n.after(i),t.remove())})),$localLi=e("ul.localtoc li"),$localLi.length>2&&$localLi.first().after('
  • '),e(".dropdown-toggle").dropdown(),patchTables(),e("div.note").addClass("alert").addClass("alert-info"),e("div.warning").addClass("alert").addClass("alert-warning"),e("tt.docutils.literal").not(".xref").each((function(t,n){e(n).parent().hasClass("reference")||e(n).replaceWith((function(){return e("").text(e(this).text())}))}))}))}(window.jQuery)},19695:()=>{var e,t=!1;function n(){t||(function(){let t=$("[data-childcomponent]");t.addClass("runestone"),t.parent().closest("div").not("section").addClass("runestone"),t.parent().closest("div").css("max-width","none"),t.each((function(e){$(this),$(this).find(".ac_code_div, .ac_output").wrapAll("
    ")})),$("section img").wrap('
    '),e=$(".runestone").not(".runestone .runestone"),$("h1").before("
    ")}(),t=!0);let n=$("body"),o="present",a="full-height",s="bottom";n.hasClass(o)?($("section *").not("h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code").removeClass("hidden"),$("#completionButton").removeClass("hidden"),n.removeClass(o),$("."+a).removeClass(a),$("."+s).removeClass(s),localStorage.setItem("presentMode","text"),e.removeClass("hidden"),undefined.disabled=!0):($("section *").not("h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code").addClass("hidden"),$("#completionButton").addClass("hidden"),n.addClass(o),n.addClass(a),$("html").addClass(a),$("section .runestone").addClass(a),$(".ac-caption").addClass(s),localStorage.setItem("presentMode",o),i())}function o(){return active=e.filter(".active")}function i(t){void 0===t&&(t=0);let n=o();e.length&&(n.removeClass("active"),n=$(e[t]).addClass("active"),n.removeClass("hidden"),e.not(e.filter(".active")).addClass("hidden"))}window.nextExercise=function(){let t=o(),n=e.index(t)+1;n=0&&i(n)},$(document).on("runestone:login-complete",(function(){eBookConfig.isInstructor&&($(".navbar-right").prepend(""),$(".mode-select").change(n))}))},23836:()=>{!function(e){"use strict";e.i18n=e.i18n||{},e.extend(e.i18n.fallbacks,{ab:["ru"],ace:["id"],aln:["sq"],als:["gsw","de"],an:["es"],anp:["hi"],arn:["es"],arz:["ar"],av:["ru"],ay:["es"],ba:["ru"],bar:["de"],"bat-smg":["sgs","lt"],bcc:["fa"],"be-x-old":["be-tarask"],bh:["bho"],bjn:["id"],bm:["fr"],bpy:["bn"],bqi:["fa"],bug:["id"],"cbk-zam":["es"],ce:["ru"],crh:["crh-latn"],"crh-cyrl":["ru"],csb:["pl"],cv:["ru"],"de-at":["de"],"de-ch":["de"],"de-formal":["de"],dsb:["de"],dtp:["ms"],egl:["it"],eml:["it"],ff:["fr"],fit:["fi"],"fiu-vro":["vro","et"],frc:["fr"],frp:["fr"],frr:["de"],fur:["it"],gag:["tr"],gan:["gan-hant","zh-hant","zh-hans"],"gan-hans":["zh-hans"],"gan-hant":["zh-hant","zh-hans"],gl:["pt"],glk:["fa"],gn:["es"],gsw:["de"],hif:["hif-latn"],hsb:["de"],ht:["fr"],ii:["zh-cn","zh-hans"],inh:["ru"],iu:["ike-cans"],jut:["da"],jv:["id"],kaa:["kk-latn","kk-cyrl"],kbd:["kbd-cyrl"],khw:["ur"],kiu:["tr"],kk:["kk-cyrl"],"kk-arab":["kk-cyrl"],"kk-latn":["kk-cyrl"],"kk-cn":["kk-arab","kk-cyrl"],"kk-kz":["kk-cyrl"],"kk-tr":["kk-latn","kk-cyrl"],kl:["da"],"ko-kp":["ko"],koi:["ru"],krc:["ru"],ks:["ks-arab"],ksh:["de"],ku:["ku-latn"],"ku-arab":["ckb"],kv:["ru"],lad:["es"],lb:["de"],lbe:["ru"],lez:["ru"],li:["nl"],lij:["it"],liv:["et"],lmo:["it"],ln:["fr"],ltg:["lv"],lzz:["tr"],mai:["hi"],"map-bms":["jv","id"],mg:["fr"],mhr:["ru"],min:["id"],mo:["ro"],mrj:["ru"],mwl:["pt"],myv:["ru"],mzn:["fa"],nah:["es"],nap:["it"],nds:["de"],"nds-nl":["nl"],"nl-informal":["nl"],no:["nb"],os:["ru"],pcd:["fr"],pdc:["de"],pdt:["de"],pfl:["de"],pms:["it"],pt:["pt-br"],"pt-br":["pt"],qu:["es"],qug:["qu","es"],rgn:["it"],rmy:["ro"],"roa-rup":["rup"],rue:["uk","ru"],ruq:["ruq-latn","ro"],"ruq-cyrl":["mk"],"ruq-latn":["ro"],sa:["hi"],sah:["ru"],scn:["it"],sg:["fr"],sgs:["lt"],sli:["de"],sr:["sr-ec"],srn:["nl"],stq:["de"],su:["id"],szl:["pl"],tcy:["kn"],tg:["tg-cyrl"],tt:["tt-cyrl","ru"],"tt-cyrl":["ru"],ty:["fr"],udm:["ru"],ug:["ug-arab"],uk:["ru"],vec:["it"],vep:["et"],vls:["nl"],vmf:["de"],vot:["fi"],vro:["et"],wa:["fr"],wo:["fr"],wuu:["zh-hans"],xal:["ru"],xmf:["ka"],yi:["he"],za:["zh-hans"],zea:["nl"],zh:["zh-hans"],"zh-classical":["lzh"],"zh-cn":["zh-hans"],"zh-hant":["zh-hans"],"zh-hk":["zh-hant","zh-hans"],"zh-min-nan":["nan"],"zh-mo":["zh-hk","zh-hant","zh-hans"],"zh-my":["zh-sg","zh-hans"],"zh-sg":["zh-hans"],"zh-tw":["zh-hant","zh-hans"],"zh-yue":["yue"]})}(jQuery)},35773:()=>{!function(e){"use strict";var t={pluralRules:{ak:{one:"n = 0..1"},am:{one:"i = 0 or n = 1"},ar:{zero:"n = 0",one:"n = 1",two:"n = 2",few:"n % 100 = 3..10",many:"n % 100 = 11..99"},ars:{zero:"n = 0",one:"n = 1",two:"n = 2",few:"n % 100 = 3..10",many:"n % 100 = 11..99"},as:{one:"i = 0 or n = 1"},be:{one:"n % 10 = 1 and n % 100 != 11",few:"n % 10 = 2..4 and n % 100 != 12..14",many:"n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14"},bh:{one:"n = 0..1"},bn:{one:"i = 0 or n = 1"},br:{one:"n % 10 = 1 and n % 100 != 11,71,91",two:"n % 10 = 2 and n % 100 != 12,72,92",few:"n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99",many:"n != 0 and n % 1000000 = 0"},bs:{one:"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"},cs:{one:"i = 1 and v = 0",few:"i = 2..4 and v = 0",many:"v != 0"},cy:{zero:"n = 0",one:"n = 1",two:"n = 2",few:"n = 3",many:"n = 6"},da:{one:"n = 1 or t != 0 and i = 0,1"},dsb:{one:"v = 0 and i % 100 = 1 or f % 100 = 1",two:"v = 0 and i % 100 = 2 or f % 100 = 2",few:"v = 0 and i % 100 = 3..4 or f % 100 = 3..4"},fa:{one:"i = 0 or n = 1"},ff:{one:"i = 0,1"},fil:{one:"v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9"},fr:{one:"i = 0,1"},ga:{one:"n = 1",two:"n = 2",few:"n = 3..6",many:"n = 7..10"},gd:{one:"n = 1,11",two:"n = 2,12",few:"n = 3..10,13..19"},gu:{one:"i = 0 or n = 1"},guw:{one:"n = 0..1"},gv:{one:"v = 0 and i % 10 = 1",two:"v = 0 and i % 10 = 2",few:"v = 0 and i % 100 = 0,20,40,60,80",many:"v != 0"},he:{one:"i = 1 and v = 0",two:"i = 2 and v = 0",many:"v = 0 and n != 0..10 and n % 10 = 0"},hi:{one:"i = 0 or n = 1"},hr:{one:"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"},hsb:{one:"v = 0 and i % 100 = 1 or f % 100 = 1",two:"v = 0 and i % 100 = 2 or f % 100 = 2",few:"v = 0 and i % 100 = 3..4 or f % 100 = 3..4"},hy:{one:"i = 0,1"},is:{one:"t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0"},iu:{one:"n = 1",two:"n = 2"},iw:{one:"i = 1 and v = 0",two:"i = 2 and v = 0",many:"v = 0 and n != 0..10 and n % 10 = 0"},kab:{one:"i = 0,1"},kn:{one:"i = 0 or n = 1"},kw:{one:"n = 1",two:"n = 2"},lag:{zero:"n = 0",one:"i = 0,1 and n != 0"},ln:{one:"n = 0..1"},lt:{one:"n % 10 = 1 and n % 100 != 11..19",few:"n % 10 = 2..9 and n % 100 != 11..19",many:"f != 0"},lv:{zero:"n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19",one:"n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1"},mg:{one:"n = 0..1"},mk:{one:"v = 0 and i % 10 = 1 or f % 10 = 1"},mo:{one:"i = 1 and v = 0",few:"v != 0 or n = 0 or n != 1 and n % 100 = 1..19"},mr:{one:"i = 0 or n = 1"},mt:{one:"n = 1",few:"n = 0 or n % 100 = 2..10",many:"n % 100 = 11..19"},naq:{one:"n = 1",two:"n = 2"},nso:{one:"n = 0..1"},pa:{one:"n = 0..1"},pl:{one:"i = 1 and v = 0",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14",many:"v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14"},prg:{zero:"n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19",one:"n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1"},pt:{one:"i = 0..1"},ro:{one:"i = 1 and v = 0",few:"v != 0 or n = 0 or n != 1 and n % 100 = 1..19"},ru:{one:"v = 0 and i % 10 = 1 and i % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14",many:"v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14"},se:{one:"n = 1",two:"n = 2"},sh:{one:"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"},shi:{one:"i = 0 or n = 1",few:"n = 2..10"},si:{one:"n = 0,1 or i = 0 and f = 1"},sk:{one:"i = 1 and v = 0",few:"i = 2..4 and v = 0",many:"v != 0"},sl:{one:"v = 0 and i % 100 = 1",two:"v = 0 and i % 100 = 2",few:"v = 0 and i % 100 = 3..4 or v != 0"},sma:{one:"n = 1",two:"n = 2"},smi:{one:"n = 1",two:"n = 2"},smj:{one:"n = 1",two:"n = 2"},smn:{one:"n = 1",two:"n = 2"},sms:{one:"n = 1",two:"n = 2"},sr:{one:"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"},ti:{one:"n = 0..1"},tl:{one:"v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9"},tzm:{one:"n = 0..1 or n = 11..99"},uk:{one:"v = 0 and i % 10 = 1 and i % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14",many:"v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14"},wa:{one:"n = 0..1"},zu:{one:"i = 0 or n = 1"}},convertPlural:function(t,n){var o,i,a,s,r=new RegExp("\\d+=","i");if(!n||0===n.length)return"";for(a=0;a{!function(e){"use strict";var t;t=new RegExp("(?:([A-Za-zªµºÀ-ÖØ-öø-ʸʻ-ˁːˑˠ-ˤˮͰ-ͳͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-҂Ҋ-ԯԱ-Ֆՙ-՟ա-և։ः-हऻऽ-ीॉ-ौॎ-ॐक़-ॡ।-ঀংঃঅ-ঌএঐও-নপ-রলশ-হঽ-ীেৈোৌৎৗড়ঢ়য়-ৡ০-ৱ৴-৺ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਾ-ੀਖ਼-ੜਫ਼੦-੯ੲ-ੴઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽ-ીૉોૌૐૠૡ૦-૰ૹଂଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽାୀେୈୋୌୗଡ଼ଢ଼ୟ-ୡ୦-୷ஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹாிுூெ-ைொ-ௌௐௗ௦-௲ఁ-ఃఅ-ఌఎ-ఐఒ-నప-హఽు-ౄౘ-ౚౠౡ౦-౯౿ಂಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ೄೆ-ೈೊೋೕೖೞೠೡ೦-೯ೱೲംഃഅ-ഌഎ-ഐഒ-ഺഽ-ീെ-ൈൊ-ൌൎൗൟ-ൡ൦-൵൹-ൿංඃඅ-ඖක-නඳ-රලව-ෆා-ෑෘ-ෟ෦-෯ෲ-෴ก-ะาำเ-ๆ๏-๛ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆ໐-໙ໜ-ໟༀ-༗༚-༴༶༸༾-ཇཉ-ཬཿ྅ྈ-ྌ྾-࿅࿇-࿌࿎-࿚က-ာေးျြဿ-ၗၚ-ၝၡ-ၰၵ-ႁႃႄႇ-ႌႎ-ႜ႞-ჅჇჍა-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፠-፼ᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙿᚁ-ᚚᚠ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱ᜵᜶ᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳាើ-ៅះៈ។-៚ៜ០-៩᠐-᠙ᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᤣ-ᤦᤩ-ᤫᤰᤱᤳ-ᤸ᥆-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉ᧐-᧚ᨀ-ᨖᨙᨚ᨞-ᩕᩗᩡᩣᩤᩭ-ᩲ᪀-᪉᪐-᪙᪠-᪭ᬄ-ᬳᬵᬻᬽ-ᭁᭃ-ᭋ᭐-᭪᭴-᭼ᮂ-ᮡᮦᮧ᮪ᮮ-ᯥᯧᯪ-ᯬᯮ᯲᯳᯼-ᰫᰴᰵ᰻-᱉ᱍ-᱿᳀-᳇᳓᳡ᳩ-ᳬᳮ-ᳳᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ‎ⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎ⅏Ⅰ-ↈ⌶-⍺⎕⒜-ⓩ⚬⠀-⣿Ⰰ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯ⵰ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〮〯〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎ㆐-ㆺㇰ-㈜㈠-㉏㉠-㉻㉿-㊰㋀-㋋㋐-㋾㌀-㍶㍻-㏝㏠-㏾㐀-䶵一-鿕ꀀ-ꒌꓐ-ꘌꘐ-ꘫꙀ-ꙮꚀ-ꚝꚠ-ꛯ꛲-꛷Ꜣ-ꞇ꞉-ꞭꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠤꠧ꠰-꠷ꡀ-ꡳꢀ-ꣃ꣎-꣙ꣲ-ꣽ꤀-ꤥ꤮-ꥆꥒ꥓꥟-ꥼꦃ-ꦲꦴꦵꦺꦻꦽ-꧍ꧏ-꧙꧞-ꧤꧦ-ꧾꨀ-ꨨꨯꨰꨳꨴꩀ-ꩂꩄ-ꩋꩍ꩐-꩙꩜-ꩻꩽ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫫꫮ-ꫵꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭥꭰ-ꯤꯦꯧꯩ-꯬꯰-꯹가-힣ힰ-ퟆퟋ-ퟻ-舘並-龎ff-stﬓ-ﬗA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b]|\ud800[\udc0d-\udc26]|\ud800[\udc28-\udc3a]|𐀼|𐀽|\ud800[\udc3f-\udc4d]|\ud800[\udc50-\udc5d]|\ud800[\udc80-\udcfa]|𐄀|𐄂|\ud800[\udd07-\udd33]|\ud800[\udd37-\udd3f]|\ud800[\uddd0-\uddfc]|\ud800[\ude80-\ude9c]|\ud800[\udea0-\uded0]|\ud800[\udf00-\udf23]|\ud800[\udf30-\udf4a]|\ud800[\udf50-\udf75]|\ud800[\udf80-\udf9d]|\ud800[\udf9f-\udfc3]|\ud800[\udfc8-\udfd5]|\ud801[\udc00-\udc9d]|\ud801[\udca0-\udca9]|\ud801[\udd00-\udd27]|\ud801[\udd30-\udd63]|𐕯|\ud801[\ude00-\udf36]|\ud801[\udf40-\udf55]|\ud801[\udf60-\udf67]|𑀀|\ud804[\udc02-\udc37]|\ud804[\udc47-\udc4d]|\ud804[\udc66-\udc6f]|\ud804[\udc82-\udcb2]|𑂷|𑂸|\ud804[\udcbb-\udcc1]|\ud804[\udcd0-\udce8]|\ud804[\udcf0-\udcf9]|\ud804[\udd03-\udd26]|𑄬|\ud804[\udd36-\udd43]|\ud804[\udd50-\udd72]|\ud804[\udd74-\udd76]|\ud804[\udd82-\uddb5]|\ud804[\uddbf-\uddc9]|𑇍|\ud804[\uddd0-\udddf]|\ud804[\udde1-\uddf4]|\ud804[\ude00-\ude11]|\ud804[\ude13-\ude2e]|𑈲|𑈳|𑈵|\ud804[\ude38-\ude3d]|\ud804[\ude80-\ude86]|𑊈|\ud804[\ude8a-\ude8d]|\ud804[\ude8f-\ude9d]|\ud804[\ude9f-\udea9]|\ud804[\udeb0-\udede]|\ud804[\udee0-\udee2]|\ud804[\udef0-\udef9]|𑌂|𑌃|\ud804[\udf05-\udf0c]|𑌏|𑌐|\ud804[\udf13-\udf28]|\ud804[\udf2a-\udf30]|𑌲|𑌳|\ud804[\udf35-\udf39]|\ud804[\udf3d-\udf3f]|\ud804[\udf41-\udf44]|𑍇|𑍈|\ud804[\udf4b-\udf4d]|𑍐|𑍗|\ud804[\udf5d-\udf63]|\ud805[\udc80-\udcb2]|𑒹|\ud805[\udcbb-\udcbe]|𑓁|\ud805[\udcc4-\udcc7]|\ud805[\udcd0-\udcd9]|\ud805[\udd80-\uddb1]|\ud805[\uddb8-\uddbb]|𑖾|\ud805[\uddc1-\udddb]|\ud805[\ude00-\ude32]|𑘻|𑘼|𑘾|\ud805[\ude41-\ude44]|\ud805[\ude50-\ude59]|\ud805[\ude80-\udeaa]|𑚬|𑚮|𑚯|𑚶|\ud805[\udec0-\udec9]|\ud805[\udf00-\udf19]|𑜠|𑜡|𑜦|\ud805[\udf30-\udf3f]|\ud806[\udca0-\udcf2]|𑣿|\ud806[\udec0-\udef8]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e]|\ud809[\udc70-\udc74]|\ud809[\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38]|\ud81a[\ude40-\ude5e]|\ud81a[\ude60-\ude69]|𖩮|𖩯|\ud81a[\uded0-\udeed]|𖫵|\ud81a[\udf00-\udf2f]|\ud81a[\udf37-\udf45]|\ud81a[\udf50-\udf59]|\ud81a[\udf5b-\udf61]|\ud81a[\udf63-\udf77]|\ud81a[\udf7d-\udf8f]|\ud81b[\udf00-\udf44]|\ud81b[\udf50-\udf7e]|\ud81b[\udf93-\udf9f]|𛀀|𛀁|\ud82f[\udc00-\udc6a]|\ud82f[\udc70-\udc7c]|\ud82f[\udc80-\udc88]|\ud82f[\udc90-\udc99]|𛲜|𛲟|\ud834[\udc00-\udcf5]|\ud834[\udd00-\udd26]|\ud834[\udd29-\udd66]|\ud834[\udd6a-\udd72]|𝆃|𝆄|\ud834[\udd8c-\udda9]|\ud834[\uddae-\udde8]|\ud834[\udf60-\udf71]|\ud835[\udc00-\udc54]|\ud835[\udc56-\udc9c]|𝒞|𝒟|𝒢|𝒥|𝒦|\ud835[\udca9-\udcac]|\ud835[\udcae-\udcb9]|𝒻|\ud835[\udcbd-\udcc3]|\ud835[\udcc5-\udd05]|\ud835[\udd07-\udd0a]|\ud835[\udd0d-\udd14]|\ud835[\udd16-\udd1c]|\ud835[\udd1e-\udd39]|\ud835[\udd3b-\udd3e]|\ud835[\udd40-\udd44]|𝕆|\ud835[\udd4a-\udd50]|\ud835[\udd52-\udea5]|\ud835[\udea8-\udeda]|\ud835[\udedc-\udf14]|\ud835[\udf16-\udf4e]|\ud835[\udf50-\udf88]|\ud835[\udf8a-\udfc2]|\ud835[\udfc4-\udfcb]|\ud836[\udc00-\uddff]|\ud836[\ude37-\ude3a]|\ud836[\ude6d-\ude74]|\ud836[\ude76-\ude83]|\ud836[\ude85-\ude8b]|\ud83c[\udd10-\udd2e]|\ud83c[\udd30-\udd69]|\ud83c[\udd70-\udd9a]|\ud83c[\udde6-\ude02]|\ud83c[\ude10-\ude3a]|\ud83c[\ude40-\ude48]|🉐|🉑|[\ud840-\ud868][\udc00-\udfff]|\ud869[\udc00-\uded6]|\ud869[\udf00-\udfff]|[\ud86a-\ud86c][\udc00-\udfff]|\ud86d[\udc00-\udf34]|\ud86d[\udf40-\udfff]|\ud86e[\udc00-\udc1d]|\ud86e[\udc20-\udfff]|[\ud86f-\ud872][\udc00-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]|[\udb80-\udbbe][\udc00-\udfff]|\udbbf[\udc00-\udffd]|[\udbc0-\udbfe][\udc00-\udfff]|\udbff[\udc00-\udffd])|([֐־׀׃׆׈-׿߀-ߪߴߵߺ-ࠕࠚࠤࠨ࠮-ࡘ࡜-࢟‏יִײַ-ﬨשׁ-ﭏ؈؋؍؛-ي٭-ٯٱ-ەۥۦۮۯۺ-ܐܒ-ܯ݋-ޥޱ-޿ࢠ-࣢ﭐ-ﴽ﵀-﷏ﷰ-﷼﷾﷿ﹰ-﻾]|\ud802[\udc00-\udd1e]|\ud802[\udd20-\ude00]|𐨄|\ud802[\ude07-\ude0b]|\ud802[\ude10-\ude37]|\ud802[\ude3b-\ude3e]|\ud802[\ude40-\udee4]|\ud802[\udee7-\udf38]|\ud802[\udf40-\udfff]|\ud803[\udc00-\ude5f]|\ud803[\ude7f-\udfff]|\ud83a[\udc00-\udccf]|\ud83a[\udcd7-\udfff]|\ud83b[\udc00-\uddff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\ude00-\udeef]|\ud83b[\udef2-\udeff]))"),e.extend(e.i18n.parser.emitter,{bidi:function(e){var n,o=(n=e[0].match(t))?void 0===n[2]?"ltr":"rtl":null;return"ltr"===o?"‪"+e[0]+"‬":"rtl"===o?"‫"+e[0]+"‬":e[0]}})}(jQuery)},41669:e=>{"use strict";e.exports=jQuery},46905:()=>{!function(e){"use strict";var t=function(){this.language=e.i18n.languages[String.locale]||e.i18n.languages.default};t.prototype={constructor:t,emit:function(t,n){var o,i,a,s=this;switch(typeof t){case"string":case"number":o=t;break;case"object":if(i=e.map(t.slice(1),(function(e){return s.emit(e,n)})),a=t[0].toLowerCase(),"function"!=typeof s[a])throw new Error('unknown operation "'+a+'"');o=s[a](i,n);break;case"undefined":o="";break;default:throw new Error("unexpected type in AST: "+typeof t)}return o},concat:function(t){var n="";return e.each(t,(function(e,t){n+=t})),n},replace:function(e,t){var n=parseInt(e[0],10);return n{!function(e){"use strict";var t=function(t){this.options=e.extend({},e.i18n.parser.defaults,t),this.language=e.i18n.languages[String.locale]||e.i18n.languages.default,this.emitter=e.i18n.parser.emitter};t.prototype={constructor:t,simpleParse:function(e,t){return e.replace(/\$(\d+)/g,(function(e,n){var o=parseInt(n,10)-1;return void 0!==t[o]?t[o]:"$"+n}))},parse:function(t,n){return t.indexOf("{{")<0?this.simpleParse(t,n):(this.emitter.language=e.i18n.languages[e.i18n().locale]||e.i18n.languages.default,this.emitter.emit(this.ast(t),n))},ast:function(e){var t,n,o,i,a,s,r,d,l,u,c,f,m,h,g,p,v,w,b,y=0;function k(e){return function(){var t,n;for(t=0;t1?["CONCAT"].concat(e):e[0]}function L(){var e=C([f,n,E]);return null===e?null:[e[0],e[2]]}function T(){var e=C([f,n,p]);return null===e?null:[e[0],e[2]]}function I(){var e=C([m,c,h]);return null===e?null:e[1]}if(t=S("|"),n=S(":"),o=S("\\"),i=x(/^./),a=S("$"),s=x(/^\d+/),r=x(/^[^{}[\]$\\]/),d=x(/^[^{}[\]$\\|]/),k([_,x(/^[^{}[\]$\s]/)]),l=k([_,d]),u=k([_,r]),w=x(/^[ !"$&'()*,./0-9;=?@A-Z^_`a-z~\x80-\xFF+-]+/),b=function(e){return e.toString()},f=function(){var e=w();return null===e?null:b(e)},c=k([function(){var e=C([k([L,T]),$(0,B)]);return null===e?null:e[0].concat(e[1])},function(){var e=C([f,$(0,B)]);return null===e?null:[e[0]].concat(e[1])}]),m=S("{{"),h=S("}}"),g=k([I,E,function(){var e=$(1,u)();return null===e?null:e.join("")}]),p=k([I,E,function(){var e=$(1,l)();return null===e?null:e.join("")}]),null===(v=function(){var e=$(0,g)();return null===e?null:["CONCAT"].concat(e)}())||y!==e.length)throw new Error("Parse error at position "+y.toString()+" in input: "+e);return v}},e.extend(e.i18n.parser,new t)}(jQuery)},51399:()=>{!function(e){"use strict";var t=function(){this.messages={},this.sources={}};t.prototype={load:function(t,n){var o,i,a=null,s=[],r=this;if("string"==typeof t)return e.i18n.log("Loading messages from: "+t),(o=t,i=e.Deferred(),e.getJSON(o).done(i.resolve).fail((function(t,n,a){e.i18n.log("Error in loading messages from "+o+" Exception: "+a),i.resolve()})),i.promise()).done((function(e){r.set(n,e)})).promise();if(n)return r.set(n,t),e.Deferred().resolve();for(a in t)Object.prototype.hasOwnProperty.call(t,a)&&(n=a,s.push(r.load(t[a],n)));return e.when.apply(e,s)},set:function(t,n){this.messages[t]?this.messages[t]=e.extend(this.messages[t],n):this.messages[t]=n},get:function(e,t){return this.messages[e]&&this.messages[e][t]}},e.extend(e.i18n.messageStore,new t)}(jQuery)},52329:()=>{!function(e){"use strict";var t,n,o,i=Array.prototype.slice;(t=function(n){this.options=e.extend({},t.defaults,n),this.parser=this.options.parser,this.locale=this.options.locale,this.messageStore=this.options.messageStore,this.languages={}}).prototype={localize:function(t){var n,o,i,a,s,r;for(i=this.locale,a=0;i;){o=(n=i.split("-")).length;do{if(s=n.slice(0,o).join("-"),r=this.messageStore.get(s,t))return r;o--}while(o);if("en"===i)break;i=e.i18n.fallbacks[this.locale]&&e.i18n.fallbacks[this.locale][a]||this.options.fallbackLocale,e.i18n.log("Trying fallback locale for "+this.locale+": "+i+" ("+t+")"),a++}return""},destroy:function(){e.removeData(document,"i18n")},load:function(t,n){var o,i,a,s={};if(t||n||(t="i18n/"+e.i18n().locale+".json",n=e.i18n().locale),"string"==typeof t&&"json"!==t.split("?")[0].split(".").pop()){for(s[n]=t+"/"+n+".json",o=(e.i18n.fallbacks[n]||[]).concat(this.options.fallbackLocale),i=0;i{!function(e){e.idleTimer=function(t,n,o){o=e.extend({startImmediately:!0,idle:!1,enabled:!0,timeout:3e4,events:"mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove"},o),n=n||document;var i=function(t){"number"==typeof t&&(t=void 0);var a=e.data(t||n,"idleTimerObj");a.idle=!a.idle;var s=+new Date-a.olddate;if(a.olddate=+new Date,a.idle&&s{"use strict";function o(){return!!document.querySelector("body.pretext")}function i(e,t,n,i){var a=window.location.pathname;-1!==a.indexOf("?")&&(a=a.substring(0,a.lastIndexOf("?")));let s=o();var r={lastPageUrl:a,lastPageScrollLocation:Math.round($(window).scrollTop()),completionFlag:e,pageLoad:t,markingComplete:n,markingIncomplete:i,course:eBookConfig.course,isPtxBook:s};$(document).ajaxError((function(e,t,n,o){console.log("Request Failed for "+n.url),console.log(e)})),jQuery.ajax({url:`${eBookConfig.new_server_prefix}/logger/updatelastpage`,contentType:"application/json; charset=utf-8",dataType:"json",data:JSON.stringify(r),method:"POST",async:!0})}n.d(t,{w:()=>p}),n(67375),n(66495),n(52329),n(39161),n(46905),n(23836),n(51399),n(49276),n(35773),n(52754),n(3403),n(83057),$(document).on("runestone:login",(function(){var e;!function(){if(!window.location.href.match(/(\/index.html|toctree.html|genindex.html|navhelp.html|toc.html|assignments.html|Exercises.html)/)){var e=window.location.pathname;-1!==e.indexOf("?")&&(e=e.substring(0,e.lastIndexOf("?")));var t={lastPageUrl:e,isPtxBook:o()};jQuery.ajax({url:`${eBookConfig.new_server_prefix}/logger/getCompletionStatus`,data:t,async:!1}).done((function(e){if("None"!=e){var t,n;1==e.detail[0].completionStatus?(t="buttonConfirmCompletion",n=" Completed. Well Done!"):(t="buttonAskCompletion",n="Mark as Completed");let o=document.querySelector("#scprogresscontainer");o&&o.classList.add("ptx-runestone-container"),$("#scprogresscontainer").append('
    ")}}))}}(),void 0!==(e=$.getUrlVar("lastPosition"))&&($("body").append(''),$("html, body").animate({scrollTop:parseInt(e)},1e3)),function(){if(!window.location.href.match(/(index.html|genindex.html|navhelp.html|toc.html|assignments.html|Exercises.html|toctree.html)/)){var e,t=-$("#navLinkBgRight").outerWidth()-5;$("#completionButton").hasClass("buttonAskCompletion")?e=t+70:$("#completionButton").hasClass("buttonConfirmCompletion")&&(e=0);var n=$("#relations-next").css("right"),o=-(t+35);$("#navLinkBgRight").css("right",t).show();var a=!1;$(window).scroll((function(){$(window).scrollTop()+$(window).height()==$(document).height()?($("#navLinkBgRight").animate({right:e},200),$("#navLinkBgLeft").animate({left:"0px"},200),$("#completionButton").hasClass("buttonConfirmCompletion")&&$("#relations-next").animate({right:o},200),a=!0):a&&($("#navLinkBgRight").animate({right:t},200),$("#navLinkBgLeft").animate({left:"-65px"},200),$("#relations-next").animate({right:n}),a=!1)}));var s=0;i(s=$("#completionButton").hasClass("buttonAskCompletion")?0:1,!0,!1,!1),$("#completionButton").on("click",(function(){var a=!1,r=!1;$(this).hasClass("buttonAskCompletion")?($(this).removeClass("buttonAskCompletion").addClass("buttonConfirmCompletion").html(" Completed. Well Done!"),$("#navLinkBgRight").animate({right:0}),$("#relations-next").animate({right:o}),e=0,s=1,a=!0):$(this).hasClass("buttonConfirmCompletion")&&($(this).removeClass("buttonConfirmCompletion").addClass("buttonAskCompletion").html("Mark as Completed"),e=t+70,$("#navLinkBgRight").animate({right:e}),$("#relations-next").animate({right:n}),s=0,r=!0),i(s,!1,a,r)}))}}(),function(){if(-1!=window.location.href.toLowerCase().indexOf("toc.html")||-1!=window.location.href.toLowerCase().indexOf("index.html")||-1!=window.location.href.toLowerCase().indexOf("frontmatter")){o()||jQuery.get(`${eBookConfig.new_server_prefix}/logger/getAllCompletionStatus`,(function(e){var t;if("None"!=e){t=e.detail;var n=$("#main-content div li a");$.each(t,(function(e,t){for(var o=0;o- Completed this topic on '+t.endDate+"").children().first().hover((function(){$(this).next(".infoTextCompleted").show()}),(function(){$(this).next(".infoTextCompleted").hide()})):0==t.completionStatus&&$(n[o].parentElement).addClass("active").append('Last read this topic on '+t.endDate+"").children().first().hover((function(){$(this).next(".infoTextActive").show()}),(function(){$(this).next(".infoTextActive").hide()})))}))}}));var e={course:eBookConfig.course};jQuery.get(`${eBookConfig.new_server_prefix}/logger/getlastpage`,e,(function(e){var t;"None"!=e&&null!=(t=e.detail).lastPageChapter&&$("#continue-reading").show().html('
    You were Last Reading: '+t.lastPageChapter+(t.lastPageSubchapter?" > "+t.lastPageSubchapter:"")+' Continue Reading
    ')}))}}()})),$.extend({getUrlVars:function(){for(var e,t=[],n=window.location.search.slice(window.location.search.indexOf("?")+1).split("&"),o=0;o{t.addEventListener("click",(function(){let n=t.getAttribute("data-knowl");e.logBookEvent({event:"knowl",act:"click",div_id:n})}))})),document.querySelectorAll("details.born-hidden-knowl").forEach((t=>{t.addEventListener("toggle",(function(){if(t.open){let n=t.id;e.logBookEvent({event:"knowl",act:"open",div_id:n})}}))})),document.querySelectorAll(".sagecell_evalButton").forEach((t=>{t.addEventListener("click",(function(){let n=t.closest(".ptx-sagecell"),o=n?n.querySelector(".sagecell_input"):null,i=(o&&o.textContent,n?n.id:null);i?e.logBookEvent({event:"sage",act:"run",div_id:i}):console.warn("Could not find container or div_id for sagecell button")}))})),"undefined"==typeof eBookConfig||eBookConfig.isInstructor||document.querySelectorAll(".commentary").forEach((e=>{e.style.display="none"}))}();let e=document.getElementById("primary-navbar-sticky-wrapper");e&&(e.style.overflow="visible")})),n(19695);var s=n(98098);class r extends a.A{constructor(){super(),this.initSplice()}initSplice(){window.addEventListener("message",(async e=>{var t,n,o=this.sendingIframe(e);if(console.log(`SpliceWrapper: received message subject: ${e.data.subject} from iframe: ${o?o.id:"unknown"}`),"SPLICE.reportScoreAndState"==e.data.subject)this.handleScoreAndState(e,o);else if("SPLICE.sendEvent"==e.data.subject)this.handleSpliceEvent(e,o);else if("SPLICE.getState"==e.data.subject)await this.handleGetState(e,o);else if("https://www.myopenmath.com"===e.origin&&"string"==typeof e.data&&-1!=e.data.indexOf("lti.ext.imathas.result")){let o=JSON.parse(e.data),i=(t=o.jwt.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),n=decodeURIComponent(window.atob(t).split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join("")),JSON.parse(n));console.log("Result received from frame "+o.frame_id+" with score "+i.score)}}))}getUniqueID(e,t){if(t){let e=t.closest("[data-component]");if(e)return e.id}let n=e.data.activity_id;return n||(t?n=t.src:(n="unknown",console.error("Could not find iframe that sent the SPLICE event"))),n}handleScoreAndState(e,t){console.log("Got SPLICE.reportScoreAndState"),console.log(e.data.activity_id),console.log(e.data.score),console.log(e.data.state);let n=this.getUniqueID(e,t);this.logBookEvent({event:e.data.subject,div_id:n,act:`score: ${e.data.score}`,score:e.data.score,percent:e.data.score,correct:1==e.data.score,answer:JSON.stringify(e.data.state)})}sendingIframe(e){for(const t of document.getElementsByTagName("iframe"))if(t.contentWindow===e.source)return t}async getSavedState(e){try{const t=await fetch("/ns/assessment/results",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({div_id:e,course:eBookConfig.course,event:"SPLICE.getState"})});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);return await t.json()}catch(e){return console.error("Error fetching SPLICE state:",e),null}}async handleGetState(e,t){console.log("Got SPLICE.getState"),console.log(e.data.activity_id),console.log(e.data.state);let n=this.getUniqueID(e,t),o=(await this.getSavedState(n)).detail.answer;e.source.postMessage({message_id:e.data.message_id,subject:"SPLICE.getState.response",state:o},"*")}handleSpliceEvent(e,t){console.log("Got SPLICE.sendEvent"),console.log(e.data.activity_id),console.log(e.data.name);let n=this.getUniqueID(e,t);this.logBookEvent({event:e.data.subject,div_id:n,act:e.data.name||"unknown"})}checkLocalStorage(){}setLocalStorage(){}restoreAnswers(){}disableInteraction(){}}const d={activecode:()=>Promise.all([n.e(249),n.e(296),n.e(625),n.e(764),n.e(877)]).then(n.bind(n,73565)),ble:()=>n.e(817).then(n.bind(n,29817)),clickablearea:()=>Promise.all([n.e(529),n.e(198)]).then(n.bind(n,58529)),codelens:()=>Promise.all([n.e(764),n.e(412)]).then(n.bind(n,76412)),datafile:()=>n.e(580).then(n.bind(n,33580)),dragndrop:()=>Promise.all([n.e(759),n.e(621)]).then(n.bind(n,56759)),fillintheblank:()=>Promise.all([n.e(466),n.e(294)]).then(n.bind(n,64466)),groupsub:()=>Promise.all([n.e(28),n.e(616)]).then(n.bind(n,24616)),khanex:()=>n.e(340).then(n.bind(n,28340)),lp_build:()=>Promise.all([n.e(296),n.e(576)]).then(n.bind(n,77576)),matching:()=>Promise.all([n.e(566),n.e(737)]).then(n.bind(n,14566)),multiplechoice:()=>Promise.all([n.e(919),n.e(350)]).then(n.bind(n,9919)),hparsons:()=>Promise.all([n.e(249),n.e(669),n.e(486)]).then(n.bind(n,71182)),parsons:()=>n.e(39).then(n.bind(n,52420)),poll:()=>n.e(168).then(n.bind(n,11168)),quizly:()=>n.e(128).then(n.bind(n,34128)),reveal:()=>n.e(460).then(n.bind(n,67460)),selectquestion:()=>Promise.all([n.e(662),n.e(380)]).then(n.bind(n,10662)),shortanswer:()=>Promise.all([n.e(819),n.e(850)]).then(n.bind(n,48819)),showeval:()=>n.e(824).then(n.bind(n,8824)),simple_sensor:()=>n.e(126).then(n.bind(n,50126)),spreadsheet:()=>Promise.all([n.e(131),n.e(186)]).then(n.bind(n,97186)),tabbedStuff:()=>n.e(442).then(n.bind(n,76442)),timedAssessment:()=>Promise.all([n.e(249),n.e(296),n.e(625),n.e(764),n.e(877),n.e(466),n.e(759),n.e(919),n.e(566),n.e(662),n.e(529),n.e(819),n.e(420),n.e(268)]).then(n.bind(n,46424)),wavedrom:()=>Promise.all([n.e(770),n.e(640)]).then(n.bind(n,45640)),webwork:()=>n.e(680).then(n.bind(n,84680)),youtube:()=>n.e(915).then(n.bind(n,86915)),doenet:()=>Promise.resolve()},l={},u=10,c=[];let f=0;async function m(){if(0===c.length)return;if(Date.now()-fe.component_name)));const t=e.map((async e=>{try{return await d[e.component_name](),console.log(`Runestone component ${e.component_name} has been loaded`),e}catch(t){e.reject(t)}})),n=await Promise.all(t);try{n.forEach((function(e){e&&e.resolve()}))}catch(e){console.error(e)}}let h=new Promise((e=>$(document).on("runestone:pre-login-complete",e)));function g(){const e=new Set($("[data-component]").map(((e,t)=>$(t).attr("data-component"))).get());document.querySelector(".webwork-button")&&e.add("webwork");const t=[...e].map((e=>{let t;console.log(`Loading Runestone component: ${e}`);try{t=(d[e]||(()=>Promise.resolve()))()}catch(t){console.error(`Error loading ${e}:`,t)}return t.error=t=>console.error(`Error in ${e}:`,t),t}));Promise.all([h,...t]).then((function(){document.body.dataset.reactInUse||document.dispatchEvent(new CustomEvent("runestone:login-complete"))}))}async function p(e){if(l[e])return l[e];console.log(`Runestone component ${e} is being queued for import`);const t=function(e){let t=null,n=null;const o=new Promise(((e,o)=>{t=e,n=o})),i={component_name:e,resolve:t,reject:n};return c.push(i),window.setTimeout(m,u+1),o}(e);return l[e]=t,t}h.then((()=>{console.log("Runestone pre-login complete")})),$(document).ready(g);const v=document.currentScript.src;n.p=v.substring(0,v.lastIndexOf("/")+1),new r;const w={};w.runestone_import=p,w.runestone_auto_import=g,w.getSwitch=function(){const e=document.querySelector('.theme-switch input[type="checkbox"]'),t=localStorage.getItem("theme")?localStorage.getItem("theme"):null;t&&(document.documentElement.setAttribute("data-theme",t),"dark"===t&&(e.checked=!0))},w.switchTheme=function(){1==document.getElementById("checkbox").checked?(document.documentElement.setAttribute("data-theme","dark"),localStorage.setItem("theme","dark")):(document.documentElement.setAttribute("data-theme","light"),localStorage.setItem("theme","light"))},w.popupScratchAC=async function(){if(await p("activecode"),!eBookConfig.scratchDiv){window.ACFactory.createScratchActivecode();let e=eBookConfig.scratchDiv;window.componentMap[e]=ACFactory.createActiveCode($(`#${e}`)[0],eBookConfig.acDefaultLanguage),eBookConfig.isLoggedIn&&window.componentMap[e].enableSaveLoad()}setTimeout((()=>{window.ACFactory.toggleScratchActivecode()}),100)},w.renderOneComponent=s.yT,window.componentMap={},window.runestoneComponents=w},78673:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var o=n(83057),i=["parsonsMove","showeval","video","poll","view_toggle","dashboard","selectquestion","codelens","peer","shortanswer"];class a{constructor(e){this.component_ready_promise=new Promise((e=>this._component_ready_resolve_fn=e)),this.optional=!1,void 0===window.allComponents&&(window.allComponents=[]),window.allComponents.push(this),e&&(this.sid=e.sid,this.graderactive=e.graderactive,this.showfeedback=!0,e.timed&&(this.isTimed=!0),e.enforceDeadline&&(this.deadline=e.deadline),this.optional=this.parseBooleanAttribute(e.orig,"data-optional"),e.selector_id&&(this.selector_id=e.selector_id),void 0!==e.assessmentTaken?this.assessmentTaken=e.assessmentTaken:this.assessmentTaken=!0,void 0!==e.timedWrapper?this.timedWrapper=e.timedWrapper:location.href.indexOf("doAssignment")>=0?this.timedWrapper=$("h1#assignment_name").text():this.timedWrapper=null,$(e.orig).data("question_label")&&(this.question_label=$(e.orig).data("question_label")),this.is_toggle=e.is_toggle,this.is_select=e.is_select),this.mjelements=[];let t=this;if(this.mjReady=new Promise((function(e,n){t.mjresolver=e})),this.aQueue=new r,e&&void 0!==e.preamble){this.preamble=e.preamble;let t=document.createElement("div");t.classList.add("hidden-content"),t.classList.add("process-math"),t.innerHTML="\\("+this.preamble+"\\)",e.orig.appendChild(t),t.id="ltx_preamble",t.style.display="none",this.aQueue.preamble=t}this.jsonHeaders=new Headers({"Content-type":"application/json; charset=utf-8",Accept:"application/json"})}parseBooleanAttribute(e,t){const n=e.getAttribute(t);if(null===n)return!1;const o=n.toLowerCase();return"false"!==o&&"no"!==o}async logBookEvent(e){if(this.graderactive)return;let t;if(e.course_name=eBookConfig.course,e.clientLoginStatus=eBookConfig.isLoggedIn,e.timezoneoffset=(new Date).getTimezoneOffset()/60,this.selector_id&&(e.selector_id=this.selector_id),"number"==typeof this.percent&&(e.percent=this.percent),window.assignmentId&&(e.assignment_id=window.assignmentId),eBookConfig.isLoggedIn&&eBookConfig.useRunestoneServices&&eBookConfig.logLevel>0&&(t=this.postLogMessage(e)),!this.isTimed||eBookConfig.debug){let t=eBookConfig.isLoggedIn?"Save":"Not";console.log(`${t} logging event `+JSON.stringify(e))}return this.selector_id&&(e.div_id=this.selector_id.replace("-toggleSelectedQuestion",""),e.event="selectquestion",e.act="interaction",this.postLogMessage(e)),"function"==typeof o.X.updateProgress&&"edit"!=e.act&&0==this.optional&&o.X.updateProgress(e.div_id),-1===i.indexOf(e.event)&&this.decorateStatus(),t}async postLogMessage(e){var t;let n=new Request(`${eBookConfig.new_server_prefix}/logger/bookevent`,{method:"POST",headers:this.jsonHeaders,body:JSON.stringify(e)});try{var o=await fetch(n);if(!o.ok){if(422===o.status)throw t=await o.json(),console.log(JSON.stringify(t.detail,null,4)),new Error("Unprocessable Request");if(401==o.status)throw t=await o.json(),console.log(`Missing authentication token ${t.detail}`),new Error("Missing authentication token");throw new Error(`Failed to save the log entry\n Status: ${o.status}`)}let e=(t=await o.json()).detail,i=null;if(this.selector_id){let e=this.selector_id.replace("-toggleSelectedQuestion","");i=document.getElementById(`${e}_score`)}else i=document.getElementById(`${this.divid}_score`);i&&!this.isTimed&&e.score&&this.updateScores(i,e)}catch(e){let n="none";t&&t.detail&&(n=t.detail),eBookConfig.useRunestoneServices&&alert(`Error: Your action was not saved!\n The error was ${e}\n Status Code: ${o.status}\n Detail: ${JSON.stringify(n,null,4)}.\n Please report this error!`),console.log(`Error: ${e} Detail: ${n} Status Code: ${o.status}`)}return t}updateScores(e,t){if(!t.assigned||null===t.score)return void(document.getElementById(`${this.divid}_message`).innerHTML="Score not updated. Submissions are closed.");let n=e.getElementsByClassName("qscore")[0];n&&(n.innerHTML=t.score.toFixed(1));let o=document.getElementsByClassName("qscore"),i=document.getElementsByClassName("qmaxscore"),a=0,s=0;for(let e=0;e0){let n=new Request(`${eBookConfig.new_server_prefix}/logger/runlog`,{method:"POST",headers:this.jsonHeaders,body:JSON.stringify(e)}),o=await fetch(n);o.ok?t=await o.json():(t=await o.json(),eBookConfig.useRunestoneServices?alert(`Failed to save your code\n Status is ${o.status}\n Detail: ${JSON.stringify(t.detail,null,4)}`):console.log(`Did not save the code.\n Status: ${o.status}\n Detail: ${JSON.stringify(t.detail,null,4)}`))}return this.isTimed&&!eBookConfig.debug||console.log("running "+JSON.stringify(e)),"function"==typeof o.X.updateProgress&&0==this.optional&&o.X.updateProgress(e.div_id),t}}async checkServer(e,t=!1){let n=this;if(this.checkServerComplete=new Promise((function(e,t){n.csresolver=e})),eBookConfig.isLoggedIn&&(this.useRunestoneServices||this.graderactive)){let t={};if(t.div_id=this.divid,t.course=eBookConfig.course,t.event=e,this.graderactive&&this.deadline&&(t.deadline=this.deadline,t.rawdeadline=this.rawdeadline,t.tzoff=this.tzoff),this.sid&&(t.sid=this.sid),t.div_id&&t.course&&t.event||console.log(`A required field is missing data ${t.div_id}:${t.course}:${t.event}`),eBookConfig.practice_mode||eBookConfig.peer||!this.assessmentTaken)this.loadData({}),console.log("resolving checkServer no answer given"),this.csresolver("not taken");else{let e=new Request(`${eBookConfig.new_server_prefix}/assessment/results`,{method:"POST",body:JSON.stringify(t),headers:this.jsonHeaders});try{let n=await fetch(e);console.log(`Response from server: ${n.status}`),n.ok?(t=await n.json(),t=t.detail,console.log(`Data from server: ${JSON.stringify(t)} calling repopulateFromStorage`),this.repopulateFromStorage(t),this.attempted=!0,void 0!==t.correct?this.correct=t.correct:this.correct=null,console.log("resolving checkServer with server data"),this.csresolver("server")):(console.log(`HTTP Error getting results: ${n.statusText}`),this.checkLocalStorage(),console.log("resolving checkServer with local data"),this.csresolver("local"))}catch(e){console.log(`Error getting results: ${e}`);try{this.checkLocalStorage()}catch(e){console.log(e)}}}}else this.checkLocalStorage(),console.log("resolving checkServer with local data"),this.csresolver("local");t&&this.indicate_component_ready()}indicate_component_ready(){this.containerDiv.classList.add("runestone-component-ready"),this._component_ready_resolve_fn()}loadData(e){return null}repopulateFromStorage(e){null!==e&&"no data"!==e&&this.shouldUseServer(e)?(this.restoreAnswers(e),this.setLocalStorage(e)):this.checkLocalStorage(),this.decorateStatus()}shouldUseServer(e){if("T"===e.correct||!0===e.correct||0===localStorage.length||!0===this.graderactive||this.isTimed)return!0;let t,n=localStorage.getItem(this.localStorageKey());if(null===n)return!0;try{t=JSON.parse(n)}catch(e){return console.log(e.message),localStorage.removeItem(this.localStorageKey()),!0}if(e.answer==t.answer)return!0;let o=new Date(t.timestamp);return new Date(e.timestamp)>=o}localStorageKey(){return eBookConfig.email+":"+eBookConfig.course+":"+this.divid+"-given"}addCaption(e){if(!this.isTimed){var t=document.createElement("p");this.question_label?(this.caption=eBookConfig.useRunestoneServices?`Activity: ${this.question_label} ${this.caption} (${this.divid})`:`Activity: ${this.question_label} ${this.caption}`,$(t).html(this.caption),$(t).addClass(`${e}_caption`)):($(t).html(eBookConfig.useRunestoneServices?this.caption+" ("+this.divid+")":this.caption),$(t).addClass(`${e}_caption`),$(t).addClass(`${e}_caption_text`)),this.capDiv=t,this.containerDiv.appendChild(t)}}hasUserActivity(){return this.isAnswered}checkCurrentAnswer(){console.log("Each component should provide an implementation of checkCurrentAnswer")}async logCurrentAnswer(){console.log("Each component should provide an implementation of logCurrentAnswer")}renderFeedback(){console.log("Each component should provide an implementation of renderFeedback")}disableInteraction(){console.log("Each component should provide an implementation of disableInteraction")}toString(){return`${this.constructor.name}: ${this.divid}`}queueMathJax(e){return"undefined"==typeof MathJax?(console.log("Error -- MathJax is not loaded"),Promise.resolve(null)):MathJax.typesetPromise?void 0!==window.runestoneMathReady?window.runestoneMathReady.then((()=>this.mjresolver(this.aQueue.enqueue(e)))):this.mjresolver(this.aQueue.enqueue(e)):(console.log(`Waiting on MathJax!! ${MathJax.typesetPromise}`),setTimeout((()=>this.queueMathJax(e)),200),console.log(`Returning mjready promise: ${this.mjReady}`),this.mjReady)}decorateStatus(){if(this.isTimed||eBookConfig.peer)return;let e=$(this.containerDiv).closest("div.runestone")[0];e&&(e.classList.remove("notAnswered"),e.classList.remove("isInCorrect"),e.classList.remove("isCorrect"),this.correct?e.classList.add("isCorrect"):null===this.correct||void 0===this.correct?e.classList.add("notAnswered"):e.classList.add("isInCorrect"))}}class s{constructor(){this._items=[]}enqueue(e){this._items.push(e)}dequeue(){return this._items.shift()}get size(){return this._items.length}}class r extends s{constructor(){super(),this._pendingPromise=!1}enqueue(e){return new Promise(((t,n)=>{super.enqueue({component:e,resolve:t,reject:n}),this.dequeue()}))}async dequeue(){if(this._pendingPromise)return!1;let e=super.dequeue();if(!e)return!1;let t=this;try{this._pendingPromise=!0;let n=await window.runestoneMathReady.then((async function(){if(console.log(`MathJax Ready -- dequeing a typesetting run for ${e.component.id} ${t.preamble?.innerHTML}`),t.preamble){await MathJax.typesetPromise([t.preamble]);let n=document.createElement("div");return n.innerHTML=t.preamble.innerHTML,e.component.insertAdjacentElement("afterbegin",n),console.log(`MathJax typeset the preamble for ${e.component.id}`),await MathJax.typesetPromise([e.component])}return await MathJax.typesetPromise([e.component])}));this._pendingPromise=!1,e.resolve(n)}catch(t){this._pendingPromise=!1,e.reject(t)}finally{this.dequeue()}return!0}}window.RunestoneBase=a},83057:(e,t,n)=>{"use strict";n.d(t,{X:()=>i,u:()=>a});class o{constructor(e){if(this.possible=0,this.total=1,e&&"assignment_spec"in e&&(this.assignment_spec=e.assignment_spec,delete e.assignment_spec),e&&Object.keys(e).length>0)this.activities=e;else{let e={page:0};document.querySelectorAll(".runestone").forEach((function(t){e[t.firstElementChild.id]=0})),this.activities=e}if(this.calculateProgress(),window.location.pathname.match(/.*\/(index.html|toctree.html|Exercises.html|search.html)$/i)){const e=document.getElementById("scprogresscontainer");e&&(e.style.display="none")}this.renderProgress()}calculateProgress(){for(let e in this.activities)void 0!==e&&(this.possible++,this.activities[e]>0&&this.total++)}renderProgress(){let e=0;const t=document.getElementById("scprogresstotal");t&&(t.textContent=this.total);const n=document.getElementById("scprogressposs");n&&(n.textContent=this.possible);try{e=100*this.total/this.possible}catch(t){e=0}let o=document.getElementById("subchapterprogress");if(o&&"PROGRESS"!==o.tagName){const t=document.createElement("progress");t.id="subchapterprogress",t.max=100,t.value=e,t.className=o.className,o.replaceWith(t),o=t}else o&&(o.max=100,o.value=e);if(this.assignment_spec&&this.total-1>=(this.assignment_spec.activities_required||0)&&this.sendCompletedReadingScore().then((()=>{console.log("Reading score sent for page"),setTimeout((()=>{let e=document.getElementById("completionButton");e&&"mark as completed"===e.textContent.toLowerCase()&&e.click()}),500)})),!eBookConfig.isLoggedIn){const e=document.getElementById("subchapterprogress");e&&e.classList.add("loggedout")}}updateProgress(e){if(this.activities[e]++,1===this.activities[e]){this.total++;let e=100*this.total/this.possible;const t=document.getElementById("scprogresstotal");t&&(t.textContent=this.total);const n=document.getElementById("scprogressposs");n&&(n.textContent=this.possible);let o=document.getElementById("subchapterprogress");if(o&&"PROGRESS"===o.tagName&&(o.value=e),this.assignment_spec&&null!==this.assignment_spec.activities_required&&this.total>=this.assignment_spec.activities_required&&(console.log("Required activities completed"),this.sendCompletedReadingScore().then((()=>{console.log("Reading score sent")}))),100==e&&function(){const e=document.getElementById("completionButton");return e&&e.textContent&&"mark as completed"===e.textContent.toLowerCase()}()){const e=document.getElementById("completionButton");e&&"function"==typeof e.click&&e.click()}}}async sendCompletedReadingScore(){let e=new Headers({"Content-type":"application/json; charset=utf-8",Accept:"application/json"}),t={...this.assignment_spec},n=new Request(`${eBookConfig.new_server_prefix}/logger/update_reading_score`,{method:"POST",body:JSON.stringify(t),headers:e});try{let e=await fetch(n);e.ok||console.error(`Failed to send reading score! ${e.statusText}`),t=await e.json()}catch(e){console.error(`Error sending reading score ${e}`)}}}var i={};function a(e){return"string"==typeof e&&([/\$\$[\s\S]+?\$\$/,/\$[^$\n]+?\$/,/\\\[[\s\S]+?\\\]/,/\\\([\s\S]+?\\\)/].some((t=>t.test(e)))||/\\(frac|sqrt|sum|prod|int|lim|sin|cos|tan|log|ln|alpha|beta|gamma|pi|theta|sigma|Delta|cdot|times|leq|geq|neq)\b/.test(e)||/[a-zA-Z0-9]\s*[\^_]\s*\{?.+?\}?/.test(e))}document.addEventListener("runestone:login",(function(){const e=document.getElementById("profilelink");e&&e.style.removeProperty("display");const t=document.getElementById("passwordlink");t&&t.style.removeProperty("display");const n=document.getElementById("registerlink");n&&(n.style.display="none"),document.querySelectorAll("li.loginout").forEach((e=>{e.innerHTML='Log Out'}))})),document.addEventListener("runestone:logout",(function(){if(eBookConfig.useRunestoneServices){console.log("setup navbar for logged out");const e=document.getElementById("registerlink");e&&e.style.removeProperty("display");const t=document.getElementById("profilelink");t&&(t.style.display="none");const n=document.getElementById("passwordlink");n&&(n.style.display="none");const o=document.getElementById("ip_dropdown_link");o&&(o.style.display="none");const i=document.getElementById("inst_peer_link");i&&(i.style.display="none"),document.querySelectorAll("li.loginout").forEach((e=>{e.innerHTML='Login'})),document.querySelectorAll(".footer").forEach((e=>{e.innerHTML="user not logged in"}))}})),document.addEventListener("DOMContentLoaded",(function(){eBookConfig?(async function(){var e;if(eBookConfig.useRunestoneServices){let e=new Headers({"Content-type":"application/json; charset=utf-8",Accept:"application/json"}),n={timezoneoffset:(new Date).getTimezoneOffset()/60,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone},o=function(){const e=`; ${document.cookie}`.split("; RS_info=");if(2===e.length)return e.pop().split(";").shift()}();var t=!1;if(o)try{let e=o.replace(/\\054/g,","),i=JSON.parse(decodeURIComponent(e));i=JSON.parse(decodeURIComponent(i)),i.timezone===n.timezone&&i.tz_offset===n.timezoneoffset&&(console.log("Timezone cookie matches, not sending timezone to server"),t=!0)}catch(e){console.error("Error parsing RS_info cookie, sending timezone to server")}if(!1===t){let t=new Request(`${eBookConfig.new_server_prefix}/logger/set_tz_offset`,{method:"POST",body:JSON.stringify(n),headers:e});try{let e=await fetch(t);e.ok||console.error(`Failed to set timezone! ${e.statusText}`),n=await e.json()}catch(e){console.error(`Error setting timezone ${e}`)}}}if(console.log(`This page served by ${eBookConfig.served_by}`),eBookConfig.isLoggedIn){if(e=`username: ${eBookConfig.username}`,!eBookConfig.isInstructor){const e=document.getElementById("ip_dropdown_link");e&&"function"==typeof e.remove&&e.remove();const t=document.getElementById("inst_peer_link");t&&"function"==typeof t.remove&&t.remove()}document.dispatchEvent(new Event("runestone:login")),function(){let e=localStorage.getItem("currentAssignmentInfo");if(e&&eBookConfig.readings){var t,n,o,i,a,s,r,d,l,u;let m=JSON.parse(e),h=m.id,g=m.name,p=m.readingNames;(o=document.createElement("div")).textContent="Active assignment: ",(i=document.createElement("a")).textContent=g,i.href=`/assignment/student/doAssignment?assignment_id=${h}`,o.append(i),(a=document.createElement("a")).textContent="Exit Assignment",a.href=window.location.pathname,a.addEventListener("click",(function(e){localStorage.removeItem("currentAssignmentInfo")}));let v=window.location.pathname.split("/"),w=v[v.length-2]+"/"+v[v.length-1],b=!1,y=2;document.getElementsByTagName("body")[0].classList.contains("pretext")&&(b=!0,eBookConfig.readings=eBookConfig.readings.map((e=>e.split("/").pop())),w=w.split("/").pop(),y=1);let k=eBookConfig.readings.indexOf(w),C=eBookConfig.readings.length;if(k>0){d=eBookConfig.readings[k-1],(l=v.slice(0,v.length-y)).push(d),u=l.join("/"),s=o.cloneNode(!0);let e=document.createElement("p");e.textContent=`Page ${k+1} of ${C}, `;var c=document.createElement("a");c.href=u,c.textContent=`Back to page ${k} of ${C}: ${p[k-1]}.`,e.append(c),s.append(e)}else if(0==k){s=o.cloneNode(!0);let e=document.createElement("p");e.textContent=`Page 1 of ${C}.`,s.append(e)}else{d=eBookConfig.readings[0],(l=v.slice(0,v.length-y)).push(d),u=l.join("/"),s=o.cloneNode(!0);let e=document.createElement("p");e.textContent="Notice: this page is not part of the assignment. To remove this warning click ",e.append(a),s.append(e)}if(k==eBookConfig.readings.length-1){r=o;let e=document.createElement("p");e.textContent=`Page ${C} of ${C}: ${p[k]}`,r.append(e)}else if(k>=0){d=eBookConfig.readings[k+1],(l=v.slice(0,v.length-y)).push(d),u=l.join("/"),r=o;var f=document.createElement("a");f.href=u,f.textContent=`Continue to page ${k+2} of ${C}: ${p[k+1]}`;let e=document.createElement("p");e.append(f),r.append(e)}else{r=o.cloneNode(!0);let e=document.createElement("p");e.textContent="Notice: this page is not part of the assignment. To remove this warning click ";let t=a.cloneNode(!0);t.addEventListener("click",(function(e){localStorage.removeItem("currentAssignmentInfo")})),e.append(t),r.append(e)}if((t=document.createElement("div")).className="ptx-runestone-container",s.className="runestone assignment-nav top-assignment-nav",t.append(s),(n=document.createElement("div")).className="ptx-runestone-container",r.className="runestone assignment-nav bottom-assignment-nav",n.append(r),b){let e=document.getElementById("ptx-content");e&&e.insertBefore(t,e.firstChild);let o=document.getElementById("scprogresscontainer");return void(o&&(o.style.marginBottom="20px",o.appendChild(n)))}const $=document.getElementById("main-content");$&&r&&($.insertBefore(t,$.firstChild),$.appendChild(n))}}(),-1==window.location.pathname.indexOf("/admin/grading")&&-1==window.location.pathname.indexOf("/peer/")&&function(){let e;function t(){location.href.indexOf("index.html")<0&&(console.log("Idle timer - "+location.pathname),location.href=eBookConfig.app+"/default/user/login?_next="+location.pathname+location.search)}function n(){e&&clearTimeout(e),e=setTimeout(t,9e5)}["mousemove","keydown","scroll","click","touchstart","wheel"].forEach((e=>{window.addEventListener(e,n,{passive:!0})})),n()}()}else{e="Not logged in",document.dispatchEvent(new Event("runestone:logout"));let t=document.getElementById("browsing_warning");t&&(t.innerHTML="");let n=document.getElementById("ad_warning");n&&(n.innerHTML="")}document.querySelectorAll(".loggedinuser").forEach((t=>{t.innerHTML=e})),i=new o(eBookConfig.activities),console.log("triggering runestone:pre-login-complete"),document.dispatchEvent(new Event("runestone:pre-login-complete"))}(),function(){if("undefined"!=typeof showAd&&showAd){let e=Math.floor(2*Math.random())+1,t=document.getElementById(`adcopy_${e}`),n=document.querySelectorAll(".runestone");n.length>0&&(n[Math.floor(Math.random()*n.length)].after(t),t.style.display="block")}}()):"undefined"==typeof eBookConfig&&console.log("eBookConfig is not defined. This page must not be set up for Runestone")})),window.addEventListener("load",(function(){if(document.querySelectorAll(".video-play-overlay").forEach((function(e){e.style.backgroundImage="url('{{pathto('_static/play_overlay_icon.png', 1)}}')"})),document.querySelectorAll(".dropdown input, .dropdown label").forEach((function(e){e.addEventListener("click",(function(e){e.stopPropagation()}))})),location.href.includes("mode=browsing")){let e="?mode=browsing";document.querySelectorAll("a").forEach((t=>{let n="";if(t.href.includes("books/published")&&!t.href.includes("?mode=browsing")){if(t.href.includes("#")){let e=t.href.indexOf("#");n=t.href.substring(e),t.href=t.href.substring(0,e)}t.href=t.href.includes("?")?t.href+e.replace("?","&")+n:t.href+e+n}}))}}))},98098:(e,t,n)=>{"use strict";n.d(t,{$y:()=>a,JK:()=>i,yT:()=>s});var o=n(77394);async function i(e,t,n){if(!e)return void jQuery(`#${t}`).html("

    Sorry, no source is available for preview.

    ");e=e.replace(/..\/_images/g,`${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`),jQuery(`#${t}`).html(e),void 0===window.componentMap&&(window.componentMap={});let i=$($(`#${t} [data-component]`)[0]).data("component");await(0,o.w)(i);let a={};if(a.orig=jQuery(`#${t} [data-component]`)[0],a.orig&&(a.lang=$(a.orig).data("lang"),a.useRunestoneServices=!0,a.graderactive=!1,a.python3=!0,void 0!==n))for(let e in n)a[e]=n[e];if("undefined"==typeof component_factory)alert("Error: Missing the component factory!");else if(window.component_factory[i]||jQuery(`#${t}`).html()){let e=window.component_factory[i](a);"activecode"===i&&(n.multiGrader?window.componentMap[`${n.gradingContainer} ${e.divid}`]=e:window.componentMap[e.divid]=e)}else jQuery(`#${t}`).html(`

    Preview not available for ${i}

    `)}function a(e,t){e=e.replace(/..\/_images/g,`${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`);let n,o,i=$($(e).find("[data-component]")[0]).data("component"),a=$(e).find("[data-component]").first().attr("id");document.getElementById(a)||(n=$("
    ",{css:{display:"none"}}).appendTo("body"),n.html(e));let s={orig:document.getElementById(a),timed:!0};if(void 0!==t)for(let e in t)s[e]=t[e];i in window.component_factory&&(o=window.component_factory[i](s));let r={};return r.question=o,r}async function s(e){let t=e.querySelector("[data-component]");if(null==t)return void console.log("Render was called for a component, but now [data-component] attribute is present. This may mean the component has already been rendered.");let n=t.dataset.component;if(await(0,o.w)(n),0==$(this).closest("[data-component=timedAssessment]").length)try{let e=t.id;window.componentMap[e]=window.component_factory[n]({orig:t,useRunestoneServices:eBookConfig.useRunestoneServices})}catch(e){console.log(`Error rendering ${n} Problem ${this.id}\n Details: ${e}`)}}}},e=>{e.O(0,[723],(()=>e(e.s=77394))),e.O()}]); -//# sourceMappingURL=prefix-runestone.1c010553c35c544c.bundle.js.map \ No newline at end of file +/*! For license information please see prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt */ +(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[222],{3403:()=>{!function(e){var t=function(t,n){var o;(o=function(t,i){i=i||0,t.find("> li > a.internal, > ul, > li > ul").each((function(t,a){var s=e(a),r=a.tagName.toLowerCase(),d=s.children("li"),l=e(s.parent("li"),s.parent().parent("li"));"ul"===r&&i>=n&&d.length>0&&(l.addClass("dropdown-submenu").children("a").first().attr("tabindex",-1),s.addClass("dropdown-menu")),o(s,i+1)}))})(t)};patchTables=function(){e("table.docutils").removeClass("docutils").addClass("table").attr("border",0)},e((function(){if(e("#navbar.navbar-fixed-top").length>0){var n=e("#navbar").height(),o=function(){scrollBy(0,-n-10)};location.hash&&o(),window.addEventListener("hashchange",o)}e(".dropdown-menu").each((function(){e(this).find("ul").each((function(t,n){e(n).addClass("unstyled")}))})),e("ul.globaltoc li").length?t(e("ul.globaltoc"),1):e(".globaltoc-container").remove(),t(e("ul.localtoc"),2),e(".dropdown-menu ul").not(".dropdown-menu").each((function(){var t=e(this),n=t.parent(),o=n[0].tagName.toLowerCase(),i=t.children().detach();"ul"===o?t.replaceWith(i):"li"===o&&(n.after(i),t.remove())})),$localLi=e("ul.localtoc li"),$localLi.length>2&&$localLi.first().after('
  • '),e(".dropdown-toggle").dropdown(),patchTables(),e("div.note").addClass("alert").addClass("alert-info"),e("div.warning").addClass("alert").addClass("alert-warning"),e("tt.docutils.literal").not(".xref").each((function(t,n){e(n).parent().hasClass("reference")||e(n).replaceWith((function(){return e("").text(e(this).text())}))}))}))}(window.jQuery)},19695:()=>{var e,t=!1;function n(){t||(function(){let t=$("[data-childcomponent]");t.addClass("runestone"),t.parent().closest("div").not("section").addClass("runestone"),t.parent().closest("div").css("max-width","none"),t.each((function(e){$(this),$(this).find(".ac_code_div, .ac_output").wrapAll("
    ")})),$("section img").wrap('
    '),e=$(".runestone").not(".runestone .runestone"),$("h1").before("
    ")}(),t=!0);let n=$("body"),o="present",a="full-height",s="bottom";n.hasClass(o)?($("section *").not("h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code").removeClass("hidden"),$("#completionButton").removeClass("hidden"),n.removeClass(o),$("."+a).removeClass(a),$("."+s).removeClass(s),localStorage.setItem("presentMode","text"),e.removeClass("hidden"),undefined.disabled=!0):($("section *").not("h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code").addClass("hidden"),$("#completionButton").addClass("hidden"),n.addClass(o),n.addClass(a),$("html").addClass(a),$("section .runestone").addClass(a),$(".ac-caption").addClass(s),localStorage.setItem("presentMode",o),i())}function o(){return active=e.filter(".active")}function i(t){void 0===t&&(t=0);let n=o();e.length&&(n.removeClass("active"),n=$(e[t]).addClass("active"),n.removeClass("hidden"),e.not(e.filter(".active")).addClass("hidden"))}window.nextExercise=function(){let t=o(),n=e.index(t)+1;n=0&&i(n)},$(document).on("runestone:login-complete",(function(){eBookConfig.isInstructor&&($(".navbar-right").prepend(""),$(".mode-select").change(n))}))},23836:()=>{!function(e){"use strict";e.i18n=e.i18n||{},e.extend(e.i18n.fallbacks,{ab:["ru"],ace:["id"],aln:["sq"],als:["gsw","de"],an:["es"],anp:["hi"],arn:["es"],arz:["ar"],av:["ru"],ay:["es"],ba:["ru"],bar:["de"],"bat-smg":["sgs","lt"],bcc:["fa"],"be-x-old":["be-tarask"],bh:["bho"],bjn:["id"],bm:["fr"],bpy:["bn"],bqi:["fa"],bug:["id"],"cbk-zam":["es"],ce:["ru"],crh:["crh-latn"],"crh-cyrl":["ru"],csb:["pl"],cv:["ru"],"de-at":["de"],"de-ch":["de"],"de-formal":["de"],dsb:["de"],dtp:["ms"],egl:["it"],eml:["it"],ff:["fr"],fit:["fi"],"fiu-vro":["vro","et"],frc:["fr"],frp:["fr"],frr:["de"],fur:["it"],gag:["tr"],gan:["gan-hant","zh-hant","zh-hans"],"gan-hans":["zh-hans"],"gan-hant":["zh-hant","zh-hans"],gl:["pt"],glk:["fa"],gn:["es"],gsw:["de"],hif:["hif-latn"],hsb:["de"],ht:["fr"],ii:["zh-cn","zh-hans"],inh:["ru"],iu:["ike-cans"],jut:["da"],jv:["id"],kaa:["kk-latn","kk-cyrl"],kbd:["kbd-cyrl"],khw:["ur"],kiu:["tr"],kk:["kk-cyrl"],"kk-arab":["kk-cyrl"],"kk-latn":["kk-cyrl"],"kk-cn":["kk-arab","kk-cyrl"],"kk-kz":["kk-cyrl"],"kk-tr":["kk-latn","kk-cyrl"],kl:["da"],"ko-kp":["ko"],koi:["ru"],krc:["ru"],ks:["ks-arab"],ksh:["de"],ku:["ku-latn"],"ku-arab":["ckb"],kv:["ru"],lad:["es"],lb:["de"],lbe:["ru"],lez:["ru"],li:["nl"],lij:["it"],liv:["et"],lmo:["it"],ln:["fr"],ltg:["lv"],lzz:["tr"],mai:["hi"],"map-bms":["jv","id"],mg:["fr"],mhr:["ru"],min:["id"],mo:["ro"],mrj:["ru"],mwl:["pt"],myv:["ru"],mzn:["fa"],nah:["es"],nap:["it"],nds:["de"],"nds-nl":["nl"],"nl-informal":["nl"],no:["nb"],os:["ru"],pcd:["fr"],pdc:["de"],pdt:["de"],pfl:["de"],pms:["it"],pt:["pt-br"],"pt-br":["pt"],qu:["es"],qug:["qu","es"],rgn:["it"],rmy:["ro"],"roa-rup":["rup"],rue:["uk","ru"],ruq:["ruq-latn","ro"],"ruq-cyrl":["mk"],"ruq-latn":["ro"],sa:["hi"],sah:["ru"],scn:["it"],sg:["fr"],sgs:["lt"],sli:["de"],sr:["sr-ec"],srn:["nl"],stq:["de"],su:["id"],szl:["pl"],tcy:["kn"],tg:["tg-cyrl"],tt:["tt-cyrl","ru"],"tt-cyrl":["ru"],ty:["fr"],udm:["ru"],ug:["ug-arab"],uk:["ru"],vec:["it"],vep:["et"],vls:["nl"],vmf:["de"],vot:["fi"],vro:["et"],wa:["fr"],wo:["fr"],wuu:["zh-hans"],xal:["ru"],xmf:["ka"],yi:["he"],za:["zh-hans"],zea:["nl"],zh:["zh-hans"],"zh-classical":["lzh"],"zh-cn":["zh-hans"],"zh-hant":["zh-hans"],"zh-hk":["zh-hant","zh-hans"],"zh-min-nan":["nan"],"zh-mo":["zh-hk","zh-hant","zh-hans"],"zh-my":["zh-sg","zh-hans"],"zh-sg":["zh-hans"],"zh-tw":["zh-hant","zh-hans"],"zh-yue":["yue"]})}(jQuery)},35773:()=>{!function(e){"use strict";var t={pluralRules:{ak:{one:"n = 0..1"},am:{one:"i = 0 or n = 1"},ar:{zero:"n = 0",one:"n = 1",two:"n = 2",few:"n % 100 = 3..10",many:"n % 100 = 11..99"},ars:{zero:"n = 0",one:"n = 1",two:"n = 2",few:"n % 100 = 3..10",many:"n % 100 = 11..99"},as:{one:"i = 0 or n = 1"},be:{one:"n % 10 = 1 and n % 100 != 11",few:"n % 10 = 2..4 and n % 100 != 12..14",many:"n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14"},bh:{one:"n = 0..1"},bn:{one:"i = 0 or n = 1"},br:{one:"n % 10 = 1 and n % 100 != 11,71,91",two:"n % 10 = 2 and n % 100 != 12,72,92",few:"n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99",many:"n != 0 and n % 1000000 = 0"},bs:{one:"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"},cs:{one:"i = 1 and v = 0",few:"i = 2..4 and v = 0",many:"v != 0"},cy:{zero:"n = 0",one:"n = 1",two:"n = 2",few:"n = 3",many:"n = 6"},da:{one:"n = 1 or t != 0 and i = 0,1"},dsb:{one:"v = 0 and i % 100 = 1 or f % 100 = 1",two:"v = 0 and i % 100 = 2 or f % 100 = 2",few:"v = 0 and i % 100 = 3..4 or f % 100 = 3..4"},fa:{one:"i = 0 or n = 1"},ff:{one:"i = 0,1"},fil:{one:"v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9"},fr:{one:"i = 0,1"},ga:{one:"n = 1",two:"n = 2",few:"n = 3..6",many:"n = 7..10"},gd:{one:"n = 1,11",two:"n = 2,12",few:"n = 3..10,13..19"},gu:{one:"i = 0 or n = 1"},guw:{one:"n = 0..1"},gv:{one:"v = 0 and i % 10 = 1",two:"v = 0 and i % 10 = 2",few:"v = 0 and i % 100 = 0,20,40,60,80",many:"v != 0"},he:{one:"i = 1 and v = 0",two:"i = 2 and v = 0",many:"v = 0 and n != 0..10 and n % 10 = 0"},hi:{one:"i = 0 or n = 1"},hr:{one:"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"},hsb:{one:"v = 0 and i % 100 = 1 or f % 100 = 1",two:"v = 0 and i % 100 = 2 or f % 100 = 2",few:"v = 0 and i % 100 = 3..4 or f % 100 = 3..4"},hy:{one:"i = 0,1"},is:{one:"t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0"},iu:{one:"n = 1",two:"n = 2"},iw:{one:"i = 1 and v = 0",two:"i = 2 and v = 0",many:"v = 0 and n != 0..10 and n % 10 = 0"},kab:{one:"i = 0,1"},kn:{one:"i = 0 or n = 1"},kw:{one:"n = 1",two:"n = 2"},lag:{zero:"n = 0",one:"i = 0,1 and n != 0"},ln:{one:"n = 0..1"},lt:{one:"n % 10 = 1 and n % 100 != 11..19",few:"n % 10 = 2..9 and n % 100 != 11..19",many:"f != 0"},lv:{zero:"n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19",one:"n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1"},mg:{one:"n = 0..1"},mk:{one:"v = 0 and i % 10 = 1 or f % 10 = 1"},mo:{one:"i = 1 and v = 0",few:"v != 0 or n = 0 or n != 1 and n % 100 = 1..19"},mr:{one:"i = 0 or n = 1"},mt:{one:"n = 1",few:"n = 0 or n % 100 = 2..10",many:"n % 100 = 11..19"},naq:{one:"n = 1",two:"n = 2"},nso:{one:"n = 0..1"},pa:{one:"n = 0..1"},pl:{one:"i = 1 and v = 0",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14",many:"v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14"},prg:{zero:"n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19",one:"n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1"},pt:{one:"i = 0..1"},ro:{one:"i = 1 and v = 0",few:"v != 0 or n = 0 or n != 1 and n % 100 = 1..19"},ru:{one:"v = 0 and i % 10 = 1 and i % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14",many:"v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14"},se:{one:"n = 1",two:"n = 2"},sh:{one:"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"},shi:{one:"i = 0 or n = 1",few:"n = 2..10"},si:{one:"n = 0,1 or i = 0 and f = 1"},sk:{one:"i = 1 and v = 0",few:"i = 2..4 and v = 0",many:"v != 0"},sl:{one:"v = 0 and i % 100 = 1",two:"v = 0 and i % 100 = 2",few:"v = 0 and i % 100 = 3..4 or v != 0"},sma:{one:"n = 1",two:"n = 2"},smi:{one:"n = 1",two:"n = 2"},smj:{one:"n = 1",two:"n = 2"},smn:{one:"n = 1",two:"n = 2"},sms:{one:"n = 1",two:"n = 2"},sr:{one:"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"},ti:{one:"n = 0..1"},tl:{one:"v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9"},tzm:{one:"n = 0..1 or n = 11..99"},uk:{one:"v = 0 and i % 10 = 1 and i % 100 != 11",few:"v = 0 and i % 10 = 2..4 and i % 100 != 12..14",many:"v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14"},wa:{one:"n = 0..1"},zu:{one:"i = 0 or n = 1"}},convertPlural:function(t,n){var o,i,a,s,r=new RegExp("\\d+=","i");if(!n||0===n.length)return"";for(a=0;a{!function(e){"use strict";var t;t=new RegExp("(?:([A-Za-zªµºÀ-ÖØ-öø-ʸʻ-ˁːˑˠ-ˤˮͰ-ͳͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-҂Ҋ-ԯԱ-Ֆՙ-՟ա-և։ः-हऻऽ-ीॉ-ौॎ-ॐक़-ॡ।-ঀংঃঅ-ঌএঐও-নপ-রলশ-হঽ-ীেৈোৌৎৗড়ঢ়য়-ৡ০-ৱ৴-৺ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਾ-ੀਖ਼-ੜਫ਼੦-੯ੲ-ੴઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽ-ીૉોૌૐૠૡ૦-૰ૹଂଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽାୀେୈୋୌୗଡ଼ଢ଼ୟ-ୡ୦-୷ஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹாிுூெ-ைொ-ௌௐௗ௦-௲ఁ-ఃఅ-ఌఎ-ఐఒ-నప-హఽు-ౄౘ-ౚౠౡ౦-౯౿ಂಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ೄೆ-ೈೊೋೕೖೞೠೡ೦-೯ೱೲംഃഅ-ഌഎ-ഐഒ-ഺഽ-ീെ-ൈൊ-ൌൎൗൟ-ൡ൦-൵൹-ൿංඃඅ-ඖක-නඳ-රලව-ෆා-ෑෘ-ෟ෦-෯ෲ-෴ก-ะาำเ-ๆ๏-๛ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆ໐-໙ໜ-ໟༀ-༗༚-༴༶༸༾-ཇཉ-ཬཿ྅ྈ-ྌ྾-࿅࿇-࿌࿎-࿚က-ာေးျြဿ-ၗၚ-ၝၡ-ၰၵ-ႁႃႄႇ-ႌႎ-ႜ႞-ჅჇჍა-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፠-፼ᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙿᚁ-ᚚᚠ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱ᜵᜶ᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳាើ-ៅះៈ។-៚ៜ០-៩᠐-᠙ᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᤣ-ᤦᤩ-ᤫᤰᤱᤳ-ᤸ᥆-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉ᧐-᧚ᨀ-ᨖᨙᨚ᨞-ᩕᩗᩡᩣᩤᩭ-ᩲ᪀-᪉᪐-᪙᪠-᪭ᬄ-ᬳᬵᬻᬽ-ᭁᭃ-ᭋ᭐-᭪᭴-᭼ᮂ-ᮡᮦᮧ᮪ᮮ-ᯥᯧᯪ-ᯬᯮ᯲᯳᯼-ᰫᰴᰵ᰻-᱉ᱍ-᱿᳀-᳇᳓᳡ᳩ-ᳬᳮ-ᳳᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ‎ⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎ⅏Ⅰ-ↈ⌶-⍺⎕⒜-ⓩ⚬⠀-⣿Ⰰ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯ⵰ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〮〯〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎ㆐-ㆺㇰ-㈜㈠-㉏㉠-㉻㉿-㊰㋀-㋋㋐-㋾㌀-㍶㍻-㏝㏠-㏾㐀-䶵一-鿕ꀀ-ꒌꓐ-ꘌꘐ-ꘫꙀ-ꙮꚀ-ꚝꚠ-ꛯ꛲-꛷Ꜣ-ꞇ꞉-ꞭꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠤꠧ꠰-꠷ꡀ-ꡳꢀ-ꣃ꣎-꣙ꣲ-ꣽ꤀-ꤥ꤮-ꥆꥒ꥓꥟-ꥼꦃ-ꦲꦴꦵꦺꦻꦽ-꧍ꧏ-꧙꧞-ꧤꧦ-ꧾꨀ-ꨨꨯꨰꨳꨴꩀ-ꩂꩄ-ꩋꩍ꩐-꩙꩜-ꩻꩽ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫫꫮ-ꫵꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭥꭰ-ꯤꯦꯧꯩ-꯬꯰-꯹가-힣ힰ-ퟆퟋ-ퟻ-舘並-龎ff-stﬓ-ﬗA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b]|\ud800[\udc0d-\udc26]|\ud800[\udc28-\udc3a]|𐀼|𐀽|\ud800[\udc3f-\udc4d]|\ud800[\udc50-\udc5d]|\ud800[\udc80-\udcfa]|𐄀|𐄂|\ud800[\udd07-\udd33]|\ud800[\udd37-\udd3f]|\ud800[\uddd0-\uddfc]|\ud800[\ude80-\ude9c]|\ud800[\udea0-\uded0]|\ud800[\udf00-\udf23]|\ud800[\udf30-\udf4a]|\ud800[\udf50-\udf75]|\ud800[\udf80-\udf9d]|\ud800[\udf9f-\udfc3]|\ud800[\udfc8-\udfd5]|\ud801[\udc00-\udc9d]|\ud801[\udca0-\udca9]|\ud801[\udd00-\udd27]|\ud801[\udd30-\udd63]|𐕯|\ud801[\ude00-\udf36]|\ud801[\udf40-\udf55]|\ud801[\udf60-\udf67]|𑀀|\ud804[\udc02-\udc37]|\ud804[\udc47-\udc4d]|\ud804[\udc66-\udc6f]|\ud804[\udc82-\udcb2]|𑂷|𑂸|\ud804[\udcbb-\udcc1]|\ud804[\udcd0-\udce8]|\ud804[\udcf0-\udcf9]|\ud804[\udd03-\udd26]|𑄬|\ud804[\udd36-\udd43]|\ud804[\udd50-\udd72]|\ud804[\udd74-\udd76]|\ud804[\udd82-\uddb5]|\ud804[\uddbf-\uddc9]|𑇍|\ud804[\uddd0-\udddf]|\ud804[\udde1-\uddf4]|\ud804[\ude00-\ude11]|\ud804[\ude13-\ude2e]|𑈲|𑈳|𑈵|\ud804[\ude38-\ude3d]|\ud804[\ude80-\ude86]|𑊈|\ud804[\ude8a-\ude8d]|\ud804[\ude8f-\ude9d]|\ud804[\ude9f-\udea9]|\ud804[\udeb0-\udede]|\ud804[\udee0-\udee2]|\ud804[\udef0-\udef9]|𑌂|𑌃|\ud804[\udf05-\udf0c]|𑌏|𑌐|\ud804[\udf13-\udf28]|\ud804[\udf2a-\udf30]|𑌲|𑌳|\ud804[\udf35-\udf39]|\ud804[\udf3d-\udf3f]|\ud804[\udf41-\udf44]|𑍇|𑍈|\ud804[\udf4b-\udf4d]|𑍐|𑍗|\ud804[\udf5d-\udf63]|\ud805[\udc80-\udcb2]|𑒹|\ud805[\udcbb-\udcbe]|𑓁|\ud805[\udcc4-\udcc7]|\ud805[\udcd0-\udcd9]|\ud805[\udd80-\uddb1]|\ud805[\uddb8-\uddbb]|𑖾|\ud805[\uddc1-\udddb]|\ud805[\ude00-\ude32]|𑘻|𑘼|𑘾|\ud805[\ude41-\ude44]|\ud805[\ude50-\ude59]|\ud805[\ude80-\udeaa]|𑚬|𑚮|𑚯|𑚶|\ud805[\udec0-\udec9]|\ud805[\udf00-\udf19]|𑜠|𑜡|𑜦|\ud805[\udf30-\udf3f]|\ud806[\udca0-\udcf2]|𑣿|\ud806[\udec0-\udef8]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e]|\ud809[\udc70-\udc74]|\ud809[\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38]|\ud81a[\ude40-\ude5e]|\ud81a[\ude60-\ude69]|𖩮|𖩯|\ud81a[\uded0-\udeed]|𖫵|\ud81a[\udf00-\udf2f]|\ud81a[\udf37-\udf45]|\ud81a[\udf50-\udf59]|\ud81a[\udf5b-\udf61]|\ud81a[\udf63-\udf77]|\ud81a[\udf7d-\udf8f]|\ud81b[\udf00-\udf44]|\ud81b[\udf50-\udf7e]|\ud81b[\udf93-\udf9f]|𛀀|𛀁|\ud82f[\udc00-\udc6a]|\ud82f[\udc70-\udc7c]|\ud82f[\udc80-\udc88]|\ud82f[\udc90-\udc99]|𛲜|𛲟|\ud834[\udc00-\udcf5]|\ud834[\udd00-\udd26]|\ud834[\udd29-\udd66]|\ud834[\udd6a-\udd72]|𝆃|𝆄|\ud834[\udd8c-\udda9]|\ud834[\uddae-\udde8]|\ud834[\udf60-\udf71]|\ud835[\udc00-\udc54]|\ud835[\udc56-\udc9c]|𝒞|𝒟|𝒢|𝒥|𝒦|\ud835[\udca9-\udcac]|\ud835[\udcae-\udcb9]|𝒻|\ud835[\udcbd-\udcc3]|\ud835[\udcc5-\udd05]|\ud835[\udd07-\udd0a]|\ud835[\udd0d-\udd14]|\ud835[\udd16-\udd1c]|\ud835[\udd1e-\udd39]|\ud835[\udd3b-\udd3e]|\ud835[\udd40-\udd44]|𝕆|\ud835[\udd4a-\udd50]|\ud835[\udd52-\udea5]|\ud835[\udea8-\udeda]|\ud835[\udedc-\udf14]|\ud835[\udf16-\udf4e]|\ud835[\udf50-\udf88]|\ud835[\udf8a-\udfc2]|\ud835[\udfc4-\udfcb]|\ud836[\udc00-\uddff]|\ud836[\ude37-\ude3a]|\ud836[\ude6d-\ude74]|\ud836[\ude76-\ude83]|\ud836[\ude85-\ude8b]|\ud83c[\udd10-\udd2e]|\ud83c[\udd30-\udd69]|\ud83c[\udd70-\udd9a]|\ud83c[\udde6-\ude02]|\ud83c[\ude10-\ude3a]|\ud83c[\ude40-\ude48]|🉐|🉑|[\ud840-\ud868][\udc00-\udfff]|\ud869[\udc00-\uded6]|\ud869[\udf00-\udfff]|[\ud86a-\ud86c][\udc00-\udfff]|\ud86d[\udc00-\udf34]|\ud86d[\udf40-\udfff]|\ud86e[\udc00-\udc1d]|\ud86e[\udc20-\udfff]|[\ud86f-\ud872][\udc00-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]|[\udb80-\udbbe][\udc00-\udfff]|\udbbf[\udc00-\udffd]|[\udbc0-\udbfe][\udc00-\udfff]|\udbff[\udc00-\udffd])|([֐־׀׃׆׈-׿߀-ߪߴߵߺ-ࠕࠚࠤࠨ࠮-ࡘ࡜-࢟‏יִײַ-ﬨשׁ-ﭏ؈؋؍؛-ي٭-ٯٱ-ەۥۦۮۯۺ-ܐܒ-ܯ݋-ޥޱ-޿ࢠ-࣢ﭐ-ﴽ﵀-﷏ﷰ-﷼﷾﷿ﹰ-﻾]|\ud802[\udc00-\udd1e]|\ud802[\udd20-\ude00]|𐨄|\ud802[\ude07-\ude0b]|\ud802[\ude10-\ude37]|\ud802[\ude3b-\ude3e]|\ud802[\ude40-\udee4]|\ud802[\udee7-\udf38]|\ud802[\udf40-\udfff]|\ud803[\udc00-\ude5f]|\ud803[\ude7f-\udfff]|\ud83a[\udc00-\udccf]|\ud83a[\udcd7-\udfff]|\ud83b[\udc00-\uddff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\ude00-\udeef]|\ud83b[\udef2-\udeff]))"),e.extend(e.i18n.parser.emitter,{bidi:function(e){var n,o=(n=e[0].match(t))?void 0===n[2]?"ltr":"rtl":null;return"ltr"===o?"‪"+e[0]+"‬":"rtl"===o?"‫"+e[0]+"‬":e[0]}})}(jQuery)},41669:e=>{"use strict";e.exports=jQuery},46905:()=>{!function(e){"use strict";var t=function(){this.language=e.i18n.languages[String.locale]||e.i18n.languages.default};t.prototype={constructor:t,emit:function(t,n){var o,i,a,s=this;switch(typeof t){case"string":case"number":o=t;break;case"object":if(i=e.map(t.slice(1),(function(e){return s.emit(e,n)})),a=t[0].toLowerCase(),"function"!=typeof s[a])throw new Error('unknown operation "'+a+'"');o=s[a](i,n);break;case"undefined":o="";break;default:throw new Error("unexpected type in AST: "+typeof t)}return o},concat:function(t){var n="";return e.each(t,(function(e,t){n+=t})),n},replace:function(e,t){var n=parseInt(e[0],10);return n{!function(e){"use strict";var t=function(t){this.options=e.extend({},e.i18n.parser.defaults,t),this.language=e.i18n.languages[String.locale]||e.i18n.languages.default,this.emitter=e.i18n.parser.emitter};t.prototype={constructor:t,simpleParse:function(e,t){return e.replace(/\$(\d+)/g,(function(e,n){var o=parseInt(n,10)-1;return void 0!==t[o]?t[o]:"$"+n}))},parse:function(t,n){return t.indexOf("{{")<0?this.simpleParse(t,n):(this.emitter.language=e.i18n.languages[e.i18n().locale]||e.i18n.languages.default,this.emitter.emit(this.ast(t),n))},ast:function(e){var t,n,o,i,a,s,r,d,l,u,c,f,m,g,h,p,v,w,b,y=0;function k(e){return function(){var t,n;for(t=0;t1?["CONCAT"].concat(e):e[0]}function L(){var e=C([f,n,E]);return null===e?null:[e[0],e[2]]}function I(){var e=C([f,n,p]);return null===e?null:[e[0],e[2]]}function T(){var e=C([m,c,g]);return null===e?null:e[1]}if(t=S("|"),n=S(":"),o=S("\\"),i=x(/^./),a=S("$"),s=x(/^\d+/),r=x(/^[^{}[\]$\\]/),d=x(/^[^{}[\]$\\|]/),k([_,x(/^[^{}[\]$\s]/)]),l=k([_,d]),u=k([_,r]),w=x(/^[ !"$&'()*,./0-9;=?@A-Z^_`a-z~\x80-\xFF+-]+/),b=function(e){return e.toString()},f=function(){var e=w();return null===e?null:b(e)},c=k([function(){var e=C([k([L,I]),$(0,B)]);return null===e?null:e[0].concat(e[1])},function(){var e=C([f,$(0,B)]);return null===e?null:[e[0]].concat(e[1])}]),m=S("{{"),g=S("}}"),h=k([T,E,function(){var e=$(1,u)();return null===e?null:e.join("")}]),p=k([T,E,function(){var e=$(1,l)();return null===e?null:e.join("")}]),null===(v=function(){var e=$(0,h)();return null===e?null:["CONCAT"].concat(e)}())||y!==e.length)throw new Error("Parse error at position "+y.toString()+" in input: "+e);return v}},e.extend(e.i18n.parser,new t)}(jQuery)},51399:()=>{!function(e){"use strict";var t=function(){this.messages={},this.sources={}};t.prototype={load:function(t,n){var o,i,a=null,s=[],r=this;if("string"==typeof t)return e.i18n.log("Loading messages from: "+t),(o=t,i=e.Deferred(),e.getJSON(o).done(i.resolve).fail((function(t,n,a){e.i18n.log("Error in loading messages from "+o+" Exception: "+a),i.resolve()})),i.promise()).done((function(e){r.set(n,e)})).promise();if(n)return r.set(n,t),e.Deferred().resolve();for(a in t)Object.prototype.hasOwnProperty.call(t,a)&&(n=a,s.push(r.load(t[a],n)));return e.when.apply(e,s)},set:function(t,n){this.messages[t]?this.messages[t]=e.extend(this.messages[t],n):this.messages[t]=n},get:function(e,t){return this.messages[e]&&this.messages[e][t]}},e.extend(e.i18n.messageStore,new t)}(jQuery)},52329:()=>{!function(e){"use strict";var t,n,o,i=Array.prototype.slice;(t=function(n){this.options=e.extend({},t.defaults,n),this.parser=this.options.parser,this.locale=this.options.locale,this.messageStore=this.options.messageStore,this.languages={}}).prototype={localize:function(t){var n,o,i,a,s,r;for(i=this.locale,a=0;i;){o=(n=i.split("-")).length;do{if(s=n.slice(0,o).join("-"),r=this.messageStore.get(s,t))return r;o--}while(o);if("en"===i)break;i=e.i18n.fallbacks[this.locale]&&e.i18n.fallbacks[this.locale][a]||this.options.fallbackLocale,e.i18n.log("Trying fallback locale for "+this.locale+": "+i+" ("+t+")"),a++}return""},destroy:function(){e.removeData(document,"i18n")},load:function(t,n){var o,i,a,s={};if(t||n||(t="i18n/"+e.i18n().locale+".json",n=e.i18n().locale),"string"==typeof t&&"json"!==t.split("?")[0].split(".").pop()){for(s[n]=t+"/"+n+".json",o=(e.i18n.fallbacks[n]||[]).concat(this.options.fallbackLocale),i=0;i{!function(e){e.idleTimer=function(t,n,o){o=e.extend({startImmediately:!0,idle:!1,enabled:!0,timeout:3e4,events:"mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove"},o),n=n||document;var i=function(t){"number"==typeof t&&(t=void 0);var a=e.data(t||n,"idleTimerObj");a.idle=!a.idle;var s=+new Date-a.olddate;if(a.olddate=+new Date,a.idle&&s{"use strict";function o(){return!!document.querySelector("body.pretext")}function i(e,t,n,i){var a=window.location.pathname;-1!==a.indexOf("?")&&(a=a.substring(0,a.lastIndexOf("?")));let s=o();var r={lastPageUrl:a,lastPageScrollLocation:Math.round($(window).scrollTop()),completionFlag:e,pageLoad:t,markingComplete:n,markingIncomplete:i,course:eBookConfig.course,isPtxBook:s};$(document).ajaxError((function(e,t,n,o){console.log("Request Failed for "+n.url),console.log(e)})),jQuery.ajax({url:`${eBookConfig.new_server_prefix}/logger/updatelastpage`,contentType:"application/json; charset=utf-8",dataType:"json",data:JSON.stringify(r),method:"POST",async:!0})}n.d(t,{w:()=>p}),n(67375),n(66495),n(52329),n(39161),n(46905),n(23836),n(51399),n(49276),n(35773),n(52754),n(3403),n(83057),$(document).on("runestone:login",(function(){var e;!function(){if(!window.location.href.match(/(\/index.html|toctree.html|genindex.html|navhelp.html|toc.html|assignments.html|Exercises.html)/)){var e=window.location.pathname;-1!==e.indexOf("?")&&(e=e.substring(0,e.lastIndexOf("?")));var t={lastPageUrl:e,isPtxBook:o()};jQuery.ajax({url:`${eBookConfig.new_server_prefix}/logger/getCompletionStatus`,data:t,async:!1}).done((function(e){if("None"!=e){var t,n;1==e.detail[0].completionStatus?(t="buttonConfirmCompletion",n=" Completed. Well Done!"):(t="buttonAskCompletion",n="Mark as Completed");let o=document.querySelector("#scprogresscontainer");o&&o.classList.add("ptx-runestone-container"),$("#scprogresscontainer").append('
    ")}}))}}(),void 0!==(e=$.getUrlVar("lastPosition"))&&($("body").append(''),$("html, body").animate({scrollTop:parseInt(e)},1e3)),function(){if(!window.location.href.match(/(index.html|genindex.html|navhelp.html|toc.html|assignments.html|Exercises.html|toctree.html)/)){var e,t=-$("#navLinkBgRight").outerWidth()-5;$("#completionButton").hasClass("buttonAskCompletion")?e=t+70:$("#completionButton").hasClass("buttonConfirmCompletion")&&(e=0);var n=$("#relations-next").css("right"),o=-(t+35);$("#navLinkBgRight").css("right",t).show();var a=!1;$(window).scroll((function(){$(window).scrollTop()+$(window).height()==$(document).height()?($("#navLinkBgRight").animate({right:e},200),$("#navLinkBgLeft").animate({left:"0px"},200),$("#completionButton").hasClass("buttonConfirmCompletion")&&$("#relations-next").animate({right:o},200),a=!0):a&&($("#navLinkBgRight").animate({right:t},200),$("#navLinkBgLeft").animate({left:"-65px"},200),$("#relations-next").animate({right:n}),a=!1)}));var s=0;i(s=$("#completionButton").hasClass("buttonAskCompletion")?0:1,!0,!1,!1),$("#completionButton").on("click",(function(){var a=!1,r=!1;$(this).hasClass("buttonAskCompletion")?($(this).removeClass("buttonAskCompletion").addClass("buttonConfirmCompletion").html(" Completed. Well Done!"),$("#navLinkBgRight").animate({right:0}),$("#relations-next").animate({right:o}),e=0,s=1,a=!0):$(this).hasClass("buttonConfirmCompletion")&&($(this).removeClass("buttonConfirmCompletion").addClass("buttonAskCompletion").html("Mark as Completed"),e=t+70,$("#navLinkBgRight").animate({right:e}),$("#relations-next").animate({right:n}),s=0,r=!0),i(s,!1,a,r)}))}}(),function(){if(-1!=window.location.href.toLowerCase().indexOf("toc.html")||-1!=window.location.href.toLowerCase().indexOf("index.html")||-1!=window.location.href.toLowerCase().indexOf("frontmatter")){o()||jQuery.get(`${eBookConfig.new_server_prefix}/logger/getAllCompletionStatus`,(function(e){var t;if("None"!=e){t=e.detail;var n=$("#main-content div li a");$.each(t,(function(e,t){for(var o=0;o- Completed this topic on '+t.endDate+"").children().first().hover((function(){$(this).next(".infoTextCompleted").show()}),(function(){$(this).next(".infoTextCompleted").hide()})):0==t.completionStatus&&$(n[o].parentElement).addClass("active").append('Last read this topic on '+t.endDate+"").children().first().hover((function(){$(this).next(".infoTextActive").show()}),(function(){$(this).next(".infoTextActive").hide()})))}))}}));var e={course:eBookConfig.course};jQuery.get(`${eBookConfig.new_server_prefix}/logger/getlastpage`,e,(function(e){var t;"None"!=e&&null!=(t=e.detail).lastPageChapter&&$("#continue-reading").show().html('
    You were Last Reading: '+t.lastPageChapter+(t.lastPageSubchapter?" > "+t.lastPageSubchapter:"")+' Continue Reading
    ')}))}}()})),$.extend({getUrlVars:function(){for(var e,t=[],n=window.location.search.slice(window.location.search.indexOf("?")+1).split("&"),o=0;o{t.addEventListener("click",(function(){let n=t.getAttribute("data-knowl");e.logBookEvent({event:"knowl",act:"click",div_id:n})}))})),document.querySelectorAll("details.born-hidden-knowl").forEach((t=>{t.addEventListener("toggle",(function(){if(t.open){let n=t.id;e.logBookEvent({event:"knowl",act:"open",div_id:n})}}))})),document.querySelectorAll(".sagecell_evalButton").forEach((t=>{t.addEventListener("click",(function(){let n=t.closest(".ptx-sagecell"),o=n?n.querySelector(".sagecell_input"):null,i=(o&&o.textContent,n?n.id:null);i?e.logBookEvent({event:"sage",act:"run",div_id:i}):console.warn("Could not find container or div_id for sagecell button")}))})),"undefined"==typeof eBookConfig||eBookConfig.isInstructor||document.querySelectorAll(".commentary").forEach((e=>{e.style.display="none"}))}();let e=document.getElementById("primary-navbar-sticky-wrapper");e&&(e.style.overflow="visible")})),n(19695);var s=n(98098);class r extends a.A{constructor(){super(),this.initSplice()}initSplice(){window.addEventListener("message",(async e=>{var t,n,o=this.sendingIframe(e);if(console.log(`SpliceWrapper: received message subject: ${e.data.subject} from iframe: ${o?o.id:"unknown"}`),"SPLICE.reportScoreAndState"==e.data.subject)this.handleScoreAndState(e,o);else if("SPLICE.sendEvent"==e.data.subject)this.handleSpliceEvent(e,o);else if("SPLICE.getState"==e.data.subject)await this.handleGetState(e,o);else if("https://www.myopenmath.com"===e.origin&&"string"==typeof e.data&&-1!=e.data.indexOf("lti.ext.imathas.result")){let o=JSON.parse(e.data),i=(t=o.jwt.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),n=decodeURIComponent(window.atob(t).split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join("")),JSON.parse(n));console.log("Result received from frame "+o.frame_id+" with score "+i.score)}}))}getUniqueID(e,t){if(t){let e=t.closest("[data-component]");if(e)return e.id}let n=e.data.activity_id;return n||(t?n=t.src:(n="unknown",console.error("Could not find iframe that sent the SPLICE event"))),n}handleScoreAndState(e,t){console.log("Got SPLICE.reportScoreAndState"),console.log(e.data.activity_id),console.log(e.data.score),console.log(e.data.state);let n=this.getUniqueID(e,t);this.logBookEvent({event:e.data.subject,div_id:n,act:`score: ${e.data.score}`,score:e.data.score,percent:e.data.score,correct:1==e.data.score,answer:JSON.stringify(e.data.state)})}sendingIframe(e){for(const t of document.getElementsByTagName("iframe"))if(t.contentWindow===e.source)return t}async getSavedState(e){try{const t=await fetch("/ns/assessment/results",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({div_id:e,course:eBookConfig.course,event:"SPLICE.getState"})});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);return await t.json()}catch(e){return console.error("Error fetching SPLICE state:",e),null}}async handleGetState(e,t){console.log("Got SPLICE.getState"),console.log(e.data.activity_id),console.log(e.data.state);let n=this.getUniqueID(e,t),o=(await this.getSavedState(n)).detail.answer;e.source.postMessage({message_id:e.data.message_id,subject:"SPLICE.getState.response",state:o},"*")}handleSpliceEvent(e,t){console.log("Got SPLICE.sendEvent"),console.log(e.data.activity_id),console.log(e.data.name);let n=this.getUniqueID(e,t);this.logBookEvent({event:e.data.subject,div_id:n,act:e.data.name||"unknown"})}checkLocalStorage(){}setLocalStorage(){}restoreAnswers(){}disableInteraction(){}}const d={activecode:()=>Promise.all([n.e(249),n.e(296),n.e(625),n.e(764),n.e(877)]).then(n.bind(n,73565)),ble:()=>n.e(817).then(n.bind(n,29817)),clickablearea:()=>Promise.all([n.e(529),n.e(198)]).then(n.bind(n,58529)),codelens:()=>Promise.all([n.e(764),n.e(412)]).then(n.bind(n,76412)),datafile:()=>n.e(580).then(n.bind(n,33580)),dragndrop:()=>Promise.all([n.e(759),n.e(621)]).then(n.bind(n,56759)),fillintheblank:()=>Promise.all([n.e(466),n.e(294)]).then(n.bind(n,64466)),groupsub:()=>Promise.all([n.e(28),n.e(616)]).then(n.bind(n,24616)),khanex:()=>n.e(340).then(n.bind(n,28340)),lp_build:()=>Promise.all([n.e(296),n.e(576)]).then(n.bind(n,77576)),matching:()=>Promise.all([n.e(566),n.e(737)]).then(n.bind(n,14566)),multiplechoice:()=>Promise.all([n.e(919),n.e(350)]).then(n.bind(n,9919)),hparsons:()=>Promise.all([n.e(249),n.e(669),n.e(486)]).then(n.bind(n,71182)),parsons:()=>n.e(39).then(n.bind(n,52420)),poll:()=>n.e(168).then(n.bind(n,11168)),quizly:()=>n.e(128).then(n.bind(n,34128)),reveal:()=>n.e(460).then(n.bind(n,67460)),selectquestion:()=>Promise.all([n.e(662),n.e(380)]).then(n.bind(n,10662)),shortanswer:()=>Promise.all([n.e(819),n.e(850)]).then(n.bind(n,48819)),showeval:()=>n.e(824).then(n.bind(n,8824)),simple_sensor:()=>n.e(126).then(n.bind(n,50126)),spreadsheet:()=>Promise.all([n.e(131),n.e(186)]).then(n.bind(n,97186)),tabbedStuff:()=>n.e(442).then(n.bind(n,76442)),timedAssessment:()=>Promise.all([n.e(249),n.e(296),n.e(625),n.e(764),n.e(877),n.e(466),n.e(759),n.e(919),n.e(566),n.e(662),n.e(529),n.e(819),n.e(420),n.e(268)]).then(n.bind(n,46424)),wavedrom:()=>Promise.all([n.e(770),n.e(640)]).then(n.bind(n,45640)),webwork:()=>n.e(680).then(n.bind(n,84680)),youtube:()=>n.e(915).then(n.bind(n,86915)),doenet:()=>Promise.resolve()},l={},u=10,c=[];let f=0;async function m(){if(0===c.length)return;if(Date.now()-fe.component_name)));const t=e.map((async e=>{try{return await d[e.component_name](),console.log(`Runestone component ${e.component_name} has been loaded`),e}catch(t){e.reject(t)}})),n=await Promise.all(t);try{n.forEach((function(e){e&&e.resolve()}))}catch(e){console.error(e)}}let g=new Promise((e=>$(document).on("runestone:pre-login-complete",e)));function h(){const e=new Set($("[data-component]").map(((e,t)=>$(t).attr("data-component"))).get());document.querySelector(".webwork-button")&&e.add("webwork");const t=[...e].map((e=>{let t;console.log(`Loading Runestone component: ${e}`);try{t=(d[e]||(()=>Promise.resolve()))()}catch(t){console.error(`Error loading ${e}:`,t)}return t.error=t=>console.error(`Error in ${e}:`,t),t}));Promise.all([g,...t]).then((function(){document.body.dataset.reactInUse||document.dispatchEvent(new CustomEvent("runestone:login-complete"))}))}async function p(e){if(l[e])return l[e];console.log(`Runestone component ${e} is being queued for import`);const t=function(e){let t=null,n=null;const o=new Promise(((e,o)=>{t=e,n=o})),i={component_name:e,resolve:t,reject:n};return c.push(i),window.setTimeout(m,u+1),o}(e);return l[e]=t,t}g.then((()=>{console.log("Runestone pre-login complete")})),$(document).ready(h);const v=document.currentScript.src;n.p=v.substring(0,v.lastIndexOf("/")+1),new r;const w={};w.runestone_import=p,w.runestone_auto_import=h,w.getSwitch=function(){const e=document.querySelector('.theme-switch input[type="checkbox"]'),t=localStorage.getItem("theme")?localStorage.getItem("theme"):null;t&&(document.documentElement.setAttribute("data-theme",t),"dark"===t&&(e.checked=!0))},w.switchTheme=function(){1==document.getElementById("checkbox").checked?(document.documentElement.setAttribute("data-theme","dark"),localStorage.setItem("theme","dark")):(document.documentElement.setAttribute("data-theme","light"),localStorage.setItem("theme","light"))},w.popupScratchAC=async function(){if(await p("activecode"),!eBookConfig.scratchDiv){window.ACFactory.createScratchActivecode();let e=eBookConfig.scratchDiv;window.componentMap[e]=ACFactory.createActiveCode($(`#${e}`)[0],eBookConfig.acDefaultLanguage),eBookConfig.isLoggedIn&&window.componentMap[e].enableSaveLoad()}setTimeout((()=>{window.ACFactory.toggleScratchActivecode()}),100)},w.renderOneComponent=s.yT,window.componentMap={},window.runestoneComponents=w},78673:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var o=n(83057),i=["parsonsMove","showeval","video","poll","view_toggle","dashboard","selectquestion","codelens","peer","shortanswer"];class a{constructor(e){this.component_ready_promise=new Promise((e=>this._component_ready_resolve_fn=e)),this.optional=!1,void 0===window.allComponents&&(window.allComponents=[]),window.allComponents.push(this),e&&(this.sid=e.sid,this.graderactive=e.graderactive,this.showfeedback=!0,e.timed&&(this.isTimed=!0),e.enforceDeadline&&(this.deadline=e.deadline),this.optional=this.parseBooleanAttribute(e.orig,"data-optional"),e.selector_id&&(this.selector_id=e.selector_id),void 0!==e.assessmentTaken?this.assessmentTaken=e.assessmentTaken:this.assessmentTaken=!0,void 0!==e.timedWrapper?this.timedWrapper=e.timedWrapper:location.href.indexOf("doAssignment")>=0?this.timedWrapper=$("h1#assignment_name").text():this.timedWrapper=null,$(e.orig).data("question_label")&&(this.question_label=$(e.orig).data("question_label")),this.is_toggle=e.is_toggle,this.is_select=e.is_select),this.mjelements=[];let t=this;if(this.mjReady=new Promise((function(e,n){t.mjresolver=e})),this.aQueue=new r,e&&void 0!==e.preamble){this.preamble=e.preamble;let t=document.createElement("div");t.classList.add("hidden-content"),t.classList.add("process-math"),t.innerHTML="\\("+this.preamble+"\\)",e.orig.appendChild(t),t.id="ltx_preamble",t.style.display="none",this.aQueue.preamble=t}this.jsonHeaders=new Headers({"Content-type":"application/json; charset=utf-8",Accept:"application/json"})}parseBooleanAttribute(e,t){const n=e.getAttribute(t);if(null===n)return!1;const o=n.toLowerCase();return"false"!==o&&"no"!==o}async logBookEvent(e){if(this.graderactive)return;let t;if(e.course_name=eBookConfig.course,e.clientLoginStatus=eBookConfig.isLoggedIn,e.timezoneoffset=(new Date).getTimezoneOffset()/60,this.selector_id&&(e.selector_id=this.selector_id),"number"==typeof this.percent&&(e.percent=this.percent),window.assignmentId&&(e.assignment_id=window.assignmentId),eBookConfig.isLoggedIn&&eBookConfig.useRunestoneServices&&eBookConfig.logLevel>0&&(t=this.postLogMessage(e)),!this.isTimed||eBookConfig.debug){let t=eBookConfig.isLoggedIn?"Save":"Not";console.log(`${t} logging event `+JSON.stringify(e))}return this.selector_id&&(e.div_id=this.selector_id.replace("-toggleSelectedQuestion",""),e.event="selectquestion",e.act="interaction",this.postLogMessage(e)),"function"==typeof o.X.updateProgress&&"edit"!=e.act&&0==this.optional&&o.X.updateProgress(e.div_id),-1===i.indexOf(e.event)&&this.decorateStatus(),t}async postLogMessage(e){var t;let n=new Request(`${eBookConfig.new_server_prefix}/logger/bookevent`,{method:"POST",headers:this.jsonHeaders,body:JSON.stringify(e)});try{var o=await fetch(n);if(!o.ok){if(422===o.status)throw t=await o.json(),console.log(JSON.stringify(t.detail,null,4)),new Error("Unprocessable Request");if(401==o.status)throw t=await o.json(),console.log(`Missing authentication token ${t.detail}`),new Error("Missing authentication token");throw new Error(`Failed to save the log entry\n Status: ${o.status}`)}let e=(t=await o.json()).detail,i=null;if(this.selector_id){let e=this.selector_id.replace("-toggleSelectedQuestion","");i=document.getElementById(`${e}_score`)}else i=document.getElementById(`${this.divid}_score`);i&&!this.isTimed&&e.score&&this.updateScores(i,e)}catch(e){let n="none";t&&t.detail&&(n=t.detail),eBookConfig.useRunestoneServices&&alert(`Error: Your action was not saved!\n The error was ${e}\n Status Code: ${o.status}\n Detail: ${JSON.stringify(n,null,4)}.\n Please report this error!`),console.log(`Error: ${e} Detail: ${n} Status Code: ${o.status}`)}return t}updateScores(e,t){if(!t.assigned||null===t.score)return void(document.getElementById(`${this.divid}_message`).innerHTML="Score not updated. Submissions are closed.");let n=e.getElementsByClassName("qscore")[0];n&&(n.innerHTML=t.score.toFixed(1));let o=document.getElementsByClassName("qscore"),i=document.getElementsByClassName("qmaxscore"),a=0,s=0;for(let e=0;e0){let n=new Request(`${eBookConfig.new_server_prefix}/logger/runlog`,{method:"POST",headers:this.jsonHeaders,body:JSON.stringify(e)}),o=await fetch(n);o.ok?t=await o.json():(t=await o.json(),eBookConfig.useRunestoneServices?alert(`Failed to save your code\n Status is ${o.status}\n Detail: ${JSON.stringify(t.detail,null,4)}`):console.log(`Did not save the code.\n Status: ${o.status}\n Detail: ${JSON.stringify(t.detail,null,4)}`))}return this.isTimed&&!eBookConfig.debug||console.log("running "+JSON.stringify(e)),"function"==typeof o.X.updateProgress&&0==this.optional&&o.X.updateProgress(e.div_id),t}}async checkServer(e,t=!1){let n=this;if(this.checkServerComplete=new Promise((function(e,t){n.csresolver=e})),eBookConfig.isLoggedIn&&(this.useRunestoneServices||this.graderactive)){let t={};if(t.div_id=this.divid,t.course=eBookConfig.course,t.event=e,this.graderactive&&this.deadline&&(t.deadline=this.deadline,t.rawdeadline=this.rawdeadline,t.tzoff=this.tzoff),this.sid&&(t.sid=this.sid),t.div_id&&t.course&&t.event||console.log(`A required field is missing data ${t.div_id}:${t.course}:${t.event}`),eBookConfig.practice_mode||eBookConfig.peer||!this.assessmentTaken)this.loadData({}),console.log("resolving checkServer no answer given"),this.csresolver("not taken");else{let e=new Request(`${eBookConfig.new_server_prefix}/assessment/results`,{method:"POST",body:JSON.stringify(t),headers:this.jsonHeaders});try{let n=await fetch(e);console.log(`Response from server: ${n.status}`),n.ok?(t=await n.json(),t=t.detail,console.log(`Data from server: ${JSON.stringify(t)} calling repopulateFromStorage`),this.repopulateFromStorage(t),this.attempted=!0,void 0!==t.correct?this.correct=t.correct:this.correct=null,console.log("resolving checkServer with server data"),this.csresolver("server")):(console.log(`HTTP Error getting results: ${n.statusText}`),this.checkLocalStorage(),console.log("resolving checkServer with local data"),this.csresolver("local"))}catch(e){console.log(`Error getting results: ${e}`);try{this.checkLocalStorage()}catch(e){console.log(e)}}}}else this.checkLocalStorage(),console.log("resolving checkServer with local data"),this.csresolver("local");t&&this.indicate_component_ready()}indicate_component_ready(){this.containerDiv.classList.add("runestone-component-ready"),this._component_ready_resolve_fn()}loadData(e){return null}repopulateFromStorage(e){null!==e&&"no data"!==e&&this.shouldUseServer(e)?(this.restoreAnswers(e),this.setLocalStorage(e)):this.checkLocalStorage(),this.decorateStatus()}shouldUseServer(e){if("T"===e.correct||!0===e.correct||0===localStorage.length||!0===this.graderactive||this.isTimed)return!0;let t,n=localStorage.getItem(this.localStorageKey());if(null===n)return!0;try{t=JSON.parse(n)}catch(e){return console.log(e.message),localStorage.removeItem(this.localStorageKey()),!0}if(e.answer==t.answer)return!0;let o=new Date(t.timestamp);return new Date(e.timestamp)>=o}localStorageKey(){return eBookConfig.email+":"+eBookConfig.course+":"+this.divid+"-given"}addCaption(e){if(!this.isTimed){var t=document.createElement("p");this.question_label?(this.caption=eBookConfig.useRunestoneServices?`Activity: ${this.question_label} ${this.caption} (${this.divid})`:`Activity: ${this.question_label} ${this.caption}`,$(t).html(this.caption),$(t).addClass(`${e}_caption`)):($(t).html(eBookConfig.useRunestoneServices?this.caption+" ("+this.divid+")":this.caption),$(t).addClass(`${e}_caption`),$(t).addClass(`${e}_caption_text`)),this.capDiv=t,this.containerDiv.appendChild(t)}}hasUserActivity(){return this.isAnswered}checkCurrentAnswer(){console.log("Each component should provide an implementation of checkCurrentAnswer")}async logCurrentAnswer(){console.log("Each component should provide an implementation of logCurrentAnswer")}renderFeedback(){console.log("Each component should provide an implementation of renderFeedback")}disableInteraction(){console.log("Each component should provide an implementation of disableInteraction")}toString(){return`${this.constructor.name}: ${this.divid}`}queueMathJax(e){return"undefined"==typeof MathJax?(console.log("Error -- MathJax is not loaded"),Promise.resolve(null)):MathJax.typesetPromise?void 0!==window.runestoneMathReady?window.runestoneMathReady.then((()=>this.mjresolver(this.aQueue.enqueue(e)))):this.mjresolver(this.aQueue.enqueue(e)):(console.log(`Waiting on MathJax!! ${MathJax.typesetPromise}`),setTimeout((()=>this.queueMathJax(e)),200),console.log(`Returning mjready promise: ${this.mjReady}`),this.mjReady)}decorateStatus(){if(this.isTimed||eBookConfig.peer)return;let e=$(this.containerDiv).closest("div.runestone")[0];if(!e)return;e.classList.remove("notAnswered"),e.classList.remove("isInCorrect"),e.classList.remove("isCorrect");let t=localStorage.getItem("currentAssignmentInfo"),n=[];t&&(n=JSON.parse(t).questions),n.indexOf(this.divid)>=0&&e.classList.add("isAssigned"),this.correct?e.classList.add("isCorrect"):null===this.correct||void 0===this.correct?e.classList.add("notAnswered"):e.classList.add("isInCorrect")}}class s{constructor(){this._items=[]}enqueue(e){this._items.push(e)}dequeue(){return this._items.shift()}get size(){return this._items.length}}class r extends s{constructor(){super(),this._pendingPromise=!1}enqueue(e){return new Promise(((t,n)=>{super.enqueue({component:e,resolve:t,reject:n}),this.dequeue()}))}async dequeue(){if(this._pendingPromise)return!1;let e=super.dequeue();if(!e)return!1;let t=this;try{this._pendingPromise=!0;let n=await window.runestoneMathReady.then((async function(){if(console.log(`MathJax Ready -- dequeing a typesetting run for ${e.component.id} ${t.preamble?.innerHTML}`),t.preamble){await MathJax.typesetPromise([t.preamble]);let n=document.createElement("div");return n.innerHTML=t.preamble.innerHTML,e.component.insertAdjacentElement("afterbegin",n),console.log(`MathJax typeset the preamble for ${e.component.id}`),await MathJax.typesetPromise([e.component])}return await MathJax.typesetPromise([e.component])}));this._pendingPromise=!1,e.resolve(n)}catch(t){this._pendingPromise=!1,e.reject(t)}finally{this.dequeue()}return!0}}window.RunestoneBase=a},83057:(e,t,n)=>{"use strict";n.d(t,{X:()=>i,u:()=>a});class o{constructor(e){if(this.possible=0,this.total=1,e&&"assignment_spec"in e&&(this.assignment_spec=e.assignment_spec,delete e.assignment_spec),e&&Object.keys(e).length>0)this.activities=e;else{let e={page:0};document.querySelectorAll(".runestone").forEach((function(t){e[t.firstElementChild.id]=0})),this.activities=e}if(this.calculateProgress(),window.location.pathname.match(/.*\/(index.html|toctree.html|Exercises.html|search.html)$/i)){const e=document.getElementById("scprogresscontainer");e&&(e.style.display="none")}this.renderProgress()}calculateProgress(){for(let e in this.activities)void 0!==e&&(this.possible++,this.activities[e]>0&&this.total++)}renderProgress(){let e=0;const t=document.getElementById("scprogresstotal");t&&(t.textContent=this.total);const n=document.getElementById("scprogressposs");n&&(n.textContent=this.possible);try{e=100*this.total/this.possible}catch(t){e=0}let o=document.getElementById("subchapterprogress");if(o&&"PROGRESS"!==o.tagName){const t=document.createElement("progress");t.id="subchapterprogress",t.max=100,t.value=e,t.className=o.className,o.replaceWith(t),o=t}else o&&(o.max=100,o.value=e);if(this.assignment_spec&&this.total-1>=(this.assignment_spec.activities_required||0)&&this.sendCompletedReadingScore().then((()=>{console.log("Reading score sent for page"),setTimeout((()=>{let e=document.getElementById("completionButton");e&&"mark as completed"===e.textContent.toLowerCase()&&e.click()}),500)})),!eBookConfig.isLoggedIn){const e=document.getElementById("subchapterprogress");e&&e.classList.add("loggedout")}}updateProgress(e){if(this.activities[e]++,1===this.activities[e]){this.total++;let e=100*this.total/this.possible;const t=document.getElementById("scprogresstotal");t&&(t.textContent=this.total);const n=document.getElementById("scprogressposs");n&&(n.textContent=this.possible);let o=document.getElementById("subchapterprogress");if(o&&"PROGRESS"===o.tagName&&(o.value=e),this.assignment_spec&&null!==this.assignment_spec.activities_required&&this.total>=this.assignment_spec.activities_required&&(console.log("Required activities completed"),this.sendCompletedReadingScore().then((()=>{console.log("Reading score sent")}))),100==e&&function(){const e=document.getElementById("completionButton");return e&&e.textContent&&"mark as completed"===e.textContent.toLowerCase()}()){const e=document.getElementById("completionButton");e&&"function"==typeof e.click&&e.click()}}}async sendCompletedReadingScore(){let e=new Headers({"Content-type":"application/json; charset=utf-8",Accept:"application/json"}),t={...this.assignment_spec},n=new Request(`${eBookConfig.new_server_prefix}/logger/update_reading_score`,{method:"POST",body:JSON.stringify(t),headers:e});try{let e=await fetch(n);e.ok||console.error(`Failed to send reading score! ${e.statusText}`),t=await e.json()}catch(e){console.error(`Error sending reading score ${e}`)}}}var i={};function a(e){return"string"==typeof e&&([/\$\$[\s\S]+?\$\$/,/\$[^$\n]+?\$/,/\\\[[\s\S]+?\\\]/,/\\\([\s\S]+?\\\)/].some((t=>t.test(e)))||/\\(frac|sqrt|sum|prod|int|lim|sin|cos|tan|log|ln|alpha|beta|gamma|pi|theta|sigma|Delta|cdot|times|leq|geq|neq)\b/.test(e)||/[a-zA-Z0-9]\s*[\^_]\s*\{?.+?\}?/.test(e))}document.addEventListener("runestone:login",(function(){const e=document.getElementById("profilelink");e&&e.style.removeProperty("display");const t=document.getElementById("passwordlink");t&&t.style.removeProperty("display");const n=document.getElementById("registerlink");n&&(n.style.display="none"),document.querySelectorAll("li.loginout").forEach((e=>{e.innerHTML='Log Out'}))})),document.addEventListener("runestone:logout",(function(){if(eBookConfig.useRunestoneServices){console.log("setup navbar for logged out");const e=document.getElementById("registerlink");e&&e.style.removeProperty("display");const t=document.getElementById("profilelink");t&&(t.style.display="none");const n=document.getElementById("passwordlink");n&&(n.style.display="none");const o=document.getElementById("ip_dropdown_link");o&&(o.style.display="none");const i=document.getElementById("inst_peer_link");i&&(i.style.display="none"),document.querySelectorAll("li.loginout").forEach((e=>{e.innerHTML='Login'})),document.querySelectorAll(".footer").forEach((e=>{e.innerHTML="user not logged in"}))}})),document.addEventListener("DOMContentLoaded",(function(){eBookConfig?(async function(){var e;if(eBookConfig.useRunestoneServices){let e=new Headers({"Content-type":"application/json; charset=utf-8",Accept:"application/json"}),n={timezoneoffset:(new Date).getTimezoneOffset()/60,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone},o=function(){const e=`; ${document.cookie}`.split("; RS_info=");if(2===e.length)return e.pop().split(";").shift()}();var t=!1;if(o)try{let e=o.replace(/\\054/g,","),i=JSON.parse(decodeURIComponent(e));i=JSON.parse(decodeURIComponent(i)),i.timezone===n.timezone&&i.tz_offset===n.timezoneoffset&&(console.log("Timezone cookie matches, not sending timezone to server"),t=!0)}catch(e){console.error("Error parsing RS_info cookie, sending timezone to server")}if(!1===t){let t=new Request(`${eBookConfig.new_server_prefix}/logger/set_tz_offset`,{method:"POST",body:JSON.stringify(n),headers:e});try{let e=await fetch(t);e.ok||console.error(`Failed to set timezone! ${e.statusText}`),n=await e.json()}catch(e){console.error(`Error setting timezone ${e}`)}}}if(console.log(`This page served by ${eBookConfig.served_by}`),eBookConfig.isLoggedIn){if(e=`username: ${eBookConfig.username}`,!eBookConfig.isInstructor){const e=document.getElementById("ip_dropdown_link");e&&"function"==typeof e.remove&&e.remove();const t=document.getElementById("inst_peer_link");t&&"function"==typeof t.remove&&t.remove()}document.dispatchEvent(new Event("runestone:login")),function(){let e=localStorage.getItem("currentAssignmentInfo");if(e&&eBookConfig.readings){var t,n,o,i,a,s,r,d,l,u;let m=JSON.parse(e),g=m.id,h=m.name,p=m.readingNames;(o=document.createElement("div")).textContent="Active assignment: ",(i=document.createElement("a")).textContent=h,i.href=`/assignment/student/doAssignment?assignment_id=${g}`,o.append(i),(a=document.createElement("a")).textContent="Exit Assignment",a.href=window.location.pathname,a.addEventListener("click",(function(e){localStorage.removeItem("currentAssignmentInfo")}));let v=window.location.pathname.split("/"),w=v[v.length-2]+"/"+v[v.length-1],b=!1,y=2;document.getElementsByTagName("body")[0].classList.contains("pretext")&&(b=!0,eBookConfig.readings=eBookConfig.readings.map((e=>e.split("/").pop())),w=w.split("/").pop(),y=1);let k=eBookConfig.readings.indexOf(w),C=eBookConfig.readings.length;if(k>0){d=eBookConfig.readings[k-1],(l=v.slice(0,v.length-y)).push(d),u=l.join("/"),s=o.cloneNode(!0);let e=document.createElement("p");e.textContent=`Page ${k+1} of ${C}, `;var c=document.createElement("a");c.href=u,c.textContent=`Back to page ${k} of ${C}: ${p[k-1]}.`,e.append(c),s.append(e)}else if(0==k){s=o.cloneNode(!0);let e=document.createElement("p");e.textContent=`Page 1 of ${C}.`,s.append(e)}else{d=eBookConfig.readings[0],(l=v.slice(0,v.length-y)).push(d),u=l.join("/"),s=o.cloneNode(!0);let e=document.createElement("p");e.textContent="Notice: this page is not part of the assignment. To remove this warning click ",e.append(a),s.append(e)}if(k==eBookConfig.readings.length-1){r=o;let e=document.createElement("p");e.textContent=`Page ${C} of ${C}: ${p[k]}`,r.append(e)}else if(k>=0){d=eBookConfig.readings[k+1],(l=v.slice(0,v.length-y)).push(d),u=l.join("/"),r=o;var f=document.createElement("a");f.href=u,f.textContent=`Continue to page ${k+2} of ${C}: ${p[k+1]}`;let e=document.createElement("p");e.append(f),r.append(e)}else{r=o.cloneNode(!0);let e=document.createElement("p");e.textContent="Notice: this page is not part of the assignment. To remove this warning click ";let t=a.cloneNode(!0);t.addEventListener("click",(function(e){localStorage.removeItem("currentAssignmentInfo")})),e.append(t),r.append(e)}if((t=document.createElement("div")).className="ptx-runestone-container",s.className="runestone assignment-nav top-assignment-nav",t.append(s),(n=document.createElement("div")).className="ptx-runestone-container",r.className="runestone assignment-nav bottom-assignment-nav",n.append(r),b){let e=document.getElementById("ptx-content");e&&e.insertBefore(t,e.firstChild);let o=document.getElementById("scprogresscontainer");return void(o&&(o.style.marginBottom="20px",o.appendChild(n)))}const $=document.getElementById("main-content");$&&r&&($.insertBefore(t,$.firstChild),$.appendChild(n))}}(),-1==window.location.pathname.indexOf("/admin/grading")&&-1==window.location.pathname.indexOf("/peer/")&&function(){let e;function t(){location.href.indexOf("index.html")<0&&(console.log("Idle timer - "+location.pathname),location.href=eBookConfig.app+"/default/user/login?_next="+location.pathname+location.search)}function n(){e&&clearTimeout(e),e=setTimeout(t,9e5)}["mousemove","keydown","scroll","click","touchstart","wheel"].forEach((e=>{window.addEventListener(e,n,{passive:!0})})),n()}()}else{e="Not logged in",document.dispatchEvent(new Event("runestone:logout"));let t=document.getElementById("browsing_warning");t&&(t.innerHTML="");let n=document.getElementById("ad_warning");n&&(n.innerHTML="")}document.querySelectorAll(".loggedinuser").forEach((t=>{t.innerHTML=e})),i=new o(eBookConfig.activities),console.log("triggering runestone:pre-login-complete"),document.dispatchEvent(new Event("runestone:pre-login-complete"))}(),function(){if("undefined"!=typeof showAd&&showAd){let e=Math.floor(2*Math.random())+1,t=document.getElementById(`adcopy_${e}`),n=document.querySelectorAll(".runestone");n.length>0&&(n[Math.floor(Math.random()*n.length)].after(t),t.style.display="block")}}()):"undefined"==typeof eBookConfig&&console.log("eBookConfig is not defined. This page must not be set up for Runestone")})),window.addEventListener("load",(function(){if(document.querySelectorAll(".video-play-overlay").forEach((function(e){e.style.backgroundImage="url('{{pathto('_static/play_overlay_icon.png', 1)}}')"})),document.querySelectorAll(".dropdown input, .dropdown label").forEach((function(e){e.addEventListener("click",(function(e){e.stopPropagation()}))})),location.href.includes("mode=browsing")){let e="?mode=browsing";document.querySelectorAll("a").forEach((t=>{let n="";if(t.href.includes("books/published")&&!t.href.includes("?mode=browsing")){if(t.href.includes("#")){let e=t.href.indexOf("#");n=t.href.substring(e),t.href=t.href.substring(0,e)}t.href=t.href.includes("?")?t.href+e.replace("?","&")+n:t.href+e+n}}))}}))},98098:(e,t,n)=>{"use strict";n.d(t,{$y:()=>a,JK:()=>i,yT:()=>s});var o=n(77394);async function i(e,t,n){if(!e)return void jQuery(`#${t}`).html("

    Sorry, no source is available for preview.

    ");e=e.replace(/..\/_images/g,`${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`),jQuery(`#${t}`).html(e),void 0===window.componentMap&&(window.componentMap={});let i=$($(`#${t} [data-component]`)[0]).data("component");await(0,o.w)(i);let a={};if(a.orig=jQuery(`#${t} [data-component]`)[0],a.orig&&(a.lang=$(a.orig).data("lang"),a.useRunestoneServices=!0,a.graderactive=!1,a.python3=!0,void 0!==n))for(let e in n)a[e]=n[e];if("undefined"==typeof component_factory)alert("Error: Missing the component factory!");else if(window.component_factory[i]||jQuery(`#${t}`).html()){let e=window.component_factory[i](a);"activecode"===i&&(n.multiGrader?window.componentMap[`${n.gradingContainer} ${e.divid}`]=e:window.componentMap[e.divid]=e)}else jQuery(`#${t}`).html(`

    Preview not available for ${i}

    `)}function a(e,t){e=e.replace(/..\/_images/g,`${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`);let n,o,i=$($(e).find("[data-component]")[0]).data("component"),a=$(e).find("[data-component]").first().attr("id");document.getElementById(a)||(n=$("
    ",{css:{display:"none"}}).appendTo("body"),n.html(e));let s={orig:document.getElementById(a),timed:!0};if(void 0!==t)for(let e in t)s[e]=t[e];i in window.component_factory&&(o=window.component_factory[i](s));let r={};return r.question=o,r}async function s(e){let t=e.querySelector("[data-component]");if(null==t)return void console.log("Render was called for a component, but now [data-component] attribute is present. This may mean the component has already been rendered.");let n=t.dataset.component;if(await(0,o.w)(n),0==$(this).closest("[data-component=timedAssessment]").length)try{let e=t.id;window.componentMap[e]=window.component_factory[n]({orig:t,useRunestoneServices:eBookConfig.useRunestoneServices})}catch(e){console.log(`Error rendering ${n} Problem ${this.id}\n Details: ${e}`)}}}},e=>{e.O(0,[723],(()=>e(e.s=77394))),e.O()}]); +//# sourceMappingURL=prefix-runestone.80892ed1280c2803.bundle.js.map \ No newline at end of file diff --git a/course/_static/prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt b/course/_static/prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt similarity index 100% rename from course/_static/prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt rename to course/_static/prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt diff --git a/course/_static/prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt.gz b/course/_static/prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt.gz similarity index 100% rename from course/_static/prefix-runestone.1c010553c35c544c.bundle.js.LICENSE.txt.gz rename to course/_static/prefix-runestone.80892ed1280c2803.bundle.js.LICENSE.txt.gz diff --git a/course/_static/prefix-runestone.80892ed1280c2803.bundle.js.gz b/course/_static/prefix-runestone.80892ed1280c2803.bundle.js.gz new file mode 100755 index 0000000000000000000000000000000000000000..1a31fc6f4f8d6932db0aab7cf5fc277f983f75db GIT binary patch literal 22602 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 li > a.internal, > ul, > li > ul\");\n\n // Iterate everything in order.\n $items.each(function (index, item) {\n var $item = $(item),\n tag = item.tagName.toLowerCase(),\n $childrenLi = $item.children('li'),\n $parentLi = $($item.parent('li'), $item.parent().parent('li'));\n\n // Add dropdowns if more children and above minimum level.\n if (tag === 'ul' && level >= minLevel && $childrenLi.length > 0) {\n $parentLi\n .addClass('dropdown-submenu')\n .children('a').first().attr('tabindex', -1);\n\n $item.addClass('dropdown-menu');\n }\n\n findA($item, level + 1);\n });\n };\n\n findA($ul);\n };\n\n /**\n * Patch all tables to remove ``docutils`` class and add Bootstrap base\n * ``table`` class.\n */\n patchTables = function () {\n $(\"table.docutils\")\n .removeClass(\"docutils\")\n .addClass(\"table\")\n .attr(\"border\", 0);\n };\n\n$(function () {\n\n /*\n * Scroll the window to avoid the topnav bar\n * https://github.com/twitter/bootstrap/issues/1768\n */\n if ($(\"#navbar.navbar-fixed-top\").length > 0) {\n var navHeight = $(\"#navbar\").height(),\n shiftWindow = function() { scrollBy(0, -navHeight - 10); };\n\n if (location.hash) {\n shiftWindow();\n }\n\n window.addEventListener(\"hashchange\", shiftWindow);\n }\n\n // Add styling, structure to TOC's.\n $(\".dropdown-menu\").each(function () {\n $(this).find(\"ul\").each(function (index, item){\n var $item = $(item);\n $item.addClass('unstyled');\n });\n });\n\n // Global TOC.\n if ($(\"ul.globaltoc li\").length) {\n patchToc($(\"ul.globaltoc\"), 1);\n } else {\n // Remove Global TOC.\n $(\".globaltoc-container\").remove();\n }\n\n // Local TOC.\n patchToc($(\"ul.localtoc\"), 2);\n\n // Mutate sub-lists (for bs-2.3.0).\n $(\".dropdown-menu ul\").not(\".dropdown-menu\").each(function () {\n var $ul = $(this),\n $parent = $ul.parent(),\n tag = $parent[0].tagName.toLowerCase(),\n $kids = $ul.children().detach();\n\n // Replace list with items if submenu header.\n if (tag === \"ul\") {\n $ul.replaceWith($kids);\n } else if (tag === \"li\") {\n // Insert into previous list.\n $parent.after($kids);\n $ul.remove();\n }\n });\n\n // Add divider in page TOC.\n $localLi = $(\"ul.localtoc li\");\n if ($localLi.length > 2) {\n $localLi.first().after('
  • ');\n }\n\n // Enable dropdown.\n $('.dropdown-toggle').dropdown();\n\n // Patch tables.\n patchTables();\n\n // Add Note, Warning styles.\n $('div.note').addClass('alert').addClass('alert-info');\n $('div.warning').addClass('alert').addClass('alert-warning');\n\n // Inline code styles to Bootstrap style.\n $('tt.docutils.literal').not(\".xref\").each(function (i, e) {\n // ignore references\n if (!$(e).parent().hasClass(\"reference\")) {\n $(e).replaceWith(function () {\n return $(\"\").text($(this).text());\n });\n }});\n });\n}(window.jQuery));\n","var codeExercises;\nvar presenterCssLink;\nvar presentModeInitialized = false;\n\nfunction presentToggle() {\n if (!presentModeInitialized) {\n presentModeSetup();\n presentModeInitialized = true;\n }\n let bod = $(\"body\");\n let presentClass = \"present\";\n let fullHeightClass = \"full-height\";\n let bottomClass = \"bottom\";\n if (bod.hasClass(presentClass)) {\n $(\"section *\")\n .not(\n \"h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code\"\n )\n .removeClass(\"hidden\"); //show everything\n $(\"#completionButton\").removeClass(\"hidden\");\n bod.removeClass(presentClass);\n $(\".\" + fullHeightClass).removeClass(fullHeightClass);\n $(\".\" + bottomClass).removeClass(bottomClass);\n localStorage.setItem(\"presentMode\", \"text\");\n codeExercises.removeClass(\"hidden\");\n presenterCssLink.disabled = true; // disable present_mode.css\n } else {\n $(\"section *\")\n .not(\n \"h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code\"\n )\n .addClass(\"hidden\"); // hide extraneous stuff\n $(\"#completionButton\").addClass(\"hidden\");\n bod.addClass(presentClass);\n bod.addClass(fullHeightClass);\n $(\"html\").addClass(fullHeightClass);\n $(\"section .runestone\").addClass(fullHeightClass);\n $(\".ac-caption\").addClass(bottomClass);\n localStorage.setItem(\"presentMode\", presentClass);\n // presenter_mode.css is loaded by webpack\n //loadPresenterCss(); // present_mode.css should only apply when in presenter mode.\n activateExercise();\n }\n}\n\nfunction loadPresenterCss() {\n presenterCssLink = document.createElement(\"link\");\n presenterCssLink.type = \"text/css\";\n presenterCssLink.href = \"../_static/presenter_mode.less\";\n presenterCssLink.rel = \"stylesheet\";\n document.getElementsByTagName(\"head\")[0].appendChild(presenterCssLink);\n}\n\nfunction presentModeSetup() {\n // moved this out of configure\n let dataComponent = $(\"[data-childcomponent]\");\n\n // this still leaves some things semi-messed up when you exit presenter mode.\n // but instructors will probably just learn to refresh the page.\n dataComponent.addClass(\"runestone\");\n dataComponent.parent().closest(\"div\").not(\"section\").addClass(\"runestone\");\n dataComponent.parent().closest(\"div\").css(\"max-width\", \"none\");\n\n dataComponent.each(function (index) {\n let me = $(this);\n $(this)\n .find(\".ac_code_div, .ac_output\")\n .wrapAll(\"
    \");\n });\n\n codelensListener(500);\n $(\"section img\").wrap('
    ');\n codeExercises = $(\".runestone\").not(\".runestone .runestone\");\n // codeExercises.each(function(){\n $(\"h1\").before(\n \"
    \\\n \\\n \\\n
    \"\n );\n}\nfunction getActiveExercise() {\n return (active = codeExercises.filter(\".active\"));\n}\n\nfunction activateExercise(index) {\n if (typeof index == \"undefined\") {\n index = 0;\n }\n\n let active = getActiveExercise();\n\n if (codeExercises.length) {\n active.removeClass(\"active\");\n active = $(codeExercises[index]).addClass(\"active\");\n active.removeClass(\"hidden\");\n codeExercises.not(codeExercises.filter(\".active\")).addClass(\"hidden\");\n }\n}\n\nwindow.nextExercise = function() {\n let active = getActiveExercise();\n let nextIndex = codeExercises.index(active) + 1;\n if (nextIndex < codeExercises.length) {\n activateExercise(nextIndex);\n }\n}\n\nwindow.prevExercise = function() {\n let active = getActiveExercise();\n let prevIndex = codeExercises.index(active) - 1;\n if (prevIndex >= 0) {\n activateExercise(prevIndex);\n }\n}\n\nfunction configure() {\n let rightNav = $(\".navbar-right\");\n rightNav.prepend(\n \"\"\n );\n\n let modeSelect = $(\".mode-select\").change(presentToggle);\n}\n\nfunction codelensListener(duration) {\n // $(\".ExecutionVisualizer\").length ? configureCodelens() : setTimeout(codelensListener, duration);\n // configureCodelens();\n}\n\nfunction configureCodelens() {\n let acCodeTitle = document.createElement(\"h4\");\n acCodeTitle.textContent = \"Active Code Window\";\n let acCode = $(\".ac_code_div\");\n $(\".ac_code_div\").addClass(\"col-md-6\");\n acCode.prepend(acCodeTitle);\n\n acOutTitle = document.createElement(\"h4\");\n acOutTitle.textContent = \"Output Window\";\n let acOut = $(\".ac_output\").addClass(\"col-md-6\");\n $(\".ac_output\").prepend(acOutTitle);\n\n let sketchpadTitle = document.createElement(\"h4\");\n sketchpadTitle.textContent = \"Sketchpad\";\n let sketchpad = document.createElement(\"span\");\n $(sketchpad).addClass(\"sketchpad\");\n let sketchpadContainer = document.createElement(\"div\");\n $(sketchpadContainer).addClass(\"sketchpad-container\");\n sketchpadContainer.appendChild(sketchpadTitle);\n sketchpadContainer.appendChild(sketchpad);\n //$('.ac_output').append(sketchpadContainer);\n\n let visualizers = $(\".ExecutionVisualizer\");\n\n console.log(\"Econtainer: \", this.eContainer);\n\n $(\"[data-childcomponent]\").on(\"click\", \"button.row-mode\", function () {\n $(this).closest(\"[data-childcomponent]\").removeClass(\"card-mode\");\n $(this).closest(\"[data-childcomponent]\").addClass(\"row-mode\");\n $(this).next(\".card-mode\").removeClass(\"active-layout\");\n $(this).addClass(\"active-layout\");\n });\n\n $(\"[data-childcomponent]\").on(\"click\", \"button.card-mode\", function () {\n $(this).closest(\"[data-childcomponent]\").removeClass(\"row-mode\");\n $(this).closest(\"[data-childcomponent]\").addClass(\"card-mode\");\n $(this).prev(\".row-mode\").removeClass(\"active-layout\");\n $(this).addClass(\"active-layout\");\n });\n\n $(\"[data-childcomponent] .ac_section\").each(function () {\n $(this).prepend(\n '
    '\n );\n });\n\n visualizers.each(function (index) {\n let me = $(this);\n let col1 = me.find(\"#vizLayoutTdFirst\");\n let col2 = me.find(\"#vizLayoutTdSecond\");\n let dataVis = me.find(\"#dataViz\");\n let stackHeapTable = me.find(\"#stackHeapTable\");\n let output = me.find(\"#progOutputs\");\n output.css(\"display\", \"block\");\n me.parent().prepend(\n \"
    Example \" +\n (Number(index) + 1) +\n \"
    \"\n );\n });\n\n acCode.each(function () {\n let section = $(this).closest(\".ac-block\").parent();\n console.log(section, section.length);\n section.append(sketchpadContainer);\n });\n\n $(\"button.card-mode\").click();\n\n let modeSelect = $(\".mode-select\");\n let mode = localStorage.getItem(\"presentMode\");\n if (mode == \"present\") {\n modeSelect.val(\"present\");\n modeSelect.change();\n }\n}\n\n$(document).on(\"runestone:login-complete\", function () {\n // if user is instructor, enable presenter mode\n if (eBookConfig.isInstructor) {\n configure();\n }\n});\n","/*!\n * jQuery Internationalization library\n *\n * Copyright (C) 2012 Santhosh Thottingal\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to\n * choose one license or the other and you don't have to notify anyone which license you are using.\n * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n( function ( $ ) {\n\t'use strict';\n\n\t$.i18n = $.i18n || {};\n\t$.extend( $.i18n.fallbacks, {\n\t\tab: [ 'ru' ],\n\t\tace: [ 'id' ],\n\t\taln: [ 'sq' ],\n\t\t// Not so standard - als is supposed to be Tosk Albanian,\n\t\t// but in Wikipedia it's used for a Germanic language.\n\t\tals: [ 'gsw', 'de' ],\n\t\tan: [ 'es' ],\n\t\tanp: [ 'hi' ],\n\t\tarn: [ 'es' ],\n\t\tarz: [ 'ar' ],\n\t\tav: [ 'ru' ],\n\t\tay: [ 'es' ],\n\t\tba: [ 'ru' ],\n\t\tbar: [ 'de' ],\n\t\t'bat-smg': [ 'sgs', 'lt' ],\n\t\tbcc: [ 'fa' ],\n\t\t'be-x-old': [ 'be-tarask' ],\n\t\tbh: [ 'bho' ],\n\t\tbjn: [ 'id' ],\n\t\tbm: [ 'fr' ],\n\t\tbpy: [ 'bn' ],\n\t\tbqi: [ 'fa' ],\n\t\tbug: [ 'id' ],\n\t\t'cbk-zam': [ 'es' ],\n\t\tce: [ 'ru' ],\n\t\tcrh: [ 'crh-latn' ],\n\t\t'crh-cyrl': [ 'ru' ],\n\t\tcsb: [ 'pl' ],\n\t\tcv: [ 'ru' ],\n\t\t'de-at': [ 'de' ],\n\t\t'de-ch': [ 'de' ],\n\t\t'de-formal': [ 'de' ],\n\t\tdsb: [ 'de' ],\n\t\tdtp: [ 'ms' ],\n\t\tegl: [ 'it' ],\n\t\teml: [ 'it' ],\n\t\tff: [ 'fr' ],\n\t\tfit: [ 'fi' ],\n\t\t'fiu-vro': [ 'vro', 'et' ],\n\t\tfrc: [ 'fr' ],\n\t\tfrp: [ 'fr' ],\n\t\tfrr: [ 'de' ],\n\t\tfur: [ 'it' ],\n\t\tgag: [ 'tr' ],\n\t\tgan: [ 'gan-hant', 'zh-hant', 'zh-hans' ],\n\t\t'gan-hans': [ 'zh-hans' ],\n\t\t'gan-hant': [ 'zh-hant', 'zh-hans' ],\n\t\tgl: [ 'pt' ],\n\t\tglk: [ 'fa' ],\n\t\tgn: [ 'es' ],\n\t\tgsw: [ 'de' ],\n\t\thif: [ 'hif-latn' ],\n\t\thsb: [ 'de' ],\n\t\tht: [ 'fr' ],\n\t\tii: [ 'zh-cn', 'zh-hans' ],\n\t\tinh: [ 'ru' ],\n\t\tiu: [ 'ike-cans' ],\n\t\tjut: [ 'da' ],\n\t\tjv: [ 'id' ],\n\t\tkaa: [ 'kk-latn', 'kk-cyrl' ],\n\t\tkbd: [ 'kbd-cyrl' ],\n\t\tkhw: [ 'ur' ],\n\t\tkiu: [ 'tr' ],\n\t\tkk: [ 'kk-cyrl' ],\n\t\t'kk-arab': [ 'kk-cyrl' ],\n\t\t'kk-latn': [ 'kk-cyrl' ],\n\t\t'kk-cn': [ 'kk-arab', 'kk-cyrl' ],\n\t\t'kk-kz': [ 'kk-cyrl' ],\n\t\t'kk-tr': [ 'kk-latn', 'kk-cyrl' ],\n\t\tkl: [ 'da' ],\n\t\t'ko-kp': [ 'ko' ],\n\t\tkoi: [ 'ru' ],\n\t\tkrc: [ 'ru' ],\n\t\tks: [ 'ks-arab' ],\n\t\tksh: [ 'de' ],\n\t\tku: [ 'ku-latn' ],\n\t\t'ku-arab': [ 'ckb' ],\n\t\tkv: [ 'ru' ],\n\t\tlad: [ 'es' ],\n\t\tlb: [ 'de' ],\n\t\tlbe: [ 'ru' ],\n\t\tlez: [ 'ru' ],\n\t\tli: [ 'nl' ],\n\t\tlij: [ 'it' ],\n\t\tliv: [ 'et' ],\n\t\tlmo: [ 'it' ],\n\t\tln: [ 'fr' ],\n\t\tltg: [ 'lv' ],\n\t\tlzz: [ 'tr' ],\n\t\tmai: [ 'hi' ],\n\t\t'map-bms': [ 'jv', 'id' ],\n\t\tmg: [ 'fr' ],\n\t\tmhr: [ 'ru' ],\n\t\tmin: [ 'id' ],\n\t\tmo: [ 'ro' ],\n\t\tmrj: [ 'ru' ],\n\t\tmwl: [ 'pt' ],\n\t\tmyv: [ 'ru' ],\n\t\tmzn: [ 'fa' ],\n\t\tnah: [ 'es' ],\n\t\tnap: [ 'it' ],\n\t\tnds: [ 'de' ],\n\t\t'nds-nl': [ 'nl' ],\n\t\t'nl-informal': [ 'nl' ],\n\t\tno: [ 'nb' ],\n\t\tos: [ 'ru' ],\n\t\tpcd: [ 'fr' ],\n\t\tpdc: [ 'de' ],\n\t\tpdt: [ 'de' ],\n\t\tpfl: [ 'de' ],\n\t\tpms: [ 'it' ],\n\t\tpt: [ 'pt-br' ],\n\t\t'pt-br': [ 'pt' ],\n\t\tqu: [ 'es' ],\n\t\tqug: [ 'qu', 'es' ],\n\t\trgn: [ 'it' ],\n\t\trmy: [ 'ro' ],\n\t\t'roa-rup': [ 'rup' ],\n\t\true: [ 'uk', 'ru' ],\n\t\truq: [ 'ruq-latn', 'ro' ],\n\t\t'ruq-cyrl': [ 'mk' ],\n\t\t'ruq-latn': [ 'ro' ],\n\t\tsa: [ 'hi' ],\n\t\tsah: [ 'ru' ],\n\t\tscn: [ 'it' ],\n\t\tsg: [ 'fr' ],\n\t\tsgs: [ 'lt' ],\n\t\tsli: [ 'de' ],\n\t\tsr: [ 'sr-ec' ],\n\t\tsrn: [ 'nl' ],\n\t\tstq: [ 'de' ],\n\t\tsu: [ 'id' ],\n\t\tszl: [ 'pl' ],\n\t\ttcy: [ 'kn' ],\n\t\ttg: [ 'tg-cyrl' ],\n\t\ttt: [ 'tt-cyrl', 'ru' ],\n\t\t'tt-cyrl': [ 'ru' ],\n\t\tty: [ 'fr' ],\n\t\tudm: [ 'ru' ],\n\t\tug: [ 'ug-arab' ],\n\t\tuk: [ 'ru' ],\n\t\tvec: [ 'it' ],\n\t\tvep: [ 'et' ],\n\t\tvls: [ 'nl' ],\n\t\tvmf: [ 'de' ],\n\t\tvot: [ 'fi' ],\n\t\tvro: [ 'et' ],\n\t\twa: [ 'fr' ],\n\t\two: [ 'fr' ],\n\t\twuu: [ 'zh-hans' ],\n\t\txal: [ 'ru' ],\n\t\txmf: [ 'ka' ],\n\t\tyi: [ 'he' ],\n\t\tza: [ 'zh-hans' ],\n\t\tzea: [ 'nl' ],\n\t\tzh: [ 'zh-hans' ],\n\t\t'zh-classical': [ 'lzh' ],\n\t\t'zh-cn': [ 'zh-hans' ],\n\t\t'zh-hant': [ 'zh-hans' ],\n\t\t'zh-hk': [ 'zh-hant', 'zh-hans' ],\n\t\t'zh-min-nan': [ 'nan' ],\n\t\t'zh-mo': [ 'zh-hk', 'zh-hant', 'zh-hans' ],\n\t\t'zh-my': [ 'zh-sg', 'zh-hans' ],\n\t\t'zh-sg': [ 'zh-hans' ],\n\t\t'zh-tw': [ 'zh-hant', 'zh-hans' ],\n\t\t'zh-yue': [ 'yue' ]\n\t} );\n}( jQuery ) );\n","/* global pluralRuleParser */\n( function ( $ ) {\n\t'use strict';\n\n\t// jscs:disable\n\tvar language = {\n\t\t// CLDR plural rules generated using\n\t\t// libs/CLDRPluralRuleParser/tools/PluralXML2JSON.html\n\t\tpluralRules: {\n\t\t\tak: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tam: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tar: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n % 100 = 3..10',\n\t\t\t\tmany: 'n % 100 = 11..99'\n\t\t\t},\n\t\t\tars: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n % 100 = 3..10',\n\t\t\t\tmany: 'n % 100 = 11..99'\n\t\t\t},\n\t\t\tas: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tbe: {\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11',\n\t\t\t\tfew: 'n % 10 = 2..4 and n % 100 != 12..14',\n\t\t\t\tmany: 'n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14'\n\t\t\t},\n\t\t\tbh: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tbn: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tbr: {\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11,71,91',\n\t\t\t\ttwo: 'n % 10 = 2 and n % 100 != 12,72,92',\n\t\t\t\tfew: 'n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99',\n\t\t\t\tmany: 'n != 0 and n % 1000000 = 0'\n\t\t\t},\n\t\t\tbs: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\tcs: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'i = 2..4 and v = 0',\n\t\t\t\tmany: 'v != 0'\n\t\t\t},\n\t\t\tcy: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n = 3',\n\t\t\t\tmany: 'n = 6'\n\t\t\t},\n\t\t\tda: {\n\t\t\t\tone: 'n = 1 or t != 0 and i = 0,1'\n\t\t\t},\n\t\t\tdsb: {\n\t\t\t\tone: 'v = 0 and i % 100 = 1 or f % 100 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 100 = 2 or f % 100 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 3..4 or f % 100 = 3..4'\n\t\t\t},\n\t\t\tfa: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tff: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tfil: {\n\t\t\t\tone: 'v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9'\n\t\t\t},\n\t\t\tfr: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tga: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n = 3..6',\n\t\t\t\tmany: 'n = 7..10'\n\t\t\t},\n\t\t\tgd: {\n\t\t\t\tone: 'n = 1,11',\n\t\t\t\ttwo: 'n = 2,12',\n\t\t\t\tfew: 'n = 3..10,13..19'\n\t\t\t},\n\t\t\tgu: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tguw: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tgv: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 10 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 0,20,40,60,80',\n\t\t\t\tmany: 'v != 0'\n\t\t\t},\n\t\t\the: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\ttwo: 'i = 2 and v = 0',\n\t\t\t\tmany: 'v = 0 and n != 0..10 and n % 10 = 0'\n\t\t\t},\n\t\t\thi: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\thr: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\thsb: {\n\t\t\t\tone: 'v = 0 and i % 100 = 1 or f % 100 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 100 = 2 or f % 100 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 3..4 or f % 100 = 3..4'\n\t\t\t},\n\t\t\thy: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tis: {\n\t\t\t\tone: 't = 0 and i % 10 = 1 and i % 100 != 11 or t != 0'\n\t\t\t},\n\t\t\tiu: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tiw: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\ttwo: 'i = 2 and v = 0',\n\t\t\t\tmany: 'v = 0 and n != 0..10 and n % 10 = 0'\n\t\t\t},\n\t\t\tkab: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tkn: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tkw: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tlag: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'i = 0,1 and n != 0'\n\t\t\t},\n\t\t\tln: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tlt: {\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11..19',\n\t\t\t\tfew: 'n % 10 = 2..9 and n % 100 != 11..19',\n\t\t\t\tmany: 'f != 0'\n\t\t\t},\n\t\t\tlv: {\n\t\t\t\tzero: 'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19',\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1'\n\t\t\t},\n\t\t\tmg: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tmk: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 or f % 10 = 1'\n\t\t\t},\n\t\t\tmo: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'\n\t\t\t},\n\t\t\tmr: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tmt: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\tfew: 'n = 0 or n % 100 = 2..10',\n\t\t\t\tmany: 'n % 100 = 11..19'\n\t\t\t},\n\t\t\tnaq: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tnso: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tpa: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tpl: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',\n\t\t\t\tmany: 'v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14'\n\t\t\t},\n\t\t\tprg: {\n\t\t\t\tzero: 'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19',\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1'\n\t\t\t},\n\t\t\tpt: {\n\t\t\t\tone: 'i = 0..1'\n\t\t\t},\n\t\t\tro: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'\n\t\t\t},\n\t\t\tru: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',\n\t\t\t\tmany: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'\n\t\t\t},\n\t\t\tse: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsh: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\tshi: {\n\t\t\t\tone: 'i = 0 or n = 1',\n\t\t\t\tfew: 'n = 2..10'\n\t\t\t},\n\t\t\tsi: {\n\t\t\t\tone: 'n = 0,1 or i = 0 and f = 1'\n\t\t\t},\n\t\t\tsk: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'i = 2..4 and v = 0',\n\t\t\t\tmany: 'v != 0'\n\t\t\t},\n\t\t\tsl: {\n\t\t\t\tone: 'v = 0 and i % 100 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 100 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 3..4 or v != 0'\n\t\t\t},\n\t\t\tsma: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsmi: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsmj: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsmn: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsms: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsr: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\tti: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\ttl: {\n\t\t\t\tone: 'v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9'\n\t\t\t},\n\t\t\ttzm: {\n\t\t\t\tone: 'n = 0..1 or n = 11..99'\n\t\t\t},\n\t\t\tuk: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',\n\t\t\t\tmany: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'\n\t\t\t},\n\t\t\twa: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tzu: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t}\n\t\t},\n\t\t// jscs:enable\n\n\t\t/**\n\t\t * Plural form transformations, needed for some languages.\n\t\t *\n\t\t * @param {integer} count\n\t\t * Non-localized quantifier\n\t\t * @param {Array} forms\n\t\t * List of plural forms\n\t\t * @return {string} Correct form for quantifier in this language\n\t\t */\n\t\tconvertPlural: function ( count, forms ) {\n\t\t\tvar pluralRules,\n\t\t\t\tpluralFormIndex,\n\t\t\t\tindex,\n\t\t\t\texplicitPluralPattern = new RegExp( '\\\\d+=', 'i' ),\n\t\t\t\tformCount,\n\t\t\t\tform;\n\n\t\t\tif ( !forms || forms.length === 0 ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// Handle for Explicit 0= & 1= values\n\t\t\tfor ( index = 0; index < forms.length; index++ ) {\n\t\t\t\tform = forms[ index ];\n\t\t\t\tif ( explicitPluralPattern.test( form ) ) {\n\t\t\t\t\tformCount = parseInt( form.slice( 0, form.indexOf( '=' ) ), 10 );\n\t\t\t\t\tif ( formCount === count ) {\n\t\t\t\t\t\treturn ( form.slice( form.indexOf( '=' ) + 1 ) );\n\t\t\t\t\t}\n\t\t\t\t\tforms[ index ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tforms = $.map( forms, function ( form ) {\n\t\t\t\tif ( form !== undefined ) {\n\t\t\t\t\treturn form;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tpluralRules = this.pluralRules[ $.i18n().locale ];\n\n\t\t\tif ( !pluralRules ) {\n\t\t\t\t// default fallback.\n\t\t\t\treturn ( count === 1 ) ? forms[ 0 ] : forms[ 1 ];\n\t\t\t}\n\n\t\t\tpluralFormIndex = this.getPluralForm( count, pluralRules );\n\t\t\tpluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );\n\n\t\t\treturn forms[ pluralFormIndex ];\n\t\t},\n\n\t\t/**\n\t\t * For the number, get the plural for index\n\t\t *\n\t\t * @param {integer} number\n\t\t * @param {Object} pluralRules\n\t\t * @return {integer} plural form index\n\t\t */\n\t\tgetPluralForm: function ( number, pluralRules ) {\n\t\t\tvar i,\n\t\t\t\tpluralForms = [ 'zero', 'one', 'two', 'few', 'many', 'other' ],\n\t\t\t\tpluralFormIndex = 0;\n\n\t\t\tfor ( i = 0; i < pluralForms.length; i++ ) {\n\t\t\t\tif ( pluralRules[ pluralForms[ i ] ] ) {\n\t\t\t\t\tif ( pluralRuleParser( pluralRules[ pluralForms[ i ] ], number ) ) {\n\t\t\t\t\t\treturn pluralFormIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\tpluralFormIndex++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn pluralFormIndex;\n\t\t},\n\n\t\t/**\n\t\t * Converts a number using digitTransformTable.\n\t\t *\n\t\t * @param {number} num Value to be converted\n\t\t * @param {boolean} integer Convert the return value to an integer\n\t\t * @return {string} The number converted into a String.\n\t\t */\n\t\tconvertNumber: function ( num, integer ) {\n\t\t\tvar tmp, item, i,\n\t\t\t\ttransformTable, numberString, convertedNumber;\n\n\t\t\t// Set the target Transform table:\n\t\t\ttransformTable = this.digitTransformTable( $.i18n().locale );\n\t\t\tnumberString = String( num );\n\t\t\tconvertedNumber = '';\n\n\t\t\tif ( !transformTable ) {\n\t\t\t\treturn num;\n\t\t\t}\n\n\t\t\t// Check if the restore to Latin number flag is set:\n\t\t\tif ( integer ) {\n\t\t\t\tif ( parseFloat( num, 10 ) === num ) {\n\t\t\t\t\treturn num;\n\t\t\t\t}\n\n\t\t\t\ttmp = [];\n\n\t\t\t\tfor ( item in transformTable ) {\n\t\t\t\t\ttmp[ transformTable[ item ] ] = item;\n\t\t\t\t}\n\n\t\t\t\ttransformTable = tmp;\n\t\t\t}\n\n\t\t\tfor ( i = 0; i < numberString.length; i++ ) {\n\t\t\t\tif ( transformTable[ numberString[ i ] ] ) {\n\t\t\t\t\tconvertedNumber += transformTable[ numberString[ i ] ];\n\t\t\t\t} else {\n\t\t\t\t\tconvertedNumber += numberString[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn integer ? parseFloat( convertedNumber, 10 ) : convertedNumber;\n\t\t},\n\n\t\t/**\n\t\t * Grammatical transformations, needed for inflected languages.\n\t\t * Invoked by putting {{grammar:form|word}} in a message.\n\t\t * Override this method for languages that need special grammar rules\n\t\t * applied dynamically.\n\t\t *\n\t\t * @param {string} word\n\t\t * @param {string} form\n\t\t * @return {string}\n\t\t */\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tconvertGrammar: function ( word, form ) {\n\t\t\treturn word;\n\t\t},\n\n\t\t/**\n\t\t * Provides an alternative text depending on specified gender. Usage\n\t\t * {{gender:[gender|user object]|masculine|feminine|neutral}}. If second\n\t\t * or third parameter are not specified, masculine is used.\n\t\t *\n\t\t * These details may be overriden per language.\n\t\t *\n\t\t * @param {string} gender\n\t\t * male, female, or anything else for neutral.\n\t\t * @param {Array} forms\n\t\t * List of gender forms\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgender: function ( gender, forms ) {\n\t\t\tif ( !forms || forms.length === 0 ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\twhile ( forms.length < 2 ) {\n\t\t\t\tforms.push( forms[ forms.length - 1 ] );\n\t\t\t}\n\n\t\t\tif ( gender === 'male' ) {\n\t\t\t\treturn forms[ 0 ];\n\t\t\t}\n\n\t\t\tif ( gender === 'female' ) {\n\t\t\t\treturn forms[ 1 ];\n\t\t\t}\n\n\t\t\treturn ( forms.length === 3 ) ? forms[ 2 ] : forms[ 0 ];\n\t\t},\n\n\t\t/**\n\t\t * Get the digit transform table for the given language\n\t\t * See http://cldr.unicode.org/translation/numbering-systems\n\t\t *\n\t\t * @param {string} language\n\t\t * @return {Array|boolean} List of digits in the passed language or false\n\t\t * representation, or boolean false if there is no information.\n\t\t */\n\t\tdigitTransformTable: function ( language ) {\n\t\t\tvar tables = {\n\t\t\t\tar: '٠١٢٣٤٥٦٧٨٩',\n\t\t\t\tfa: '۰۱۲۳۴۵۶۷۸۹',\n\t\t\t\tml: '൦൧൨൩൪൫൬൭൮൯',\n\t\t\t\tkn: '೦೧೨೩೪೫೬೭೮೯',\n\t\t\t\tlo: '໐໑໒໓໔໕໖໗໘໙',\n\t\t\t\tor: '୦୧୨୩୪୫୬୭୮୯',\n\t\t\t\tkh: '០១២៣៤៥៦៧៨៩',\n\t\t\t\tpa: '੦੧੨੩੪੫੬੭੮੯',\n\t\t\t\tgu: '૦૧૨૩૪૫૬૭૮૯',\n\t\t\t\thi: '०१२३४५६७८९',\n\t\t\t\tmy: '၀၁၂၃၄၅၆၇၈၉',\n\t\t\t\tta: '௦௧௨௩௪௫௬௭௮௯',\n\t\t\t\tte: '౦౧౨౩౪౫౬౭౮౯',\n\t\t\t\tth: '๐๑๒๓๔๕๖๗๘๙', // FIXME use iso 639 codes\n\t\t\t\tbo: '༠༡༢༣༤༥༦༧༨༩' // FIXME use iso 639 codes\n\t\t\t};\n\n\t\t\tif ( !tables[ language ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn tables[ language ].split( '' );\n\t\t}\n\t};\n\n\t$.extend( $.i18n.languages, {\n\t\t'default': language\n\t} );\n}( jQuery ) );\n","/*!\n * BIDI embedding support for jQuery.i18n\n *\n * Copyright (C) 2015, David Chan\n *\n * This code is dual licensed GPLv2 or later and MIT. You don't have to do\n * anything special to choose one license or the other and you don't have to\n * notify anyone which license you are using. You are free to use this code\n * in commercial projects as long as the copyright header is left intact.\n * See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\tvar strongDirRegExp;\n\n\t/**\n\t * Matches the first strong directionality codepoint:\n\t * - in group 1 if it is LTR\n\t * - in group 2 if it is RTL\n\t * Does not match if there is no strong directionality codepoint.\n\t *\n\t * Generated by UnicodeJS (see tools/strongDir) from the UCD; see\n\t * https://phabricator.wikimedia.org/diffusion/GUJS/ .\n\t */\n\tstrongDirRegExp = new RegExp(\n\t\t'(?:' +\n\t\t\t'(' +\n\t\t\t\t'[\\u0041-\\u005a\\u0061-\\u007a\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02b8\\u02bb-\\u02c1\\u02d0\\u02d1\\u02e0-\\u02e4\\u02ee\\u0370-\\u0373\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0482\\u048a-\\u052f\\u0531-\\u0556\\u0559-\\u055f\\u0561-\\u0587\\u0589\\u0903-\\u0939\\u093b\\u093d-\\u0940\\u0949-\\u094c\\u094e-\\u0950\\u0958-\\u0961\\u0964-\\u0980\\u0982\\u0983\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd-\\u09c0\\u09c7\\u09c8\\u09cb\\u09cc\\u09ce\\u09d7\\u09dc\\u09dd\\u09df-\\u09e1\\u09e6-\\u09f1\\u09f4-\\u09fa\\u0a03\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a3e-\\u0a40\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a6f\\u0a72-\\u0a74\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd-\\u0ac0\\u0ac9\\u0acb\\u0acc\\u0ad0\\u0ae0\\u0ae1\\u0ae6-\\u0af0\\u0af9\\u0b02\\u0b03\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b3e\\u0b40\\u0b47\\u0b48\\u0b4b\\u0b4c\\u0b57\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b66-\\u0b77\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe\\u0bbf\\u0bc1\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcc\\u0bd0\\u0bd7\\u0be6-\\u0bf2\\u0c01-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c41-\\u0c44\\u0c58-\\u0c5a\\u0c60\\u0c61\\u0c66-\\u0c6f\\u0c7f\\u0c82\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd-\\u0cc4\\u0cc6-\\u0cc8\\u0cca\\u0ccb\\u0cd5\\u0cd6\\u0cde\\u0ce0\\u0ce1\\u0ce6-\\u0cef\\u0cf1\\u0cf2\\u0d02\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d40\\u0d46-\\u0d48\\u0d4a-\\u0d4c\\u0d4e\\u0d57\\u0d5f-\\u0d61\\u0d66-\\u0d75\\u0d79-\\u0d7f\\u0d82\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dcf-\\u0dd1\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df4\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e4f-\\u0e5b\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00-\\u0f17\\u0f1a-\\u0f34\\u0f36\\u0f38\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f7f\\u0f85\\u0f88-\\u0f8c\\u0fbe-\\u0fc5\\u0fc7-\\u0fcc\\u0fce-\\u0fda\\u1000-\\u102c\\u1031\\u1038\\u103b\\u103c\\u103f-\\u1057\\u105a-\\u105d\\u1061-\\u1070\\u1075-\\u1081\\u1083\\u1084\\u1087-\\u108c\\u108e-\\u109c\\u109e-\\u10c5\\u10c7\\u10cd\\u10d0-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1360-\\u137c\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u167f\\u1681-\\u169a\\u16a0-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1735\\u1736\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17b6\\u17be-\\u17c5\\u17c7\\u17c8\\u17d4-\\u17da\\u17dc\\u17e0-\\u17e9\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1923-\\u1926\\u1929-\\u192b\\u1930\\u1931\\u1933-\\u1938\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19da\\u1a00-\\u1a16\\u1a19\\u1a1a\\u1a1e-\\u1a55\\u1a57\\u1a61\\u1a63\\u1a64\\u1a6d-\\u1a72\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1aa0-\\u1aad\\u1b04-\\u1b33\\u1b35\\u1b3b\\u1b3d-\\u1b41\\u1b43-\\u1b4b\\u1b50-\\u1b6a\\u1b74-\\u1b7c\\u1b82-\\u1ba1\\u1ba6\\u1ba7\\u1baa\\u1bae-\\u1be5\\u1be7\\u1bea-\\u1bec\\u1bee\\u1bf2\\u1bf3\\u1bfc-\\u1c2b\\u1c34\\u1c35\\u1c3b-\\u1c49\\u1c4d-\\u1c7f\\u1cc0-\\u1cc7\\u1cd3\\u1ce1\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200e\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u214f\\u2160-\\u2188\\u2336-\\u237a\\u2395\\u249c-\\u24e9\\u26ac\\u2800-\\u28ff\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d70\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u302e\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u3190-\\u31ba\\u31f0-\\u321c\\u3220-\\u324f\\u3260-\\u327b\\u327f-\\u32b0\\u32c0-\\u32cb\\u32d0-\\u32fe\\u3300-\\u3376\\u337b-\\u33dd\\u33e0-\\u33fe\\u3400-\\u4db5\\u4e00-\\u9fd5\\ua000-\\ua48c\\ua4d0-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66e\\ua680-\\ua69d\\ua6a0-\\ua6ef\\ua6f2-\\ua6f7\\ua722-\\ua787\\ua789-\\ua7ad\\ua7b0-\\ua7b7\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua824\\ua827\\ua830-\\ua837\\ua840-\\ua873\\ua880-\\ua8c3\\ua8ce-\\ua8d9\\ua8f2-\\ua8fd\\ua900-\\ua925\\ua92e-\\ua946\\ua952\\ua953\\ua95f-\\ua97c\\ua983-\\ua9b2\\ua9b4\\ua9b5\\ua9ba\\ua9bb\\ua9bd-\\ua9cd\\ua9cf-\\ua9d9\\ua9de-\\ua9e4\\ua9e6-\\ua9fe\\uaa00-\\uaa28\\uaa2f\\uaa30\\uaa33\\uaa34\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa4d\\uaa50-\\uaa59\\uaa5c-\\uaa7b\\uaa7d-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaaeb\\uaaee-\\uaaf5\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab65\\uab70-\\uabe4\\uabe6\\uabe7\\uabe9-\\uabec\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ue000-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]|\\ud800[\\udc00-\\udc0b]|\\ud800[\\udc0d-\\udc26]|\\ud800[\\udc28-\\udc3a]|\\ud800\\udc3c|\\ud800\\udc3d|\\ud800[\\udc3f-\\udc4d]|\\ud800[\\udc50-\\udc5d]|\\ud800[\\udc80-\\udcfa]|\\ud800\\udd00|\\ud800\\udd02|\\ud800[\\udd07-\\udd33]|\\ud800[\\udd37-\\udd3f]|\\ud800[\\uddd0-\\uddfc]|\\ud800[\\ude80-\\ude9c]|\\ud800[\\udea0-\\uded0]|\\ud800[\\udf00-\\udf23]|\\ud800[\\udf30-\\udf4a]|\\ud800[\\udf50-\\udf75]|\\ud800[\\udf80-\\udf9d]|\\ud800[\\udf9f-\\udfc3]|\\ud800[\\udfc8-\\udfd5]|\\ud801[\\udc00-\\udc9d]|\\ud801[\\udca0-\\udca9]|\\ud801[\\udd00-\\udd27]|\\ud801[\\udd30-\\udd63]|\\ud801\\udd6f|\\ud801[\\ude00-\\udf36]|\\ud801[\\udf40-\\udf55]|\\ud801[\\udf60-\\udf67]|\\ud804\\udc00|\\ud804[\\udc02-\\udc37]|\\ud804[\\udc47-\\udc4d]|\\ud804[\\udc66-\\udc6f]|\\ud804[\\udc82-\\udcb2]|\\ud804\\udcb7|\\ud804\\udcb8|\\ud804[\\udcbb-\\udcc1]|\\ud804[\\udcd0-\\udce8]|\\ud804[\\udcf0-\\udcf9]|\\ud804[\\udd03-\\udd26]|\\ud804\\udd2c|\\ud804[\\udd36-\\udd43]|\\ud804[\\udd50-\\udd72]|\\ud804[\\udd74-\\udd76]|\\ud804[\\udd82-\\uddb5]|\\ud804[\\uddbf-\\uddc9]|\\ud804\\uddcd|\\ud804[\\uddd0-\\udddf]|\\ud804[\\udde1-\\uddf4]|\\ud804[\\ude00-\\ude11]|\\ud804[\\ude13-\\ude2e]|\\ud804\\ude32|\\ud804\\ude33|\\ud804\\ude35|\\ud804[\\ude38-\\ude3d]|\\ud804[\\ude80-\\ude86]|\\ud804\\ude88|\\ud804[\\ude8a-\\ude8d]|\\ud804[\\ude8f-\\ude9d]|\\ud804[\\ude9f-\\udea9]|\\ud804[\\udeb0-\\udede]|\\ud804[\\udee0-\\udee2]|\\ud804[\\udef0-\\udef9]|\\ud804\\udf02|\\ud804\\udf03|\\ud804[\\udf05-\\udf0c]|\\ud804\\udf0f|\\ud804\\udf10|\\ud804[\\udf13-\\udf28]|\\ud804[\\udf2a-\\udf30]|\\ud804\\udf32|\\ud804\\udf33|\\ud804[\\udf35-\\udf39]|\\ud804[\\udf3d-\\udf3f]|\\ud804[\\udf41-\\udf44]|\\ud804\\udf47|\\ud804\\udf48|\\ud804[\\udf4b-\\udf4d]|\\ud804\\udf50|\\ud804\\udf57|\\ud804[\\udf5d-\\udf63]|\\ud805[\\udc80-\\udcb2]|\\ud805\\udcb9|\\ud805[\\udcbb-\\udcbe]|\\ud805\\udcc1|\\ud805[\\udcc4-\\udcc7]|\\ud805[\\udcd0-\\udcd9]|\\ud805[\\udd80-\\uddb1]|\\ud805[\\uddb8-\\uddbb]|\\ud805\\uddbe|\\ud805[\\uddc1-\\udddb]|\\ud805[\\ude00-\\ude32]|\\ud805\\ude3b|\\ud805\\ude3c|\\ud805\\ude3e|\\ud805[\\ude41-\\ude44]|\\ud805[\\ude50-\\ude59]|\\ud805[\\ude80-\\udeaa]|\\ud805\\udeac|\\ud805\\udeae|\\ud805\\udeaf|\\ud805\\udeb6|\\ud805[\\udec0-\\udec9]|\\ud805[\\udf00-\\udf19]|\\ud805\\udf20|\\ud805\\udf21|\\ud805\\udf26|\\ud805[\\udf30-\\udf3f]|\\ud806[\\udca0-\\udcf2]|\\ud806\\udcff|\\ud806[\\udec0-\\udef8]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e]|\\ud809[\\udc70-\\udc74]|\\ud809[\\udc80-\\udd43]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38]|\\ud81a[\\ude40-\\ude5e]|\\ud81a[\\ude60-\\ude69]|\\ud81a\\ude6e|\\ud81a\\ude6f|\\ud81a[\\uded0-\\udeed]|\\ud81a\\udef5|\\ud81a[\\udf00-\\udf2f]|\\ud81a[\\udf37-\\udf45]|\\ud81a[\\udf50-\\udf59]|\\ud81a[\\udf5b-\\udf61]|\\ud81a[\\udf63-\\udf77]|\\ud81a[\\udf7d-\\udf8f]|\\ud81b[\\udf00-\\udf44]|\\ud81b[\\udf50-\\udf7e]|\\ud81b[\\udf93-\\udf9f]|\\ud82c\\udc00|\\ud82c\\udc01|\\ud82f[\\udc00-\\udc6a]|\\ud82f[\\udc70-\\udc7c]|\\ud82f[\\udc80-\\udc88]|\\ud82f[\\udc90-\\udc99]|\\ud82f\\udc9c|\\ud82f\\udc9f|\\ud834[\\udc00-\\udcf5]|\\ud834[\\udd00-\\udd26]|\\ud834[\\udd29-\\udd66]|\\ud834[\\udd6a-\\udd72]|\\ud834\\udd83|\\ud834\\udd84|\\ud834[\\udd8c-\\udda9]|\\ud834[\\uddae-\\udde8]|\\ud834[\\udf60-\\udf71]|\\ud835[\\udc00-\\udc54]|\\ud835[\\udc56-\\udc9c]|\\ud835\\udc9e|\\ud835\\udc9f|\\ud835\\udca2|\\ud835\\udca5|\\ud835\\udca6|\\ud835[\\udca9-\\udcac]|\\ud835[\\udcae-\\udcb9]|\\ud835\\udcbb|\\ud835[\\udcbd-\\udcc3]|\\ud835[\\udcc5-\\udd05]|\\ud835[\\udd07-\\udd0a]|\\ud835[\\udd0d-\\udd14]|\\ud835[\\udd16-\\udd1c]|\\ud835[\\udd1e-\\udd39]|\\ud835[\\udd3b-\\udd3e]|\\ud835[\\udd40-\\udd44]|\\ud835\\udd46|\\ud835[\\udd4a-\\udd50]|\\ud835[\\udd52-\\udea5]|\\ud835[\\udea8-\\udeda]|\\ud835[\\udedc-\\udf14]|\\ud835[\\udf16-\\udf4e]|\\ud835[\\udf50-\\udf88]|\\ud835[\\udf8a-\\udfc2]|\\ud835[\\udfc4-\\udfcb]|\\ud836[\\udc00-\\uddff]|\\ud836[\\ude37-\\ude3a]|\\ud836[\\ude6d-\\ude74]|\\ud836[\\ude76-\\ude83]|\\ud836[\\ude85-\\ude8b]|\\ud83c[\\udd10-\\udd2e]|\\ud83c[\\udd30-\\udd69]|\\ud83c[\\udd70-\\udd9a]|\\ud83c[\\udde6-\\ude02]|\\ud83c[\\ude10-\\ude3a]|\\ud83c[\\ude40-\\ude48]|\\ud83c\\ude50|\\ud83c\\ude51|[\\ud840-\\ud868][\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6]|\\ud869[\\udf00-\\udfff]|[\\ud86a-\\ud86c][\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34]|\\ud86d[\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d]|\\ud86e[\\udc20-\\udfff]|[\\ud86f-\\ud872][\\udc00-\\udfff]|\\ud873[\\udc00-\\udea1]|\\ud87e[\\udc00-\\ude1d]|[\\udb80-\\udbbe][\\udc00-\\udfff]|\\udbbf[\\udc00-\\udffd]|[\\udbc0-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udffd]' +\n\t\t\t')|(' +\n\t\t\t\t'[\\u0590\\u05be\\u05c0\\u05c3\\u05c6\\u05c8-\\u05ff\\u07c0-\\u07ea\\u07f4\\u07f5\\u07fa-\\u0815\\u081a\\u0824\\u0828\\u082e-\\u0858\\u085c-\\u089f\\u200f\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb4f\\u0608\\u060b\\u060d\\u061b-\\u064a\\u066d-\\u066f\\u0671-\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u0710\\u0712-\\u072f\\u074b-\\u07a5\\u07b1-\\u07bf\\u08a0-\\u08e2\\ufb50-\\ufd3d\\ufd40-\\ufdcf\\ufdf0-\\ufdfc\\ufdfe\\ufdff\\ufe70-\\ufefe]|\\ud802[\\udc00-\\udd1e]|\\ud802[\\udd20-\\ude00]|\\ud802\\ude04|\\ud802[\\ude07-\\ude0b]|\\ud802[\\ude10-\\ude37]|\\ud802[\\ude3b-\\ude3e]|\\ud802[\\ude40-\\udee4]|\\ud802[\\udee7-\\udf38]|\\ud802[\\udf40-\\udfff]|\\ud803[\\udc00-\\ude5f]|\\ud803[\\ude7f-\\udfff]|\\ud83a[\\udc00-\\udccf]|\\ud83a[\\udcd7-\\udfff]|\\ud83b[\\udc00-\\uddff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\udf00-\\udfff]|\\ud83b[\\ude00-\\udeef]|\\ud83b[\\udef2-\\udeff]' +\n\t\t\t')' +\n\t\t')'\n\t);\n\n\t/**\n\t * Gets directionality of the first strongly directional codepoint\n\t *\n\t * This is the rule the BIDI algorithm uses to determine the directionality of\n\t * paragraphs ( http://unicode.org/reports/tr9/#The_Paragraph_Level ) and\n\t * FSI isolates ( http://unicode.org/reports/tr9/#Explicit_Directional_Isolates ).\n\t *\n\t * TODO: Does not handle BIDI control characters inside the text.\n\t * TODO: Does not handle unallocated characters.\n\t *\n\t * @param {string} text The text from which to extract initial directionality.\n\t * @return {string} Directionality (either 'ltr' or 'rtl')\n\t */\n\tfunction strongDirFromContent( text ) {\n\t\tvar m = text.match( strongDirRegExp );\n\t\tif ( !m ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( m[ 2 ] === undefined ) {\n\t\t\treturn 'ltr';\n\t\t}\n\t\treturn 'rtl';\n\t}\n\n\t$.extend( $.i18n.parser.emitter, {\n\t\t/**\n\t\t * Wraps argument with unicode control characters for directionality safety\n\t\t *\n\t\t * This solves the problem where directionality-neutral characters at the edge of\n\t\t * the argument string get interpreted with the wrong directionality from the\n\t\t * enclosing context, giving renderings that look corrupted like \"(Ben_(WMF\".\n\t\t *\n\t\t * The wrapping is LRE...PDF or RLE...PDF, depending on the detected\n\t\t * directionality of the argument string, using the BIDI algorithm's own \"First\n\t\t * strong directional codepoint\" rule. Essentially, this works round the fact that\n\t\t * there is no embedding equivalent of U+2068 FSI (isolation with heuristic\n\t\t * direction inference). The latter is cleaner but still not widely supported.\n\t\t *\n\t\t * @param {string[]} nodes The text nodes from which to take the first item.\n\t\t * @return {string} Wrapped String of content as needed.\n\t\t */\n\t\tbidi: function ( nodes ) {\n\t\t\tvar dir = strongDirFromContent( nodes[ 0 ] );\n\t\t\tif ( dir === 'ltr' ) {\n\t\t\t\t// Wrap in LEFT-TO-RIGHT EMBEDDING ... POP DIRECTIONAL FORMATTING\n\t\t\t\treturn '\\u202A' + nodes[ 0 ] + '\\u202C';\n\t\t\t}\n\t\t\tif ( dir === 'rtl' ) {\n\t\t\t\t// Wrap in RIGHT-TO-LEFT EMBEDDING ... POP DIRECTIONAL FORMATTING\n\t\t\t\treturn '\\u202B' + nodes[ 0 ] + '\\u202C';\n\t\t\t}\n\t\t\t// No strong directionality: do not wrap\n\t\t\treturn nodes[ 0 ];\n\t\t}\n\t} );\n}( jQuery ) );\n","module.exports = jQuery;","/*!\n * jQuery Internationalization library\n *\n * Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do\n * anything special to choose one license or the other and you don't have to\n * notify anyone which license you are using. You are free to use\n * UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar MessageParserEmitter = function () {\n\t\tthis.language = $.i18n.languages[ String.locale ] || $.i18n.languages[ 'default' ];\n\t};\n\n\tMessageParserEmitter.prototype = {\n\t\tconstructor: MessageParserEmitter,\n\n\t\t/**\n\t\t * (We put this method definition here, and not in prototype, to make\n\t\t * sure it's not overwritten by any magic.) Walk entire node structure,\n\t\t * applying replacements and template functions when appropriate\n\t\t *\n\t\t * @param {Mixed} node abstract syntax tree (top node or subnode)\n\t\t * @param {Array} replacements for $1, $2, ... $n\n\t\t * @return {Mixed} single-string node or array of nodes suitable for\n\t\t * jQuery appending.\n\t\t */\n\t\temit: function ( node, replacements ) {\n\t\t\tvar ret, subnodes, operation,\n\t\t\t\tmessageParserEmitter = this;\n\n\t\t\tswitch ( typeof node ) {\n\t\t\t\tcase 'string':\n\t\t\t\tcase 'number':\n\t\t\t\t\tret = node;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'object':\n\t\t\t\t// node is an array of nodes\n\t\t\t\t\tsubnodes = $.map( node.slice( 1 ), function ( n ) {\n\t\t\t\t\t\treturn messageParserEmitter.emit( n, replacements );\n\t\t\t\t\t} );\n\n\t\t\t\t\toperation = node[ 0 ].toLowerCase();\n\n\t\t\t\t\tif ( typeof messageParserEmitter[ operation ] === 'function' ) {\n\t\t\t\t\t\tret = messageParserEmitter[ operation ]( subnodes, replacements );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error( 'unknown operation \"' + operation + '\"' );\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'undefined':\n\t\t\t\t// Parsing the empty string (as an entire expression, or as a\n\t\t\t\t// paramExpression in a template) results in undefined\n\t\t\t\t// Perhaps a more clever parser can detect this, and return the\n\t\t\t\t// empty string? Or is that useful information?\n\t\t\t\t// The logical thing is probably to return the empty string here\n\t\t\t\t// when we encounter undefined.\n\t\t\t\t\tret = '';\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'unexpected type in AST: ' + typeof node );\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t/**\n\t\t * Parsing has been applied depth-first we can assume that all nodes\n\t\t * here are single nodes Must return a single node to parents -- a\n\t\t * jQuery with synthetic span However, unwrap any other synthetic spans\n\t\t * in our children and pass them upwards\n\t\t *\n\t\t * @param {Array} nodes Mixed, some single nodes, some arrays of nodes.\n\t\t * @return {string}\n\t\t */\n\t\tconcat: function ( nodes ) {\n\t\t\tvar result = '';\n\n\t\t\t$.each( nodes, function ( i, node ) {\n\t\t\t\t// strings, integers, anything else\n\t\t\t\tresult += node;\n\t\t\t} );\n\n\t\t\treturn result;\n\t\t},\n\n\t\t/**\n\t\t * Return escaped replacement of correct index, or string if\n\t\t * unavailable. Note that we expect the parsed parameter to be\n\t\t * zero-based. i.e. $1 should have become [ 0 ]. if the specified\n\t\t * parameter is not found return the same string (e.g. \"$99\" ->\n\t\t * parameter 98 -> not found -> return \"$99\" ) TODO throw error if\n\t\t * nodes.length > 1 ?\n\t\t *\n\t\t * @param {Array} nodes One element, integer, n >= 0\n\t\t * @param {Array} replacements for $1, $2, ... $n\n\t\t * @return {string} replacement\n\t\t */\n\t\treplace: function ( nodes, replacements ) {\n\t\t\tvar index = parseInt( nodes[ 0 ], 10 );\n\n\t\t\tif ( index < replacements.length ) {\n\t\t\t\t// replacement is not a string, don't touch!\n\t\t\t\treturn replacements[ index ];\n\t\t\t} else {\n\t\t\t\t// index not found, fallback to displaying variable\n\t\t\t\treturn '$' + ( index + 1 );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Transform parsed structure into pluralization n.b. The first node may\n\t\t * be a non-integer (for instance, a string representing an Arabic\n\t\t * number). So convert it back with the current language's\n\t\t * convertNumber.\n\t\t *\n\t\t * @param {Array} nodes List [ {String|Number}, {String}, {String} ... ]\n\t\t * @return {string} selected pluralized form according to current\n\t\t * language.\n\t\t */\n\t\tplural: function ( nodes ) {\n\t\t\tvar count = parseFloat( this.language.convertNumber( nodes[ 0 ], 10 ) ),\n\t\t\t\tforms = nodes.slice( 1 );\n\n\t\t\treturn forms.length ? this.language.convertPlural( count, forms ) : '';\n\t\t},\n\n\t\t/**\n\t\t * Transform parsed structure into gender Usage\n\t\t * {{gender:gender|masculine|feminine|neutral}}.\n\t\t *\n\t\t * @param {Array} nodes List [ {String}, {String}, {String} , {String} ]\n\t\t * @return {string} selected gender form according to current language\n\t\t */\n\t\tgender: function ( nodes ) {\n\t\t\tvar gender = nodes[ 0 ],\n\t\t\t\tforms = nodes.slice( 1 );\n\n\t\t\treturn this.language.gender( gender, forms );\n\t\t},\n\n\t\t/**\n\t\t * Transform parsed structure into grammar conversion. Invoked by\n\t\t * putting {{grammar:form|word}} in a message\n\t\t *\n\t\t * @param {Array} nodes List [{Grammar case eg: genitive}, {String word}]\n\t\t * @return {string} selected grammatical form according to current\n\t\t * language.\n\t\t */\n\t\tgrammar: function ( nodes ) {\n\t\t\tvar form = nodes[ 0 ],\n\t\t\t\tword = nodes[ 1 ];\n\n\t\t\treturn word && form && this.language.convertGrammar( word, form );\n\t\t}\n\t};\n\n\t$.extend( $.i18n.parser.emitter, new MessageParserEmitter() );\n}( jQuery ) );\n","/*!\n * jQuery Internationalization library\n *\n * Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do\n * anything special to choose one license or the other and you don't have to\n * notify anyone which license you are using. You are free to use\n * UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar MessageParser = function ( options ) {\n\t\tthis.options = $.extend( {}, $.i18n.parser.defaults, options );\n\t\tthis.language = $.i18n.languages[ String.locale ] || $.i18n.languages[ 'default' ];\n\t\tthis.emitter = $.i18n.parser.emitter;\n\t};\n\n\tMessageParser.prototype = {\n\n\t\tconstructor: MessageParser,\n\n\t\tsimpleParse: function ( message, parameters ) {\n\t\t\treturn message.replace( /\\$(\\d+)/g, function ( str, match ) {\n\t\t\t\tvar index = parseInt( match, 10 ) - 1;\n\n\t\t\t\treturn parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;\n\t\t\t} );\n\t\t},\n\n\t\tparse: function ( message, replacements ) {\n\t\t\tif ( message.indexOf( '{{' ) < 0 ) {\n\t\t\t\treturn this.simpleParse( message, replacements );\n\t\t\t}\n\n\t\t\tthis.emitter.language = $.i18n.languages[ $.i18n().locale ] ||\n\t\t\t\t$.i18n.languages[ 'default' ];\n\n\t\t\treturn this.emitter.emit( this.ast( message ), replacements );\n\t\t},\n\n\t\tast: function ( message ) {\n\t\t\tvar pipe, colon, backslash, anyCharacter, dollar, digits, regularLiteral,\n\t\t\t\tregularLiteralWithoutBar, regularLiteralWithoutSpace, escapedOrLiteralWithoutBar,\n\t\t\t\tescapedOrRegularLiteral, templateContents, templateName, openTemplate,\n\t\t\t\tcloseTemplate, expression, paramExpression, result,\n\t\t\t\tpos = 0;\n\n\t\t\t// Try parsers until one works, if none work return null\n\t\t\tfunction choice( parserSyntax ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar i, result;\n\n\t\t\t\t\tfor ( i = 0; i < parserSyntax.length; i++ ) {\n\t\t\t\t\t\tresult = parserSyntax[ i ]();\n\n\t\t\t\t\t\tif ( result !== null ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Try several parserSyntax-es in a row.\n\t\t\t// All must succeed; otherwise, return null.\n\t\t\t// This is the only eager one.\n\t\t\tfunction sequence( parserSyntax ) {\n\t\t\t\tvar i, res,\n\t\t\t\t\toriginalPos = pos,\n\t\t\t\t\tresult = [];\n\n\t\t\t\tfor ( i = 0; i < parserSyntax.length; i++ ) {\n\t\t\t\t\tres = parserSyntax[ i ]();\n\n\t\t\t\t\tif ( res === null ) {\n\t\t\t\t\t\tpos = originalPos;\n\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tresult.push( res );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t// Run the same parser over and over until it fails.\n\t\t\t// Must succeed a minimum of n times; otherwise, return null.\n\t\t\tfunction nOrMore( n, p ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar originalPos = pos,\n\t\t\t\t\t\tresult = [],\n\t\t\t\t\t\tparsed = p();\n\n\t\t\t\t\twhile ( parsed !== null ) {\n\t\t\t\t\t\tresult.push( parsed );\n\t\t\t\t\t\tparsed = p();\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( result.length < n ) {\n\t\t\t\t\t\tpos = originalPos;\n\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Helpers -- just make parserSyntax out of simpler JS builtin types\n\n\t\t\tfunction makeStringParser( s ) {\n\t\t\t\tvar len = s.length;\n\n\t\t\t\treturn function () {\n\t\t\t\t\tvar result = null;\n\n\t\t\t\t\tif ( message.slice( pos, pos + len ) === s ) {\n\t\t\t\t\t\tresult = s;\n\t\t\t\t\t\tpos += len;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfunction makeRegexParser( regex ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar matches = message.slice( pos ).match( regex );\n\n\t\t\t\t\tif ( matches === null ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tpos += matches[ 0 ].length;\n\n\t\t\t\t\treturn matches[ 0 ];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tpipe = makeStringParser( '|' );\n\t\t\tcolon = makeStringParser( ':' );\n\t\t\tbackslash = makeStringParser( '\\\\' );\n\t\t\tanyCharacter = makeRegexParser( /^./ );\n\t\t\tdollar = makeStringParser( '$' );\n\t\t\tdigits = makeRegexParser( /^\\d+/ );\n\t\t\tregularLiteral = makeRegexParser( /^[^{}[\\]$\\\\]/ );\n\t\t\tregularLiteralWithoutBar = makeRegexParser( /^[^{}[\\]$\\\\|]/ );\n\t\t\tregularLiteralWithoutSpace = makeRegexParser( /^[^{}[\\]$\\s]/ );\n\n\t\t\t// There is a general pattern:\n\t\t\t// parse a thing;\n\t\t\t// if it worked, apply transform,\n\t\t\t// otherwise return null.\n\t\t\t// But using this as a combinator seems to cause problems\n\t\t\t// when combined with nOrMore().\n\t\t\t// May be some scoping issue.\n\t\t\tfunction transform( p, fn ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar result = p();\n\n\t\t\t\t\treturn result === null ? null : fn( result );\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Used to define \"literals\" within template parameters. The pipe\n\t\t\t// character is the parameter delimeter, so by default\n\t\t\t// it is not a literal in the parameter\n\t\t\tfunction literalWithoutBar() {\n\t\t\t\tvar result = nOrMore( 1, escapedOrLiteralWithoutBar )();\n\n\t\t\t\treturn result === null ? null : result.join( '' );\n\t\t\t}\n\n\t\t\tfunction literal() {\n\t\t\t\tvar result = nOrMore( 1, escapedOrRegularLiteral )();\n\n\t\t\t\treturn result === null ? null : result.join( '' );\n\t\t\t}\n\n\t\t\tfunction escapedLiteral() {\n\t\t\t\tvar result = sequence( [ backslash, anyCharacter ] );\n\n\t\t\t\treturn result === null ? null : result[ 1 ];\n\t\t\t}\n\n\t\t\tchoice( [ escapedLiteral, regularLiteralWithoutSpace ] );\n\t\t\tescapedOrLiteralWithoutBar = choice( [ escapedLiteral, regularLiteralWithoutBar ] );\n\t\t\tescapedOrRegularLiteral = choice( [ escapedLiteral, regularLiteral ] );\n\n\t\t\tfunction replacement() {\n\t\t\t\tvar result = sequence( [ dollar, digits ] );\n\n\t\t\t\tif ( result === null ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn [ 'REPLACE', parseInt( result[ 1 ], 10 ) - 1 ];\n\t\t\t}\n\n\t\t\ttemplateName = transform(\n\t\t\t\t// see $wgLegalTitleChars\n\t\t\t\t// not allowing : due to the need to catch \"PLURAL:$1\"\n\t\t\t\tmakeRegexParser( /^[ !\"$&'()*,./0-9;=?@A-Z^_`a-z~\\x80-\\xFF+-]+/ ),\n\n\t\t\t\tfunction ( result ) {\n\t\t\t\t\treturn result.toString();\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tfunction templateParam() {\n\t\t\t\tvar expr,\n\t\t\t\t\tresult = sequence( [ pipe, nOrMore( 0, paramExpression ) ] );\n\n\t\t\t\tif ( result === null ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\texpr = result[ 1 ];\n\n\t\t\t\t// use a \"CONCAT\" operator if there are multiple nodes,\n\t\t\t\t// otherwise return the first node, raw.\n\t\t\t\treturn expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[ 0 ];\n\t\t\t}\n\n\t\t\tfunction templateWithReplacement() {\n\t\t\t\tvar result = sequence( [ templateName, colon, replacement ] );\n\n\t\t\t\treturn result === null ? null : [ result[ 0 ], result[ 2 ] ];\n\t\t\t}\n\n\t\t\tfunction templateWithOutReplacement() {\n\t\t\t\tvar result = sequence( [ templateName, colon, paramExpression ] );\n\n\t\t\t\treturn result === null ? null : [ result[ 0 ], result[ 2 ] ];\n\t\t\t}\n\n\t\t\ttemplateContents = choice( [\n\t\t\t\tfunction () {\n\t\t\t\t\tvar res = sequence( [\n\t\t\t\t\t\t// templates can have placeholders for dynamic\n\t\t\t\t\t\t// replacement eg: {{PLURAL:$1|one car|$1 cars}}\n\t\t\t\t\t\t// or no placeholders eg:\n\t\t\t\t\t\t// {{GRAMMAR:genitive|{{SITENAME}}}\n\t\t\t\t\t\tchoice( [ templateWithReplacement, templateWithOutReplacement ] ),\n\t\t\t\t\t\tnOrMore( 0, templateParam )\n\t\t\t\t\t] );\n\n\t\t\t\t\treturn res === null ? null : res[ 0 ].concat( res[ 1 ] );\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tvar res = sequence( [ templateName, nOrMore( 0, templateParam ) ] );\n\n\t\t\t\t\tif ( res === null ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [ res[ 0 ] ].concat( res[ 1 ] );\n\t\t\t\t}\n\t\t\t] );\n\n\t\t\topenTemplate = makeStringParser( '{{' );\n\t\t\tcloseTemplate = makeStringParser( '}}' );\n\n\t\t\tfunction template() {\n\t\t\t\tvar result = sequence( [ openTemplate, templateContents, closeTemplate ] );\n\n\t\t\t\treturn result === null ? null : result[ 1 ];\n\t\t\t}\n\n\t\t\texpression = choice( [ template, replacement, literal ] );\n\t\t\tparamExpression = choice( [ template, replacement, literalWithoutBar ] );\n\n\t\t\tfunction start() {\n\t\t\t\tvar result = nOrMore( 0, expression )();\n\n\t\t\t\tif ( result === null ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn [ 'CONCAT' ].concat( result );\n\t\t\t}\n\n\t\t\tresult = start();\n\n\t\t\t/*\n\t\t\t * For success, the pos must have gotten to the end of the input\n\t\t\t * and returned a non-null.\n\t\t\t * n.b. This is part of language infrastructure, so we do not throw an\n\t\t\t * internationalizable message.\n\t\t\t */\n\t\t\tif ( result === null || pos !== message.length ) {\n\t\t\t\tthrow new Error( 'Parse error at position ' + pos.toString() + ' in input: ' + message );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t};\n\n\t$.extend( $.i18n.parser, new MessageParser() );\n}( jQuery ) );","/*!\n * jQuery Internationalization library - Message Store\n *\n * Copyright (C) 2012 Santhosh Thottingal\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to\n * choose one license or the other and you don't have to notify anyone which license you are using.\n * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar MessageStore = function () {\n\t\tthis.messages = {};\n\t\tthis.sources = {};\n\t};\n\n\tfunction jsonMessageLoader( url ) {\n\t\tvar deferred = $.Deferred();\n\n\t\t$.getJSON( url )\n\t\t\t.done( deferred.resolve )\n\t\t\t.fail( function ( jqxhr, settings, exception ) {\n\t\t\t\t$.i18n.log( 'Error in loading messages from ' + url + ' Exception: ' + exception );\n\t\t\t\t// Ignore 404 exception, because we are handling fallabacks explicitly\n\t\t\t\tdeferred.resolve();\n\t\t\t} );\n\n\t\treturn deferred.promise();\n\t}\n\n\t/**\n\t * See https://github.com/wikimedia/jquery.i18n/wiki/Specification#wiki-Message_File_Loading\n\t */\n\tMessageStore.prototype = {\n\n\t\t/**\n\t\t * General message loading API This can take a URL string for\n\t\t * the json formatted messages.\n\t\t * load('path/to/all_localizations.json');\n\t\t *\n\t\t * This can also load a localization file for a locale \n\t\t * load( 'path/to/de-messages.json', 'de' );\n\t\t * \n\t\t * A data object containing message key- message translation mappings\n\t\t * can also be passed Eg:\n\t\t * \n\t\t * load( { 'hello' : 'Hello' }, optionalLocale );\n\t\t * If the data argument is\n\t\t * null/undefined/false,\n\t\t * all cached messages for the i18n instance will get reset.\n\t\t *\n\t\t * @param {string|Object} source\n\t\t * @param {string} locale Language tag\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\tload: function ( source, locale ) {\n\t\t\tvar key = null,\n\t\t\t\tdeferred = null,\n\t\t\t\tdeferreds = [],\n\t\t\t\tmessageStore = this;\n\n\t\t\tif ( typeof source === 'string' ) {\n\t\t\t\t// This is a URL to the messages file.\n\t\t\t\t$.i18n.log( 'Loading messages from: ' + source );\n\t\t\t\tdeferred = jsonMessageLoader( source )\n\t\t\t\t\t.done( function ( localization ) {\n\t\t\t\t\t\tmessageStore.set( locale, localization );\n\t\t\t\t\t} );\n\n\t\t\t\treturn deferred.promise();\n\t\t\t}\n\n\t\t\tif ( locale ) {\n\t\t\t\t// source is an key-value pair of messages for given locale\n\t\t\t\tmessageStore.set( locale, source );\n\n\t\t\t\treturn $.Deferred().resolve();\n\t\t\t} else {\n\t\t\t\t// source is a key-value pair of locales and their source\n\t\t\t\tfor ( key in source ) {\n\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, key ) ) {\n\t\t\t\t\t\tlocale = key;\n\t\t\t\t\t\t// No {locale} given, assume data is a group of languages,\n\t\t\t\t\t\t// call this function again for each language.\n\t\t\t\t\t\tdeferreds.push( messageStore.load( source[ key ], locale ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $.when.apply( $, deferreds );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Set messages to the given locale.\n\t\t * If locale exists, add messages to the locale.\n\t\t *\n\t\t * @param {string} locale\n\t\t * @param {Object} messages\n\t\t */\n\t\tset: function ( locale, messages ) {\n\t\t\tif ( !this.messages[ locale ] ) {\n\t\t\t\tthis.messages[ locale ] = messages;\n\t\t\t} else {\n\t\t\t\tthis.messages[ locale ] = $.extend( this.messages[ locale ], messages );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t *\n\t\t * @param {string} locale\n\t\t * @param {string} messageKey\n\t\t * @return {boolean}\n\t\t */\n\t\tget: function ( locale, messageKey ) {\n\t\t\treturn this.messages[ locale ] && this.messages[ locale ][ messageKey ];\n\t\t}\n\t};\n\n\t$.extend( $.i18n.messageStore, new MessageStore() );\n}( jQuery ) );\n","/*!\n * jQuery Internationalization library\n *\n * Copyright (C) 2012 Santhosh Thottingal\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do\n * anything special to choose one license or the other and you don't have to\n * notify anyone which license you are using. You are free to use\n * UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar I18N,\n\t\tslice = Array.prototype.slice;\n\t/**\n\t * @constructor\n\t * @param {Object} options\n\t */\n\tI18N = function ( options ) {\n\t\t// Load defaults\n\t\tthis.options = $.extend( {}, I18N.defaults, options );\n\n\t\tthis.parser = this.options.parser;\n\t\tthis.locale = this.options.locale;\n\t\tthis.messageStore = this.options.messageStore;\n\t\tthis.languages = {};\n\t};\n\n\tI18N.prototype = {\n\t\t/**\n\t\t * Localize a given messageKey to a locale.\n\t\t * @param {String} messageKey\n\t\t * @return {String} Localized message\n\t\t */\n\t\tlocalize: function ( messageKey ) {\n\t\t\tvar localeParts, localePartIndex, locale, fallbackIndex,\n\t\t\t\ttryingLocale, message;\n\n\t\t\tlocale = this.locale;\n\t\t\tfallbackIndex = 0;\n\n\t\t\twhile ( locale ) {\n\t\t\t\t// Iterate through locales starting at most-specific until\n\t\t\t\t// localization is found. As in fi-Latn-FI, fi-Latn and fi.\n\t\t\t\tlocaleParts = locale.split( '-' );\n\t\t\t\tlocalePartIndex = localeParts.length;\n\n\t\t\t\tdo {\n\t\t\t\t\ttryingLocale = localeParts.slice( 0, localePartIndex ).join( '-' );\n\t\t\t\t\tmessage = this.messageStore.get( tryingLocale, messageKey );\n\n\t\t\t\t\tif ( message ) {\n\t\t\t\t\t\treturn message;\n\t\t\t\t\t}\n\n\t\t\t\t\tlocalePartIndex--;\n\t\t\t\t} while ( localePartIndex );\n\n\t\t\t\tif ( locale === 'en' ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tlocale = ( $.i18n.fallbacks[ this.locale ] &&\n\t\t\t\t\t\t$.i18n.fallbacks[ this.locale ][ fallbackIndex ] ) ||\n\t\t\t\t\t\tthis.options.fallbackLocale;\n\t\t\t\t$.i18n.log( 'Trying fallback locale for ' + this.locale + ': ' + locale + ' (' + messageKey + ')' );\n\n\t\t\t\tfallbackIndex++;\n\t\t\t}\n\n\t\t\t// key not found\n\t\t\treturn '';\n\t\t},\n\n\t\t/*\n\t\t * Destroy the i18n instance.\n\t\t */\n\t\tdestroy: function () {\n\t\t\t$.removeData( document, 'i18n' );\n\t\t},\n\n\t\t/**\n\t\t * General message loading API This can take a URL string for\n\t\t * the json formatted messages. Example:\n\t\t * load('path/to/all_localizations.json');\n\t\t *\n\t\t * To load a localization file for a locale:\n\t\t * \n\t\t * load('path/to/de-messages.json', 'de' );\n\t\t * \n\t\t *\n\t\t * To load a localization file from a directory:\n\t\t * \n\t\t * load('path/to/i18n/directory', 'de' );\n\t\t * \n\t\t * The above method has the advantage of fallback resolution.\n\t\t * ie, it will automatically load the fallback locales for de.\n\t\t * For most usecases, this is the recommended method.\n\t\t * It is optional to have trailing slash at end.\n\t\t *\n\t\t * A data object containing message key- message translation mappings\n\t\t * can also be passed. Example:\n\t\t * \n\t\t * load( { 'hello' : 'Hello' }, optionalLocale );\n\t\t * \n\t\t *\n\t\t * A source map containing key-value pair of languagename and locations\n\t\t * can also be passed. Example:\n\t\t * \n\t\t * load( {\n\t\t * bn: 'i18n/bn.json',\n\t\t * he: 'i18n/he.json',\n\t\t * en: 'i18n/en.json'\n\t\t * } )\n\t\t * \n\t\t *\n\t\t * If the data argument is null/undefined/false,\n\t\t * all cached messages for the i18n instance will get reset.\n\t\t *\n\t\t * @param {string|Object} source\n\t\t * @param {string} locale Language tag\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\tload: function ( source, locale ) {\n\t\t\tvar fallbackLocales, locIndex, fallbackLocale, sourceMap = {};\n\t\t\tif ( !source && !locale ) {\n\t\t\t\tsource = 'i18n/' + $.i18n().locale + '.json';\n\t\t\t\tlocale = $.i18n().locale;\n\t\t\t}\n\t\t\tif ( typeof source === 'string' &&\n\t\t\t\t// source extension should be json, but can have query params after that.\n\t\t\t\tsource.split( '?' )[ 0 ].split( '.' ).pop() !== 'json'\n\t\t\t) {\n\t\t\t\t// Load specified locale then check for fallbacks when directory is\n\t\t\t\t// specified in load()\n\t\t\t\tsourceMap[ locale ] = source + '/' + locale + '.json';\n\t\t\t\tfallbackLocales = ( $.i18n.fallbacks[ locale ] || [] )\n\t\t\t\t\t.concat( this.options.fallbackLocale );\n\t\t\t\tfor ( locIndex = 0; locIndex < fallbackLocales.length; locIndex++ ) {\n\t\t\t\t\tfallbackLocale = fallbackLocales[ locIndex ];\n\t\t\t\t\tsourceMap[ fallbackLocale ] = source + '/' + fallbackLocale + '.json';\n\t\t\t\t}\n\t\t\t\treturn this.load( sourceMap );\n\t\t\t} else {\n\t\t\t\treturn this.messageStore.load( source, locale );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Does parameter and magic word substitution.\n\t\t *\n\t\t * @param {string} key Message key\n\t\t * @param {Array} parameters Message parameters\n\t\t * @return {string}\n\t\t */\n\t\tparse: function ( key, parameters ) {\n\t\t\tvar message = this.localize( key );\n\t\t\t// FIXME: This changes the state of the I18N object,\n\t\t\t// should probably not change the 'this.parser' but just\n\t\t\t// pass it to the parser.\n\t\t\tthis.parser.language = $.i18n.languages[ $.i18n().locale ] || $.i18n.languages[ 'default' ];\n\t\t\tif ( message === '' ) {\n\t\t\t\tmessage = key;\n\t\t\t}\n\t\t\treturn this.parser.parse( message, parameters );\n\t\t}\n\t};\n\n\t/**\n\t * Process a message from the $.I18N instance\n\t * for the current document, stored in jQuery.data(document).\n\t *\n\t * @param {string} key Key of the message.\n\t * @param {string} param1 [param...] Variadic list of parameters for {key}.\n\t * @return {string|$.I18N} Parsed message, or if no key was given\n\t * the instance of $.I18N is returned.\n\t */\n\t$.i18n = function ( key, param1 ) {\n\t\tvar parameters,\n\t\t\ti18n = $.data( document, 'i18n' ),\n\t\t\toptions = typeof key === 'object' && key;\n\n\t\t// If the locale option for this call is different then the setup so far,\n\t\t// update it automatically. This doesn't just change the context for this\n\t\t// call but for all future call as well.\n\t\t// If there is no i18n setup yet, don't do this. It will be taken care of\n\t\t// by the `new I18N` construction below.\n\t\t// NOTE: It should only change language for this one call.\n\t\t// Then cache instances of I18N somewhere.\n\t\tif ( options && options.locale && i18n && i18n.locale !== options.locale ) {\n\t\t\ti18n.locale = options.locale;\n\t\t}\n\n\t\tif ( !i18n ) {\n\t\t\ti18n = new I18N( options );\n\t\t\t$.data( document, 'i18n', i18n );\n\t\t}\n\n\t\tif ( typeof key === 'string' ) {\n\t\t\tif ( param1 !== undefined ) {\n\t\t\t\tparameters = slice.call( arguments, 1 );\n\t\t\t} else {\n\t\t\t\tparameters = [];\n\t\t\t}\n\n\t\t\treturn i18n.parse( key, parameters );\n\t\t} else {\n\t\t\t// FIXME: remove this feature/bug.\n\t\t\treturn i18n;\n\t\t}\n\t};\n\n\t$.fn.i18n = function () {\n\t\tvar i18n = $.data( document, 'i18n' );\n\n\t\tif ( !i18n ) {\n\t\t\ti18n = new I18N();\n\t\t\t$.data( document, 'i18n', i18n );\n\t\t}\n\n\t\treturn this.each( function () {\n\t\t\tvar $this = $( this ),\n\t\t\t\tmessageKey = $this.data( 'i18n' ),\n\t\t\t\tlBracket, rBracket, type, key;\n\n\t\t\tif ( messageKey ) {\n\t\t\t\tlBracket = messageKey.indexOf( '[' );\n\t\t\t\trBracket = messageKey.indexOf( ']' );\n\t\t\t\tif ( lBracket !== -1 && rBracket !== -1 && lBracket < rBracket ) {\n\t\t\t\t\ttype = messageKey.slice( lBracket + 1, rBracket );\n\t\t\t\t\tkey = messageKey.slice( rBracket + 1 );\n\t\t\t\t\tif ( type === 'html' ) {\n\t\t\t\t\t\t$this.html( i18n.parse( key ) );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$this.attr( type, i18n.parse( key ) );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$this.text( i18n.parse( messageKey ) );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$this.find( '[data-i18n]' ).i18n();\n\t\t\t}\n\t\t} );\n\t};\n\n\tfunction getDefaultLocale() {\n\t\tvar nav, locale = $( 'html' ).attr( 'lang' );\n\n\t\tif ( !locale ) {\n\t\t\tif ( typeof window.navigator !== undefined ) {\n\t\t\t\tnav = window.navigator;\n\t\t\t\tlocale = nav.language || nav.userLanguage || '';\n\t\t\t} else {\n\t\t\t\tlocale = '';\n\t\t\t}\n\t\t}\n\t\treturn locale;\n\t}\n\n\t$.i18n.languages = {};\n\t$.i18n.messageStore = $.i18n.messageStore || {};\n\t$.i18n.parser = {\n\t\t// The default parser only handles variable substitution\n\t\tparse: function ( message, parameters ) {\n\t\t\treturn message.replace( /\\$(\\d+)/g, function ( str, match ) {\n\t\t\t\tvar index = parseInt( match, 10 ) - 1;\n\t\t\t\treturn parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;\n\t\t\t} );\n\t\t},\n\t\temitter: {}\n\t};\n\t$.i18n.fallbacks = {};\n\t$.i18n.debug = false;\n\t$.i18n.log = function ( /* arguments */ ) {\n\t\tif ( window.console && $.i18n.debug ) {\n\t\t\twindow.console.log.apply( window.console, arguments );\n\t\t}\n\t};\n\t/* Static members */\n\tI18N.defaults = {\n\t\tlocale: getDefaultLocale(),\n\t\tfallbackLocale: 'en',\n\t\tparser: $.i18n.parser,\n\t\tmessageStore: $.i18n.messageStore\n\t};\n\n\t// Expose constructor\n\t$.i18n.constructor = I18N;\n}( jQuery ) );","/*!\n * jQuery idleTimer plugin\n * version 0.9.100511\n * by Paul Irish.\n * http://github.com/paulirish/yui-misc/tree/\n * MIT license\n\n * adapted from YUI idle timer by nzakas:\n * http://github.com/nzakas/yui-misc/\n*/\n/*\n * Copyright (c) 2009 Nicholas C. Zakas\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/* updated to fix Chrome setTimeout issue by Zaid Zawaideh */\n\n // API available in <= v0.8\n /*******************************\n\n // idleTimer() takes an optional argument that defines the idle timeout\n // timeout is in milliseconds; defaults to 30000\n $.idleTimer(10000);\n\n\n $(document).bind(\"idle.idleTimer\", function(){\n // function you want to fire when the user goes idle\n });\n\n\n $(document).bind(\"active.idleTimer\", function(){\n // function you want to fire when the user becomes active again\n });\n\n // pass the string 'destroy' to stop the timer\n $.idleTimer('destroy');\n\n // you can query if the user is idle or not with data()\n $.data(document,'idleTimer'); // 'idle' or 'active'\n\n // you can get time elapsed since user when idle/active\n $.idleTimer('getElapsedTime'); // time since state change in ms\n\n ********/\n\n\n\n // API available in >= v0.9\n /*************************\n\n // bind to specific elements, allows for multiple timer instances\n $(elem).idleTimer(timeout|'destroy'|'getElapsedTime');\n $.data(elem,'idleTimer'); // 'idle' or 'active'\n\n // if you're using the old $.idleTimer api, you should not do $(document).idleTimer(...)\n\n // element bound timers will only watch for events inside of them.\n // you may just want page-level activity, in which case you may set up\n // your timers on document, document.documentElement, and document.body\n\n // You can optionally provide a second argument to override certain options.\n // Here are the defaults, so you can omit any or all of them.\n $(elem).idleTimer(timeout, {\n startImmediately: true, //starts a timeout as soon as the timer is set up; otherwise it waits for the first event.\n idle: false, //indicates if the user is idle\n enabled: true, //indicates if the idle timer is enabled\n events: 'mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove' // activity is one of these events\n });\n\n ********/\n\n(function($){\n\n$.idleTimer = function(newTimeout, elem, opts){\n\n // defaults that are to be stored as instance props on the elem\n\n\topts = $.extend({\n\t\tstartImmediately: true, //starts a timeout as soon as the timer is set up\n\t\tidle: false, //indicates if the user is idle\n\t\tenabled: true, //indicates if the idle timer is enabled\n\t\ttimeout: 30000, //the amount of time (ms) before the user is considered idle\n\t\tevents: 'mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove' // activity is one of these events\n\t}, opts);\n\n\n elem = elem || document;\n\n /* (intentionally not documented)\n * Toggles the idle state and fires an appropriate event.\n * @return {void}\n */\n var toggleIdleState = function(myelem){\n\n // curse you, mozilla setTimeout lateness bug!\n if (typeof myelem === 'number'){\n myelem = undefined;\n }\n\n var obj = $.data(myelem || elem,'idleTimerObj');\n\n //toggle the state\n obj.idle = !obj.idle;\n\n // reset timeout \n var elapsed = (+new Date()) - obj.olddate;\n obj.olddate = +new Date();\n\n // handle Chrome always triggering idle after js alert or comfirm popup\n if (obj.idle && (elapsed < opts.timeout)) {\n obj.idle = false;\n clearTimeout($.idleTimer.tId);\n if (opts.enabled)\n $.idleTimer.tId = setTimeout(toggleIdleState, opts.timeout);\n return;\n }\n \n //fire appropriate event\n\n // create a custom event, but first, store the new state on the element\n // and then append that string to a namespace\n var event = jQuery.Event( $.data(elem,'idleTimer', obj.idle ? \"idle\" : \"active\" ) + '.idleTimer' );\n\n // we do want this to bubble, at least as a temporary fix for jQuery 1.7\n // event.stopPropagation();\n $(elem).trigger(event);\n },\n\n /**\n * Stops the idle timer. This removes appropriate event handlers\n * and cancels any pending timeouts.\n * @return {void}\n * @method stop\n * @static\n */\n stop = function(elem){\n\n var obj = $.data(elem,'idleTimerObj') || {};\n\n //set to disabled\n obj.enabled = false;\n\n //clear any pending timeouts\n clearTimeout(obj.tId);\n\n //detach the event handlers\n $(elem).off('.idleTimer');\n },\n\n\n /* (intentionally not documented)\n * Handles a user event indicating that the user isn't idle.\n * @param {Event} event A DOM2-normalized event object.\n * @return {void}\n */\n handleUserEvent = function(){\n\n var obj = $.data(this,'idleTimerObj');\n\n //clear any existing timeout\n clearTimeout(obj.tId);\n\n\n\n //if the idle timer is enabled\n if (obj.enabled){\n\n\n //if it's idle, that means the user is no longer idle\n if (obj.idle){\n toggleIdleState(this);\n }\n\n //set a new timeout\n obj.tId = setTimeout(toggleIdleState, obj.timeout);\n\n }\n };\n\n\n /**\n * Starts the idle timer. This adds appropriate event handlers\n * and starts the first timeout.\n * @param {int} newTimeout (Optional) A new value for the timeout period in ms.\n * @return {void}\n * @method $.idleTimer\n * @static\n */\n\n\n var obj = $.data(elem,'idleTimerObj') || {};\n\n obj.olddate = obj.olddate || +new Date();\n\n //assign a new timeout if necessary\n if (typeof newTimeout === \"number\"){\n opts.timeout = newTimeout;\n } else if (newTimeout === 'destroy') {\n stop(elem);\n return this;\n } else if (newTimeout === 'getElapsedTime'){\n return (+new Date()) - obj.olddate;\n }\n\n //assign appropriate event handlers\n $(elem).on($.trim((opts.events+' ').split(' ').join('.idleTimer ')),handleUserEvent);\n\n\n obj.idle = opts.idle;\n obj.enabled = opts.enabled;\n obj.timeout = opts.timeout;\n\n\n //set a timeout to toggle state. May wish to omit this in some situations\n\tif (opts.startImmediately) {\n\t obj.tId = setTimeout(toggleIdleState, obj.timeout);\n\t}\n\n // assume the user is active for the first x seconds.\n $.data(elem,'idleTimer',\"active\");\n\n // store our instance on the object\n $.data(elem,'idleTimerObj',obj);\n\n\n\n}; // end of $.idleTimer()\n\n\n// v0.9 API for defining multiple timers.\n$.fn.idleTimer = function(newTimeout,opts){\n\t// Allow omission of opts for backward compatibility\n\tif (!opts) {\n\t\topts = {};\n\t}\n\n if(this[0]){\n $.idleTimer(newTimeout,this[0],opts);\n }\n\n return this;\n};\n\n\n})(jQuery);\n","/*global variable declarations*/\n\n\"use strict\";\n\nimport \"../css/user-highlights.css\";\n\nfunction getCompletions() {\n // Get the completion status\n if (\n window.location.href.match(\n /(\\/index.html|toctree.html|genindex.html|navhelp.html|toc.html|assignments.html|Exercises.html)/\n )\n ) {\n return;\n }\n\n var currentPathname = window.location.pathname;\n if (currentPathname.indexOf(\"?\") !== -1) {\n currentPathname = currentPathname.substring(\n 0,\n currentPathname.lastIndexOf(\"?\")\n );\n }\n var data = {\n lastPageUrl: currentPathname,\n isPtxBook: isPreTeXt(),\n };\n jQuery\n .ajax({\n url: `${eBookConfig.new_server_prefix}/logger/getCompletionStatus`,\n data: data,\n async: false,\n })\n .done(function (data) {\n if (data != \"None\") {\n var completionData = data.detail;\n var completionClass, completionMsg;\n if (completionData[0].completionStatus == 1) {\n completionClass = \"buttonConfirmCompletion\";\n completionMsg =\n \" Completed. Well Done!\";\n } else {\n completionClass = \"buttonAskCompletion\";\n completionMsg = \"Mark as Completed\";\n }\n let scp = document.querySelector(\"#scprogresscontainer\");\n if (scp) {\n scp.classList.add(\"ptx-runestone-container\");\n }\n $(\"#scprogresscontainer\").append(\n '
    \"\n );\n }\n });\n}\n\nfunction showLastPositionBanner() {\n var lastPositionVal = $.getUrlVar(\"lastPosition\");\n if (typeof lastPositionVal !== \"undefined\") {\n $(\"body\").append(\n ''\n );\n $(\"html, body\").animate({ scrollTop: parseInt(lastPositionVal) }, 1000);\n }\n}\n\nfunction addNavigationAndCompletionButtons() {\n if (\n window.location.href.match(\n /(index.html|genindex.html|navhelp.html|toc.html|assignments.html|Exercises.html|toctree.html)/\n )\n ) {\n return;\n }\n var navLinkBgRightHiddenPosition = -$(\"#navLinkBgRight\").outerWidth() - 5;\n var navLinkBgRightHalfOpen;\n var navLinkBgRightFullOpen = 0;\n\n if ($(\"#completionButton\").hasClass(\"buttonAskCompletion\")) {\n navLinkBgRightHalfOpen = navLinkBgRightHiddenPosition + 70;\n } else if ($(\"#completionButton\").hasClass(\"buttonConfirmCompletion\")) {\n navLinkBgRightHalfOpen = 0;\n }\n var relationsNextIconInitialPosition = $(\"#relations-next\").css(\"right\");\n var relationsNextIconNewPosition = -(navLinkBgRightHiddenPosition + 35);\n\n $(\"#navLinkBgRight\").css(\"right\", navLinkBgRightHiddenPosition).show();\n var navBgShown = false;\n $(window).scroll(function () {\n if (\n $(window).scrollTop() + $(window).height() ==\n $(document).height()\n ) {\n $(\"#navLinkBgRight\").animate(\n { right: navLinkBgRightHalfOpen },\n 200\n );\n $(\"#navLinkBgLeft\").animate({ left: \"0px\" }, 200);\n if ($(\"#completionButton\").hasClass(\"buttonConfirmCompletion\")) {\n $(\"#relations-next\").animate(\n { right: relationsNextIconNewPosition },\n 200\n );\n }\n navBgShown = true;\n } else if (navBgShown) {\n $(\"#navLinkBgRight\").animate(\n { right: navLinkBgRightHiddenPosition },\n 200\n );\n $(\"#navLinkBgLeft\").animate({ left: \"-65px\" }, 200);\n $(\"#relations-next\").animate({\n right: relationsNextIconInitialPosition,\n });\n navBgShown = false;\n }\n });\n\n var completionFlag = 0;\n if ($(\"#completionButton\").hasClass(\"buttonAskCompletion\")) {\n completionFlag = 0;\n } else {\n completionFlag = 1;\n }\n // Make sure we mark this page as visited regardless of how flakey\n // the onunload handlers become.\n processPageState(completionFlag, true, false, false);\n $(\"#completionButton\").on(\"click\", function () {\n var markingComplete = false;\n var markingIncomplete = false;\n if ($(this).hasClass(\"buttonAskCompletion\")) {\n $(this)\n .removeClass(\"buttonAskCompletion\")\n .addClass(\"buttonConfirmCompletion\")\n .html(\n \" Completed. Well Done!\"\n );\n $(\"#navLinkBgRight\").animate({ right: navLinkBgRightFullOpen });\n $(\"#relations-next\").animate({\n right: relationsNextIconNewPosition,\n });\n navLinkBgRightHalfOpen = 0;\n completionFlag = 1;\n markingComplete = true;\n } else if ($(this).hasClass(\"buttonConfirmCompletion\")) {\n $(this)\n .removeClass(\"buttonConfirmCompletion\")\n .addClass(\"buttonAskCompletion\")\n .html(\"Mark as Completed\");\n navLinkBgRightHalfOpen = navLinkBgRightHiddenPosition + 70;\n $(\"#navLinkBgRight\").animate({ right: navLinkBgRightHalfOpen });\n $(\"#relations-next\").animate({\n right: relationsNextIconInitialPosition,\n });\n completionFlag = 0;\n markingIncomplete = true;\n }\n processPageState(\n completionFlag,\n false,\n markingComplete,\n markingIncomplete\n );\n });\n\n // we cannot afford to do this at both load and unload especially as users\n // go from page to page. This just doubles the load. So, try without this one.\n // $(window).on(\"beforeunload\", function (e) {\n // if (completionFlag == 0) {\n // processPageState(completionFlag, false, false, false);\n // }\n // });\n}\n\n// _ decorateTableOfContents\n// -------------------------\nfunction decorateTableOfContents() {\n if (\n window.location.href.toLowerCase().indexOf(\"toc.html\") != -1 ||\n window.location.href.toLowerCase().indexOf(\"index.html\") != -1 ||\n window.location.href.toLowerCase().indexOf(\"frontmatter\") != -1\n ) {\n if (!isPreTeXt()) {\n jQuery.get(\n `${eBookConfig.new_server_prefix}/logger/getAllCompletionStatus`,\n function (data) {\n var subChapterList;\n if (data != \"None\") {\n subChapterList = data.detail;\n\n var allSubChapterURLs = $(\"#main-content div li a\");\n $.each(subChapterList, function (index, item) {\n for (var s = 0; s < allSubChapterURLs.length; s++) {\n if (\n allSubChapterURLs[s].href.indexOf(\n item.chapterName +\n \"/\" +\n item.subChapterName\n ) != -1\n ) {\n if (item.completionStatus == 1) {\n $(allSubChapterURLs[s].parentElement)\n .addClass(\"completed\")\n .append(\n '- Completed this topic on ' +\n item.endDate +\n \"\"\n )\n .children()\n .first()\n .hover(\n function () {\n $(this)\n .next(\n \".infoTextCompleted\"\n )\n .show();\n },\n function () {\n $(this)\n .next(\n \".infoTextCompleted\"\n )\n .hide();\n }\n );\n } else if (item.completionStatus == 0) {\n $(allSubChapterURLs[s].parentElement)\n .addClass(\"active\")\n .append(\n 'Last read this topic on ' +\n item.endDate +\n \"\"\n )\n .children()\n .first()\n .hover(\n function () {\n $(this)\n .next(\".infoTextActive\")\n .show();\n },\n function () {\n $(this)\n .next(\".infoTextActive\")\n .hide();\n }\n );\n }\n }\n }\n });\n }\n }\n );\n }\n var data = { course: eBookConfig.course };\n jQuery.get(\n `${eBookConfig.new_server_prefix}/logger/getlastpage`,\n data,\n function (data) {\n var lastPageData;\n if (data != \"None\") {\n lastPageData = data.detail;\n if (lastPageData.lastPageChapter != null) {\n $(\"#continue-reading\")\n .show()\n .html(\n '
    You were Last Reading: ' +\n lastPageData.lastPageChapter +\n (lastPageData.lastPageSubchapter\n ? \" > \" +\n lastPageData.lastPageSubchapter\n : \"\") +\n ' Continue Reading
    '\n );\n }\n }\n }\n );\n }\n}\n\nfunction enableCompletions() {\n getCompletions();\n showLastPositionBanner();\n addNavigationAndCompletionButtons();\n decorateTableOfContents();\n}\n\n// call enable user highlights after login\n$(document).on(\"runestone:login\", enableCompletions);\n\nfunction isPreTeXt() {\n let ptxMarker = document.querySelector(\"body.pretext\");\n if (ptxMarker) {\n return true;\n } else {\n return false;\n }\n}\n// _ processPageState\n// -------------------------\nfunction processPageState(\n completionFlag,\n pageLoad,\n markingComplete,\n markingIncomplete\n) {\n /*Log last page visited*/\n var currentPathname = window.location.pathname;\n if (currentPathname.indexOf(\"?\") !== -1) {\n currentPathname = currentPathname.substring(\n 0,\n currentPathname.lastIndexOf(\"?\")\n );\n }\n // Is this a ptx book?\n let isPtxBook = isPreTeXt();\n var data = {\n lastPageUrl: currentPathname,\n lastPageScrollLocation: Math.round($(window).scrollTop()),\n completionFlag: completionFlag,\n pageLoad: pageLoad,\n markingComplete: markingComplete,\n markingIncomplete: markingIncomplete,\n course: eBookConfig.course,\n isPtxBook: isPtxBook,\n };\n $(document).ajaxError(function (e, jqhxr, settings, exception) {\n console.log(\"Request Failed for \" + settings.url);\n console.log(e);\n });\n jQuery.ajax({\n url: `${eBookConfig.new_server_prefix}/logger/updatelastpage`,\n contentType: \"application/json; charset=utf-8\",\n dataType: \"json\",\n data: JSON.stringify(data),\n method: \"POST\",\n async: true,\n });\n}\n\n$.extend({\n getUrlVars: function () {\n var vars = [],\n hash;\n var hashes = window.location.search\n .slice(window.location.search.indexOf(\"?\") + 1)\n .split(\"&\");\n for (var i = 0; i < hashes.length; i++) {\n hash = hashes[i].split(\"=\");\n vars.push(hash[0]);\n vars[hash[0]] = hash[1];\n }\n return vars;\n },\n getUrlVar: function (name) {\n return $.getUrlVars()[name];\n },\n});\n","/*\n Support functions for PreTeXt books running on Runestone\n\n*/\n\nimport RunestoneBase from \"./runestonebase.js\";\n\nfunction setupPTXEvents() {\n let rb = new RunestoneBase();\n // log an event when a knowl is opened.\n document.querySelectorAll(\"[data-knowl]\").forEach((el) => {\n el.addEventListener(\"click\", function () {\n let div_id = el.getAttribute(\"data-knowl\");\n rb.logBookEvent({ event: \"knowl\", act: \"click\", div_id: div_id });\n });\n });\n let born_hidden = document.querySelectorAll(\"details.born-hidden-knowl\");\n born_hidden.forEach((el) => {\n // log an event when a knowl is opened that was born hidden\n el.addEventListener(\"toggle\", function () {\n if (el.open) {\n let div_id = el.id;\n rb.logBookEvent({ event: \"knowl\", act: \"open\", div_id: div_id });\n }\n });\n });\n // log an event when a sage cell is evaluated\n document.querySelectorAll(\".sagecell_evalButton\").forEach((btn) => {\n btn.addEventListener(\"click\", function () {\n let container = btn.closest(\".ptx-sagecell\");\n let codeInput = container ? container.querySelector(\".sagecell_input\") : null;\n let code = codeInput ? codeInput.textContent : \"\";\n let div_id = container ? container.id : null;\n if (! div_id) {\n console.warn(\"Could not find container or div_id for sagecell button\");\n return;\n }\n\n rb.logBookEvent({ event: \"sage\", act: \"run\", div_id: div_id });\n });\n });\n if (typeof eBookConfig !== \"undefined\" && !eBookConfig.isInstructor) {\n document.querySelectorAll(\".commentary\").forEach((el) => {\n el.style.display = \"none\";\n });\n }\n}\n\nwindow.addEventListener(\"load\", function () {\n console.log(\"setting up pretext\");\n setupPTXEvents();\n let wrap = document.getElementById(\"primary-navbar-sticky-wrapper\");\n if (wrap) {\n wrap.style.overflow = \"visible\";\n }\n});\n","import RunestoneBase from \"../../common/js/runestonebase.js\";\n\nexport class SpliceWrapper extends RunestoneBase {\n constructor() {\n super();\n this.initSplice();\n }\n\n initSplice() {\n // SPLICE Events\n window.addEventListener(\"message\", async (event) => {\n \n var sourceIframe = this.sendingIframe(event);\n console.log(`SpliceWrapper: received message subject: ${event.data.subject} from iframe: ${sourceIframe ? sourceIframe.id : \"unknown\"}`);\n if (event.data.subject == \"SPLICE.reportScoreAndState\") {\n this.handleScoreAndState(event, sourceIframe);\n } else if (event.data.subject == \"SPLICE.sendEvent\") {\n this.handleSpliceEvent(event, sourceIframe);\n } else if (event.data.subject == \"SPLICE.getState\") {\n await this.handleGetState(event, sourceIframe);\n } else if (\n event.origin === \"https://www.myopenmath.com\" &&\n typeof event.data === \"string\" &&\n event.data.indexOf(\"lti.ext.imathas.result\") != -1\n ) {\n // proof of concept for My Open Math\n let msgdata = JSON.parse(event.data);\n let jwt = basicParseJwt(msgdata.jwt);\n console.log(\n \"Result received from frame \" +\n msgdata.frame_id +\n \" with score \" +\n jwt.score\n );\n // todo send score to server\n // does MOM have a way to get the state?\n // todo send state to server\n }\n });\n }\n\n getUniqueID(event, frame) {\n // Determine the unique identifier for this activity\n // The SPLICE protocol allows for two possibilities\n // 1. activity_id is the unique id as assigned by the provider\n // 2. activity_id is the iframe src url\n // if the activity_id is set there may also be another attribute called domain\n // On Runestone we will try to map the activity to the div_id of the enclosing RS component\n // if possible, otherwise we will use the activity_id or iframe src\n // If an interactive is included in an exercises this allows us to map the score\n // to the id the instructor used to assign the problem.\n if (frame) {\n let rsDiv = frame.closest(\"[data-component]\");\n if (rsDiv) {\n return rsDiv.id;\n }\n }\n let location = event.data.activity_id;\n if (!location) {\n if (frame) {\n location = frame.src;\n } else {\n location = \"unknown\";\n console.error(\n \"Could not find iframe that sent the SPLICE event\"\n );\n }\n }\n return location;\n }\n\n handleScoreAndState(event, frame) {\n console.log(\"Got SPLICE.reportScoreAndState\");\n console.log(event.data.activity_id);\n console.log(event.data.score);\n console.log(event.data.state);\n let location = this.getUniqueID(event, frame);\n this.logBookEvent({\n event: event.data.subject,\n div_id: location,\n act: `score: ${event.data.score}`,\n score: event.data.score,\n percent: event.data.score,\n correct: event.data.score == 1.0 ? true : false,\n answer: JSON.stringify(event.data.state),\n });\n }\n\n sendingIframe(event) {\n // determine the iframe that sent the event\n // you would think that event.source would be the iframe\n // but it is not and getting the location out of event.source\n // creates CORS issues.\n for (const f of document.getElementsByTagName(\"iframe\")) {\n if (f.contentWindow === event.source) return f;\n }\n return undefined;\n }\n\n async getSavedState(location) {\n // fetch the state from the server\n try {\n const response = await fetch(\"/ns/assessment/results\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n div_id: location,\n course: eBookConfig.course,\n event: \"SPLICE.getState\",\n }),\n });\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = await response.json();\n return data;\n } catch (error) {\n console.error(\"Error fetching SPLICE state:\", error);\n return null;\n }\n }\n\n async handleGetState(event, frame) {\n console.log(\"Got SPLICE.getState\");\n console.log(event.data.activity_id);\n console.log(event.data.state);\n // subject is SPLICE.getState.response\n let location = this.getUniqueID(event, frame);\n let res = await this.getSavedState(location);\n let state = res.detail.answer;\n event.source.postMessage(\n {\n message_id: event.data.message_id,\n subject: \"SPLICE.getState.response\",\n state: state,\n },\n \"*\"\n );\n }\n\n handleSpliceEvent(event, frame) {\n // handle generic SPLICE events, such as logged clicks\n // or other events. SPLICE does not require that we do\n // anything with them, but in keeping with our tradition\n // we will save them to the useinfo table in the database\n // in case they prove to be useful for research later\n console.log(\"Got SPLICE.sendEvent\");\n console.log(event.data.activity_id);\n console.log(event.data.name);\n //console.log(event.data.data);\n let location = this.getUniqueID(event, frame);\n this.logBookEvent({\n event: event.data.subject,\n div_id: location,\n act: event.data.name || \"unknown\",\n });\n }\n // these stubs are not implemented, but are required by the RunestoneBase class\n checkLocalStorage() {}\n setLocalStorage() {}\n restoreAnswers() {}\n disableInteraction() {}\n}\n\nfunction basicParseJwt(token) {\n var base64Url = token.split(\".\")[1];\n var base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n var jsonPayload = decodeURIComponent(\n window\n .atob(base64)\n .split(\"\")\n .map(function (c) {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join(\"\")\n );\n return JSON.parse(jsonPayload);\n}\n","// ***********************************************************************************\n// |docname| - A framework allowing a Runestone component to load only the JS it needs\n// ***********************************************************************************\n// The JavaScript required by all Runestone components is quite large and results in slow page loads. This approach enables a Runestone component to load only the JavaScript it needs, rather than loading JavaScript for all the components regardless of which are actually used.\n//\n// To accomplish this, webpack's split-chunks ability analyzes all JS, starting from this file. The dynamic imports below are transformed by webpack into the dynamic fetches of just the JS required by each file and all its dependencies. (If using static imports, webpack will assume that all files are already statically loaded via script tags, defeating the purpose of this framework.)\n//\n// However, this approach leads to complexity:\n//\n// - The ``data-component`` attribute of each component must be kept in sync with the keys of the ``module_map`` below.\n// - The values in the ``module_map`` must be kept in sync with the JavaScript files which implement each of the components.\n\n// Static imports\n// ==============\n// These imports are (we assume) needed by all pages. However, it would be much better to load these in the modules that actually use them.\n//\n// These are static imports; code in `dynamically loaded components`_ deals with dynamic imports.\n//\n// jQuery-related imports.\nimport \"jquery-ui/jquery-ui.js\";\nimport \"jquery-ui/themes/base/jquery.ui.all.css\";\nimport \"./runestone/common/js/jquery.idle-timer.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.emitter.bidi.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.emitter.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.fallbacks.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.messagestore.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.parser.js\";\nimport \"./runestone/common/js/jquery_i18n/jquery.i18n.language.js\";\n\n// Bootstrap - not needed for pxx development\nimport \"bootstrap/dist/js/bootstrap.js\";\n\n// common styles come from here\nimport \"./ptxrs-bootstrap.less\";\nimport \"./runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/bootstrap-sphinx.js\";\n\n// Misc\nimport \"./runestone/common/js/bookfuncs.js\";\nimport \"./runestone/common/js/user-highlights.js\";\nimport \"./runestone/common/js/pretext.js\";\n\n// These belong in dynamic imports for the obvious component; however, these components don't include a ``data-component`` attribute.\nimport \"./runestone/matrixeq/css/matrixeq.css\";\nimport \"./runestone/webgldemo/css/webglinteractive.css\";\n\n// These are only needed for the Runestone book, but not in a library mode (such as pretext). I would prefer to dynamically load them. However, these scripts are so small I haven't bothered to do so.\nimport { getSwitch, switchTheme } from \"./runestone/common/js/theme.js\";\nimport \"./runestone/common/js/presenter_mode.js\";\nimport \"./runestone/common/css/presenter_mode.less\";\nimport { renderOneComponent } from \"./runestone/common/js/renderComponent.js\";\nimport RunestoneBase from \"./runestone/common/js/runestonebase.js\";\nimport { SpliceWrapper } from \"./runestone/splice/js/spliceWrapper.js\";\n\n// Dynamically loaded components\n// =============================\n// This provides a list of modules that components can dynamically import. Webpack will create a list of imports for each based on its analysis.\nconst module_map = {\n // Wrap each import in a function, so that it won't occur until the function is called. While something cleaner would be nice, webpack can't analyze things like ``import(expression)``.\n //\n // The keys must match the value of each component's ``data-component`` attribute -- the ``runestone_import`` and ``runestone_auto_import`` functions assume this.\n activecode: () => import(\"./runestone/activecode/js/acfactory.js\"),\n ble: () => import(\"./runestone/cellbotics/js/ble.js\"),\n // Always import the timed version of a component if available, since the timed components also define the component's factory and include the component as well. Note that ``acfactory`` imports the timed components of ActiveCode, so it follows this pattern.\n clickablearea: () =>\n import(\"./runestone/clickableArea/js/timedclickable.js\"),\n codelens: () => import(\"./runestone/codelens/js/codelens.js\"),\n datafile: () => import(\"./runestone/datafile/js/datafile.js\"),\n dragndrop: () => import(\"./runestone/dragndrop/js/timeddnd.js\"),\n fillintheblank: () => import(\"./runestone/fitb/js/timedfitb.js\"),\n groupsub: () => import(\"./runestone/groupsub/js/groupsub.js\"),\n khanex: () => import(\"./runestone/khanex/js/khanex.js\"),\n lp_build: () => import(\"./runestone/lp/js/lp.js\"),\n matching: () => import(\"./runestone/matching/js/matching.js\"),\n multiplechoice: () => import(\"./runestone/mchoice/js/timedmc.js\"),\n hparsons: () => import(\"./runestone/hparsons/js/hparsons.js\"),\n parsons: () => import(\"./runestone/parsons/js/timedparsons.js\"),\n poll: () => import(\"./runestone/poll/js/poll.js\"),\n quizly: () => import(\"./runestone/quizly/js/quizly.js\"),\n reveal: () => import(\"./runestone/reveal/js/reveal.js\"),\n selectquestion: () => import(\"./runestone/selectquestion/js/selectone.js\"),\n shortanswer: () =>\n import(\"./runestone/shortanswer/js/timed_shortanswer.js\"),\n showeval: () => import(\"./runestone/showeval/js/showEval.js\"),\n simple_sensor: () => import(\"./runestone/cellbotics/js/simple_sensor.js\"),\n spreadsheet: () => import(\"./runestone/spreadsheet/js/spreadsheet.js\"),\n tabbedStuff: () => import(\"./runestone/tabbedStuff/js/tabbedstuff.js\"),\n timedAssessment: () => import(\"./runestone/timed/js/timed.js\"),\n wavedrom: () => import(\"./runestone/wavedrom/js/wavedrom.js\"),\n // TODO: since this isn't in a ``data-component``, need to trigger an import of this code manually.\n webwork: () => import(\"./runestone/webwork/js/webwork.js\"),\n youtube: () => import(\"./runestone/video/js/runestonevideo.js\"),\n doenet: () => Promise.resolve(), // Doenet is loaded separately\n};\n\nconst module_map_cache = {};\nconst QUEUE_FLUSH_TIME_MS = 10;\nconst queue = [];\nlet queueLastFlush = 0;\n/**\n * Queue imports that are requested within `QUEUE_FLUSH_TIME_MS` of each other.\n * All such imports are imported at once, and then a promise is fired after all\n * the imports in the queue window have completed.\n */\nfunction queueImport(component_name) {\n let resolve = null;\n let reject = null;\n const retPromise = new Promise((r, rej) => {\n resolve = r;\n reject = rej;\n });\n const item = { component_name, resolve, reject };\n queue.push(item);\n window.setTimeout(flushQueue, QUEUE_FLUSH_TIME_MS + 1);\n\n return retPromise;\n}\nasync function flushQueue() {\n if (queue.length === 0) {\n return;\n }\n if (Date.now() - queueLastFlush < QUEUE_FLUSH_TIME_MS) {\n window.setTimeout(flushQueue, QUEUE_FLUSH_TIME_MS + 1);\n return;\n }\n // If we made it here, it has been at least QUEUE_FLUSH_TIME_MS since\n // the last time we flushed the queue. Therefore, we should start flushing.\n // We copy everything we flush and empty the array first.\n queueLastFlush = Date.now();\n const toFlush = [...queue];\n queue.length = 0;\n console.log(\n \"Webpack is starting the loading process for the following Runestone modules\",\n toFlush.map((item) => item.component_name)\n );\n const flushedPromise = toFlush.map(async (item) => {\n try {\n await module_map[item.component_name]();\n console.log(\n `Runestone component ${item.component_name} has been loaded`\n );\n return item;\n } catch (e) {\n item.reject(e);\n }\n });\n const flushed = await Promise.all(flushedPromise);\n try {\n flushed.forEach(function (item) {\n if (item) {\n item.resolve();\n }\n });\n } catch (e) {\n console.error(e);\n }\n}\n\n// .. _dynamic import machinery:\n//\n// Dynamic import machinery\n// ========================\n// Fulfill a promise when the Runestone pre-login complete event occurs.\nlet pre_login_complete_promise = new Promise((resolve) =>\n $(document).on(\"runestone:pre-login-complete\", resolve)\n);\nlet loadedComponents;\n// Provide a simple function to import the JS for all components on the page.\nexport function runestone_auto_import() {\n // Create a set of ``data-component`` values, to avoid duplication.\n const s = new Set(\n // All Runestone components have a ``data-component`` attribute.\n $(\"[data-component]\")\n .map(\n // Extract the value of the data-component attribute.\n (index, element) => $(element).attr(\"data-component\")\n // Switch from a jQuery object back to an array, passing that to the Set constructor.\n )\n .get()\n );\n // webwork questions are not wrapped in div with a data-component so we have to check a different way\n if (document.querySelector(\".webwork-button\")) {\n s.add(\"webwork\");\n }\n\n // Load JS for each of the components found.\n const a = [...s].map((value) => {\n let z;\n console.log(`Loading Runestone component: ${value}`);\n try {\n z = (module_map[value] || (() => Promise.resolve()))();\n } catch (e) {\n console.error(`Error loading ${value}:`, e);\n }\n z.error = (msg) => console.error(`Error in ${value}:`, msg);\n return z;\n });\n\n // Send the Runestone login complete event when all JS is loaded and the pre-login is also complete.\n Promise.all([pre_login_complete_promise, ...a]).then(function () {\n if (!document.body.dataset.reactInUse) {\n document.dispatchEvent(new CustomEvent(\"runestone:login-complete\"));\n }\n });\n}\n\npre_login_complete_promise.then(() => {\n console.log(\"Runestone pre-login complete\");\n});\n\n// Load component JS when the document is ready.\n$(document).ready(runestone_auto_import);\n\n// Provide a function to import one specific `Runestone` component.\n// the import function inside module_map is async -- runestone_import\n// should be awaited when necessary to ensure the import completes\nexport async function runestone_import(component_name) {\n if (module_map_cache[component_name]) {\n return module_map_cache[component_name];\n }\n console.log(\n `Runestone component ${component_name} is being queued for import`\n );\n const promise = queueImport(component_name);\n module_map_cache[component_name] = promise;\n return promise;\n}\n\nasync function popupScratchAC() {\n // load the activecode bundle\n await runestone_import(\"activecode\");\n // scratchDiv will be defined if we have already created a scratch\n // activecode. If its not defined then we need to get it ready to toggle\n if (!eBookConfig.scratchDiv) {\n window.ACFactory.createScratchActivecode();\n let divid = eBookConfig.scratchDiv;\n window.componentMap[divid] = ACFactory.createActiveCode(\n $(`#${divid}`)[0],\n eBookConfig.acDefaultLanguage\n );\n if (eBookConfig.isLoggedIn) {\n window.componentMap[divid].enableSaveLoad();\n }\n }\n setTimeout(() => {\n window.ACFactory.toggleScratchActivecode();\n }, 100);\n}\n\n// Set the directory containing this script as the `path `_ for all webpacked scripts.\nconst script_src = document.currentScript.src;\n__webpack_public_path__ = script_src.substring(\n 0,\n script_src.lastIndexOf(\"/\") + 1\n);\n\nvar splice = new SpliceWrapper();\n\n// Manual exports\n// ==============\n// Webpack's ``output.library`` setting doesn't seem to work with the split chunks plugin; do all exports manually through the ``window`` object instead.\n\nconst rc = {};\nrc.runestone_import = runestone_import;\nrc.runestone_auto_import = runestone_auto_import;\nrc.getSwitch = getSwitch;\nrc.switchTheme = switchTheme;\nrc.popupScratchAC = popupScratchAC;\nrc.renderOneComponent = renderOneComponent;\nwindow.componentMap = {};\nwindow.runestoneComponents = rc;\n","export function getSwitch() {\n const toggleSwitch = document.querySelector('.theme-switch input[type=\"checkbox\"]');\n const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;\n\n if (currentTheme) {\n document.documentElement.setAttribute('data-theme', currentTheme);\n\n if (currentTheme === 'dark') {\n toggleSwitch.checked = true;\n }\n }\n}\n\nexport function switchTheme() {\n\n\tvar checkBox = document.getElementById(\"checkbox\");\n if (checkBox.checked == true) {\n document.documentElement.setAttribute('data-theme', 'dark');\n localStorage.setItem('theme', 'dark'); //add this\n }\n else {\n document.documentElement.setAttribute('data-theme', 'light');\n localStorage.setItem('theme', 'light'); //add this\n }\n}\n","/* ********************************\n * |docname| - Runestone Base Class\n * ********************************\n * All runestone components should inherit from RunestoneBase. In addition all runestone components should do the following things:\n *\n * 1. Ensure that they are wrapped in a div with the class runestone\n * 2. Write their source AND their generated html to the database if the database is configured\n * 3. Properly save and restore their answers using the checkServer mechanism in this base class. Each component must provide an implementation of:\n *\n * - checkLocalStorage\n * - setLocalStorage\n * - restoreAnswers\n * - disableInteraction\n *\n * 4. provide a Selenium based unit test\n */\n\nimport { pageProgressTracker } from \"./bookfuncs.js\";\n//import \"./../styles/runestone-custom-sphinx-bootstrap.css\";\n\nvar NO_DECORATE = [\"parsonsMove\", \"showeval\", \"video\", \"poll\", \"view_toggle\",\n \"dashboard\", \"selectquestion\", \"codelens\", \"peer\", \"shortanswer\"]\nexport default class RunestoneBase {\n constructor(opts) {\n this.component_ready_promise = new Promise(\n (resolve) => (this._component_ready_resolve_fn = resolve)\n );\n this.optional = false;\n if (typeof window.allComponents === \"undefined\") {\n window.allComponents = [];\n }\n window.allComponents.push(this);\n if (opts) {\n this.sid = opts.sid;\n this.graderactive = opts.graderactive;\n this.showfeedback = true;\n if (opts.timed) {\n this.isTimed = true;\n }\n if (opts.enforceDeadline) {\n this.deadline = opts.deadline;\n }\n this.optional = this.parseBooleanAttribute(opts.orig, \"data-optional\");\n if (opts.selector_id) {\n this.selector_id = opts.selector_id;\n }\n if (typeof opts.assessmentTaken !== \"undefined\") {\n this.assessmentTaken = opts.assessmentTaken;\n } else {\n // default to true as this opt is only provided from a timedAssessment\n this.assessmentTaken = true;\n }\n // This is for the selectquestion points\n // If a selectquestion is part of a timed exam it will get\n // the timedWrapper options.\n if (typeof opts.timedWrapper !== \"undefined\") {\n this.timedWrapper = opts.timedWrapper;\n } else {\n // However sometimes selectquestions\n // are used in regular assignments. The hacky way to detect this\n // is to look for doAssignment in the URL and then grab\n // the assignment name from the heading.\n if (location.href.indexOf(\"doAssignment\") >= 0) {\n this.timedWrapper = $(\"h1#assignment_name\").text();\n } else {\n this.timedWrapper = null;\n }\n }\n if ($(opts.orig).data(\"question_label\")) {\n this.question_label = $(opts.orig).data(\"question_label\");\n }\n this.is_toggle = true ? opts.is_toggle : false;\n this.is_select = true ? opts.is_select : false;\n }\n this.mjelements = [];\n let self = this;\n this.mjReady = new Promise(function (resolve, reject) {\n self.mjresolver = resolve;\n });\n this.aQueue = new AutoQueue();\n if (opts && typeof opts.preamble !== \"undefined\") {\n this.preamble = opts.preamble;\n let y = document.createElement(\"div\");\n y.classList.add(\"hidden-content\");\n y.classList.add(\"process-math\");\n y.innerHTML = \"\\\\(\" + this.preamble + \"\\\\)\";\n // This is a hack to get the preamble into the DOM so that MathJax can process it.\n opts.orig.appendChild(y);\n y.id = \"ltx_preamble\";\n y.style.display = \"none\";\n // Add the preamble to the queue object so it can prepend it to\n // future MathJax processing\n this.aQueue.preamble = y\n }\n\n this.jsonHeaders = new Headers({\n \"Content-type\": \"application/json; charset=utf-8\",\n Accept: \"application/json\",\n });\n }\n\n // Helper for parsing boolean data-* attributes\n // Unset/\"false\"/\"no\" means false, anything else, including empty string means true\n parseBooleanAttribute(element, attributeName) {\n const attrValue = element.getAttribute(attributeName);\n if (attrValue === null) {\n return false;\n }\n const lowerValue = attrValue.toLowerCase();\n if (lowerValue === \"false\" || lowerValue === \"no\") {\n return false;\n }\n return true;\n }\n\n // _`logBookEvent`\n //----------------\n // This function sends the provided ``eventInfo`` to the `hsblog endpoint` of the server. Awaiting this function returns either ``undefined`` (if Runestone services are not available) or the data returned by the server as a JavaScript object (already JSON-decoded).\n async logBookEvent(eventInfo) {\n if (this.graderactive) {\n return;\n }\n let post_return;\n eventInfo.course_name = eBookConfig.course;\n eventInfo.clientLoginStatus = eBookConfig.isLoggedIn;\n eventInfo.timezoneoffset = new Date().getTimezoneOffset() / 60;\n // For selectquestions we need to log using the selector_id for real time scoring\n if (this.selector_id) {\n eventInfo.selector_id = this.selector_id;\n }\n if (typeof this.percent === \"number\") {\n eventInfo.percent = this.percent;\n }\n if (window.assignmentId) {\n eventInfo.assignment_id = window.assignmentId;\n }\n if (\n eBookConfig.isLoggedIn &&\n eBookConfig.useRunestoneServices &&\n eBookConfig.logLevel > 0\n ) {\n post_return = this.postLogMessage(eventInfo);\n }\n if (!this.isTimed || eBookConfig.debug) {\n let prefix = eBookConfig.isLoggedIn ? \"Save\" : \"Not\";\n console.log(`${prefix} logging event ` + JSON.stringify(eventInfo));\n }\n // When selectquestions are part of an assignment especially toggle questions\n // we need to count using the selector_id of the select question.\n // We also need to log an event for that selector so that we will know\n // that interaction has taken place. This is **independent** of how the\n // autograder will ultimately grade the question!\n if (this.selector_id) {\n eventInfo.div_id = this.selector_id.replace(\n \"-toggleSelectedQuestion\",\n \"\"\n );\n eventInfo.event = \"selectquestion\";\n eventInfo.act = \"interaction\";\n this.postLogMessage(eventInfo);\n }\n if (\n typeof pageProgressTracker.updateProgress === \"function\" &&\n eventInfo.act != \"edit\" &&\n this.optional == false\n ) {\n pageProgressTracker.updateProgress(eventInfo.div_id);\n }\n // if the event is in the NO_DECORATE list then don't decorate the status\n if (NO_DECORATE.indexOf(eventInfo.event) === -1) {\n this.decorateStatus();\n }\n return post_return;\n }\n\n async postLogMessage(eventInfo) {\n var post_return;\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/bookevent`,\n {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(eventInfo),\n }\n );\n try {\n var response = await fetch(request);\n if (!response.ok) {\n if (response.status === 422) {\n // Get details about why this is unprocesable.\n post_return = await response.json();\n console.log(JSON.stringify(post_return.detail, null, 4));\n throw new Error(\"Unprocessable Request\");\n } else if (response.status == 401) {\n post_return = await response.json();\n console.log(\n `Missing authentication token ${post_return.detail}`\n );\n throw new Error(\"Missing authentication token\");\n }\n throw new Error(`Failed to save the log entry\n Status: ${response.status}`);\n }\n post_return = await response.json();\n let scoreSpec = post_return.detail;\n let gradeBox = null;\n if (this.selector_id) {\n let selector_id = this.selector_id.replace(\n \"-toggleSelectedQuestion\",\n \"\"\n );\n gradeBox = document.getElementById(`${selector_id}_score`);\n } else {\n gradeBox = document.getElementById(`${this.divid}_score`);\n }\n if (gradeBox && !this.isTimed && scoreSpec.score) {\n this.updateScores(gradeBox, scoreSpec);\n }\n } catch (e) {\n let detail = \"none\";\n if (post_return && post_return.detail) {\n detail = post_return.detail;\n }\n if (eBookConfig.useRunestoneServices) {\n alert(`Error: Your action was not saved!\n The error was ${e}\n Status Code: ${response.status}\n Detail: ${JSON.stringify(detail, null, 4)}.\n Please report this error!`);\n }\n // send a request to save this error\n console.log(\n `Error: ${e} Detail: ${detail} Status Code: ${response.status}`\n );\n }\n return post_return;\n }\n // update the score for the question and the total score\n // the presence of the gradeBox is used to determine if we are on an assignment page.\n updateScores(gradeBox, scoreSpec) {\n if (!scoreSpec.assigned || scoreSpec.score === null) {\n document.getElementById(`${this.divid}_message`).innerHTML = \"Score not updated. Submissions are closed.\";\n return;\n }\n let scoreSpan = gradeBox.getElementsByClassName(\"qscore\")[0];\n if (scoreSpan) {\n scoreSpan.innerHTML = scoreSpec.score.toFixed(1);\n }\n let allScores = document.getElementsByClassName(\"qscore\");\n let allmax = document.getElementsByClassName(\"qmaxscore\");\n let total = 0;\n let max = 0;\n for (let i = 0; i < allScores.length; i++) {\n total += parseFloat(allScores[i].innerHTML);\n max += parseFloat(allmax[i].innerHTML);\n }\n let totalSpan = document.getElementById(\"total_score\");\n if (totalSpan) {\n totalSpan.innerHTML = total.toFixed(1);\n }\n let maxSpan = document.getElementById(\"total_max\");\n if (maxSpan) {\n maxSpan.innerHTML = max;\n }\n let percentSpan = document.getElementById(\"total_percent\");\n if (percentSpan) {\n percentSpan.innerHTML = ((total / max) * 100).toFixed(2);\n }\n }\n\n // .. _logRunEvent:\n //\n // logRunEvent\n // -----------\n // This function sends the provided ``eventInfo`` to the `runlog endpoint`. When awaited, this function returns the data (decoded from JSON) the server sent back.\n async logRunEvent(eventInfo) {\n let post_promise = \"done\";\n if (this.graderactive) {\n return;\n }\n eventInfo.course = eBookConfig.course;\n eventInfo.clientLoginStatus = eBookConfig.isLoggedIn;\n eventInfo.timezoneoffset = new Date().getTimezoneOffset() / 60;\n if (this.forceSave || \"to_save\" in eventInfo === false) {\n eventInfo.save_code = \"True\";\n }\n if (typeof eventInfo.errinfo !== \"undefined\") {\n eventInfo.errinfo = eventInfo.errinfo.toString();\n }\n if (\n eBookConfig.isLoggedIn &&\n eBookConfig.useRunestoneServices &&\n eBookConfig.logLevel > 0\n ) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/runlog`,\n {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(eventInfo),\n }\n );\n let response = await fetch(request);\n if (!response.ok) {\n post_promise = await response.json();\n if (eBookConfig.useRunestoneServices) {\n alert(`Failed to save your code\n Status is ${response.status}\n Detail: ${JSON.stringify(\n post_promise.detail,\n null,\n 4\n )}`);\n } else {\n console.log(\n `Did not save the code.\n Status: ${response.status}\n Detail: ${JSON.stringify(\n post_promise.detail,\n null,\n 4\n )}`\n );\n }\n } else {\n post_promise = await response.json();\n }\n }\n if (!this.isTimed || eBookConfig.debug) {\n console.log(\"running \" + JSON.stringify(eventInfo));\n }\n if (\n typeof pageProgressTracker.updateProgress === \"function\" &&\n this.optional == false\n ) {\n pageProgressTracker.updateProgress(eventInfo.div_id);\n }\n return post_promise;\n }\n /* Checking/loading from storage\n **WARNING:** DO NOT `await` this function!\n This function, although async, does not explicitly resolve its promise by returning a value. The reason for this is because it is called by the constructor for nearly every component. In Javascript constructors cannot be async!\n\n One of the recommended ways to handle the async requirements from within a constructor is to use an attribute as a promise and resolve that attribute at the appropriate time.\n */\n async checkServer(\n // A string specifying the event name to use for querying the :ref:`getAssessResults` endpoint.\n eventInfo,\n // If true, this function will invoke ``indicate_component_ready()`` just before it returns. This is provided since most components are ready after this function completes its work.\n //\n // TODO: This defaults to false, to avoid causing problems with any components that haven't been updated and tested. After all Runestone components have been updated, default this to true and remove the extra parameter from most calls to this function.\n will_be_ready = false\n ) {\n // Check if the server has stored answer\n let self = this;\n this.checkServerComplete = new Promise(function (resolve, reject) {\n self.csresolver = resolve;\n });\n if (\n eBookConfig.isLoggedIn &&\n (this.useRunestoneServices || this.graderactive)\n ) {\n let data = {};\n data.div_id = this.divid;\n data.course = eBookConfig.course;\n data.event = eventInfo;\n if (this.graderactive && this.deadline) {\n data.deadline = this.deadline;\n data.rawdeadline = this.rawdeadline;\n data.tzoff = this.tzoff;\n }\n if (this.sid) {\n data.sid = this.sid;\n }\n if (!(data.div_id && data.course && data.event)) {\n console.log(\n `A required field is missing data ${data.div_id}:${data.course}:${data.event}`\n );\n }\n // If we are NOT in practice mode and we are not in a peer exercise\n // and assessmentTaken is true\n if (\n !eBookConfig.practice_mode &&\n !eBookConfig.peer &&\n this.assessmentTaken\n ) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/results`,\n {\n method: \"POST\",\n body: JSON.stringify(data),\n headers: this.jsonHeaders,\n }\n );\n try {\n let response = await fetch(request);\n console.log(`Response from server: ${response.status}`);\n if (response.ok) {\n data = await response.json();\n data = data.detail;\n console.log(`Data from server: ${JSON.stringify(data)} calling repopulateFromStorage`);\n this.repopulateFromStorage(data);\n this.attempted = true;\n if (typeof data.correct !== \"undefined\") {\n this.correct = data.correct;\n } else {\n this.correct = null;\n }\n console.log(`resolving checkServer with server data`);\n this.csresolver(\"server\");\n } else {\n console.log(\n `HTTP Error getting results: ${response.statusText}`\n );\n this.checkLocalStorage(); // just go right to local storage\n console.log(`resolving checkServer with local data`);\n this.csresolver(\"local\");\n }\n } catch (err) {\n console.log(`Error getting results: ${err}`);\n try {\n this.checkLocalStorage();\n } catch (err) {\n console.log(err);\n }\n }\n } else {\n this.loadData({});\n console.log(`resolving checkServer no answer given`);\n this.csresolver(\"not taken\");\n }\n } else {\n this.checkLocalStorage(); // just go right to local storage\n console.log(`resolving checkServer with local data`);\n this.csresolver(\"local\");\n }\n\n if (will_be_ready) {\n this.indicate_component_ready();\n }\n }\n\n // This method assumes that ``this.componentDiv`` refers to the ``div`` containing the component, and that this component's ID is set.\n indicate_component_ready() {\n // Add a class to indicate the component is now ready.\n this.containerDiv.classList.add(\"runestone-component-ready\");\n // Resolve the ``this.component_ready_promise``.\n this._component_ready_resolve_fn();\n }\n\n loadData(data) {\n // for most classes, loadData doesn't do anything. But for Parsons, and perhaps others in the future,\n // initialization can happen even when there's no history to be loaded\n return null;\n }\n\n /**\n * repopulateFromStorage is called after a successful API call is made to ``getAssessResults`` in\n * the checkServer method in this class\n *\n * ``restoreAnswers,`` ``setLocalStorage`` and ``checkLocalStorage`` are defined in the child classes.\n *\n * @param {*} data - a JSON object representing the data needed to restore a previous answer for a component\n * @param {*} status - the http status\n * @param {*} whatever - ignored\n */\n repopulateFromStorage(data) {\n // decide whether to use the server's answer (if there is one) or to load from storage\n if (data !== null && data !== \"no data\" && this.shouldUseServer(data)) {\n this.restoreAnswers(data);\n this.setLocalStorage(data);\n } else {\n this.checkLocalStorage();\n }\n this.decorateStatus();\n }\n shouldUseServer(data) {\n // returns true if server data is more recent than local storage or if server storage is correct\n if (\n data.correct === \"T\" ||\n data.correct === true ||\n localStorage.length === 0 ||\n this.graderactive === true ||\n this.isTimed\n ) {\n return true;\n }\n let ex = localStorage.getItem(this.localStorageKey());\n if (ex === null) {\n return true;\n }\n let storedData;\n try {\n storedData = JSON.parse(ex);\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n // definitely don't want to use local storage here\n return true;\n }\n if (data.answer == storedData.answer) return true;\n let storageDate = new Date(storedData.timestamp);\n let serverDate = new Date(data.timestamp);\n return serverDate >= storageDate;\n }\n // Return the key which to be used when accessing local storage.\n localStorageKey() {\n return (\n eBookConfig.email +\n \":\" +\n eBookConfig.course +\n \":\" +\n this.divid +\n \"-given\"\n );\n }\n addCaption(elType) {\n //someElement.parentNode.insertBefore(newElement, someElement.nextSibling);\n if (!this.isTimed) {\n var capDiv = document.createElement(\"p\");\n if (this.question_label) {\n // Display caption based on whether Runestone services have been detected\n this.caption = eBookConfig.useRunestoneServices\n ? `Activity: ${this.question_label} ${this.caption} (${this.divid})`\n : `Activity: ${this.question_label} ${this.caption}`; // Without runestone\n $(capDiv).html(this.caption);\n $(capDiv).addClass(`${elType}_caption`);\n } else {\n // Display caption based on whether Runestone services have been detected\n $(capDiv).html(\n eBookConfig.useRunestoneServices\n ? this.caption + \" (\" + this.divid + \")\"\n : this.caption\n ); // Without runestone\n $(capDiv).addClass(`${elType}_caption`);\n $(capDiv).addClass(`${elType}_caption_text`);\n }\n this.capDiv = capDiv;\n //this.outerDiv.parentNode.insertBefore(capDiv, this.outerDiv.nextSibling);\n this.containerDiv.appendChild(capDiv);\n }\n }\n\n hasUserActivity() {\n return this.isAnswered;\n }\n\n checkCurrentAnswer() {\n console.log(\n \"Each component should provide an implementation of checkCurrentAnswer\"\n );\n }\n\n async logCurrentAnswer() {\n console.log(\n \"Each component should provide an implementation of logCurrentAnswer\"\n );\n }\n renderFeedback() {\n console.log(\n \"Each component should provide an implementation of renderFeedback\"\n );\n }\n disableInteraction() {\n console.log(\n \"Each component should provide an implementation of disableInteraction\"\n );\n }\n\n toString() {\n return `${this.constructor.name}: ${this.divid}`;\n }\n\n queueMathJax(component) {\n if (typeof MathJax === \"undefined\") {\n console.log(\"Error -- MathJax is not loaded\");\n return Promise.resolve(null);\n } else {\n // See - https://docs.mathjax.org/en/latest/advanced/typeset.html\n // Per the above we should keep track of the promises and only call this\n // a second time if all previous promises have resolved.\n // Create a queue of components\n // should wait until defaultPageReady is defined\n // If defaultPageReady is not defined then just enqueue the components.\n // Once defaultPageReady is defined\n // the window.runestoneMathReady promise will be fulfilled when the\n // initial typesetting is complete.\n if (MathJax.typesetPromise) {\n if (typeof window.runestoneMathReady !== \"undefined\") {\n return window.runestoneMathReady.then(() =>\n this.mjresolver(this.aQueue.enqueue(component))\n );\n } else {\n return this.mjresolver(this.aQueue.enqueue(component));\n }\n } else {\n console.log(`Waiting on MathJax!! ${MathJax.typesetPromise}`);\n setTimeout(() => this.queueMathJax(component), 200);\n console.log(`Returning mjready promise: ${this.mjReady}`);\n return this.mjReady;\n }\n }\n }\n\n decorateStatus() {\n if (this.isTimed || eBookConfig.peer) return;\n let rsDiv = $(this.containerDiv).closest(\"div.runestone\")[0];\n if (!rsDiv) return;\n rsDiv.classList.remove(\"notAnswered\");\n rsDiv.classList.remove(\"isInCorrect\");\n rsDiv.classList.remove(\"isCorrect\");\n let assignmentInfo = localStorage.getItem(\"currentAssignmentInfo\");\n let questions = [];\n if (assignmentInfo) {\n questions = JSON.parse(assignmentInfo).questions\n }\n if (questions.indexOf(this.divid) >= 0) {\n rsDiv.classList.add(\"isAssigned\");\n }\n if (this.correct) {\n rsDiv.classList.add(\"isCorrect\");\n } else {\n if (this.correct === null || typeof this.correct === \"undefined\") {\n rsDiv.classList.add(\"notAnswered\");\n } else {\n rsDiv.classList.add(\"isInCorrect\");\n }\n }\n }\n}\n\n// Inspiration and lots of code for this solution come from\n// https://stackoverflow.com/questions/53540348/js-async-await-tasks-queue\n// The idea here is that until MathJax is ready we can just enqueue things\n// once mathjax becomes ready then we can drain the queue and continue as usual.\n\nclass Queue {\n constructor() {\n this._items = [];\n }\n enqueue(item) {\n this._items.push(item);\n }\n dequeue() {\n return this._items.shift();\n }\n get size() {\n return this._items.length;\n }\n}\n\nclass AutoQueue extends Queue {\n constructor() {\n super();\n this._pendingPromise = false;\n }\n\n enqueue(component) {\n return new Promise((resolve, reject) => {\n super.enqueue({ component, resolve, reject });\n this.dequeue();\n });\n }\n\n async dequeue() {\n if (this._pendingPromise) return false;\n\n let item = super.dequeue();\n\n if (!item) return false;\n let qq = this;\n try {\n this._pendingPromise = true;\n\n let payload = await window.runestoneMathReady\n .then(async function () {\n console.log(\n `MathJax Ready -- dequeing a typesetting run for ${item.component.id} ${qq.preamble?.innerHTML}`\n );\n if (qq.preamble) {\n await MathJax.typesetPromise([qq.preamble])\n // Use insertAdjacentElement to preserve existing DOM elements and event listeners\n // instead of overwriting innerHTML which destroys event handlers\n let preambleDiv = document.createElement(\"div\");\n preambleDiv.innerHTML = qq.preamble.innerHTML;\n item.component.insertAdjacentElement(\"afterbegin\", preambleDiv);\n console.log(\n `MathJax typeset the preamble for ${item.component.id}`\n );\n return await MathJax.typesetPromise([item.component]);\n } else {\n return await MathJax.typesetPromise([item.component]);\n }\n });\n\n this._pendingPromise = false;\n item.resolve(payload);\n } catch (e) {\n this._pendingPromise = false;\n item.reject(e);\n } finally {\n // If there are more items in the queue, continue processing them\n this.dequeue();\n }\n\n return true;\n }\n}\n\nwindow.RunestoneBase = RunestoneBase;\n","/**\n *\n * User: bmiller\n * Original: 2011-04-20\n * Date: 2019-06-14\n * Time: 2:01 PM\n * This change marks the beginning of version 4.0 of the runestone components\n * Login/logout is no longer handled through javascript but rather server side.\n * Many of the components depend on the runestone:login event so we will keep that\n * for now to keep the churn fairly minimal.\n */\n\n/*\n\n Copyright (C) 2011 Brad Miller bonelake@gmail.com\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see .\n\n */\n\n//\n// Page decoration functions\n//\n/*\nMaybe something like this at the top:\n\nActive assignment: [Ch 15 reading] [Exit assignment link]\nOn page (3 of 7) [Select input showing current page, can select others] \nBecoming this if not on a page in assignment\n\nActive assignment: [Ch 15 reading] [Exit assignment link]\nThis page is not part of that assignment. Select a page to return to it:\n[Select input]\n*/\nfunction addReadingList() {\n let assignment_info_string = localStorage.getItem(\"currentAssignmentInfo\")\n \n if (assignment_info_string && eBookConfig.readings) {\n var top,bottom,active,page_name,exit_link,fst,snd, new_pos, path_parts, new_pos_link;\n let assignment_info = JSON.parse(assignment_info_string);\n let assignment_id = assignment_info.id;\n let assignment_name = assignment_info.name;\n let reading_names = assignment_info.readingNames;\n\n active = document.createElement(\"div\");\n active.textContent = \"Active assignment: \"\n\n page_name = document.createElement(\"a\");\n page_name.textContent = assignment_name;\n page_name.href = `/assignment/student/doAssignment?assignment_id=${assignment_id}`;\n \n active.append(page_name);\n\n exit_link = document.createElement(\"a\");\n exit_link.textContent = \"Exit Assignment\";\n exit_link.href=window.location.pathname;\n\n exit_link.addEventListener('click',function(event) {\n localStorage.removeItem(\"currentAssignmentInfo\");\n });\n\n //active.append(exit_link)\n\n let cur_path_parts = window.location.pathname.split(\"/\");\n let name =\n cur_path_parts[cur_path_parts.length - 2] +\n \"/\" +\n cur_path_parts[cur_path_parts.length - 1];\n // if body has pretext class, then strip the leading path parts from each of the strings in eBookConfig.readings\n let body = document.getElementsByTagName(\"body\")[0];\n let ptxbook = false;\n let endLop = 2;\n if (body.classList.contains(\"pretext\")) {\n ptxbook = true;\n eBookConfig.readings = eBookConfig.readings.map(r => r.split(\"/\").pop());\n name = name.split(\"/\").pop();\n endLop = 1;\n }\n\n let position = eBookConfig.readings.indexOf(name);\n let num_readings = eBookConfig.readings.length;\n // get prev name\n if (position > 0) {\n new_pos = eBookConfig.readings[position - 1];\n path_parts = cur_path_parts.slice(0, cur_path_parts.length - endLop);\n path_parts.push(new_pos);\n new_pos_link = path_parts.join(\"/\");\n fst = active.cloneNode(true);\n let txt = document.createElement(\"p\");\n txt.textContent = `Page ${position + 1} of ${num_readings}, `;\n var fst_lnk = document.createElement(\"a\");\n //fst_lnk.className = \"btn btn-lg reading-navigation prev-reading\";\n fst_lnk.href = new_pos_link;\n fst_lnk.textContent = `Back to page ${\n position\n } of ${num_readings}: ${reading_names[position-1]}.`;\n txt.append(fst_lnk);\n fst.append(txt);\n \n } else if (position == 0){\n fst = active.cloneNode(true);\n let txt = document.createElement(\"p\");\n txt.textContent = `Page 1 of ${num_readings}.`;\n fst.append(txt);\n } else {\n new_pos = eBookConfig.readings[0];\n path_parts = cur_path_parts.slice(0, cur_path_parts.length - endLop);\n path_parts.push(new_pos);\n new_pos_link = path_parts.join(\"/\");\n fst = active.cloneNode(true);\n let txt = document.createElement(\"p\");\n txt.textContent = \"Notice: this page is not part of the assignment. To remove this warning click \";\n txt.append(exit_link);\n fst.append(txt);\n }\n if (position == eBookConfig.readings.length - 1) {\n // no more readings\n snd = active;\n let txt = document.createElement(\"p\");\n txt.textContent = `Page ${num_readings} of ${num_readings}: ${reading_names[position]}`;\n snd.append(txt);\n } else if (position >= 0) {\n // get next name\n new_pos = eBookConfig.readings[position + 1];\n path_parts = cur_path_parts.slice(0, cur_path_parts.length - endLop);\n path_parts.push(new_pos);\n new_pos_link = path_parts.join(\"/\");\n snd = active;\n var snd_lnk = document.createElement(\"a\");\n //snd_lnk.className = \"btn btn-lg reading-navigation next-reading\";\n snd_lnk.href = new_pos_link;\n snd_lnk.textContent = `Continue to page ${\n position + 2\n } of ${num_readings}: ${reading_names[position+1]}`;\n let txt = document.createElement(\"p\");\n txt.append(snd_lnk);\n snd.append(txt);\n \n } else {\n snd = active.cloneNode(true);\n let txt = document.createElement(\"p\");\n txt.textContent = \"Notice: this page is not part of the assignment. To remove this warning click \";\n let exit_clone = exit_link.cloneNode(true);\n\n exit_clone.addEventListener('click',function(event) {\n localStorage.removeItem(\"currentAssignmentInfo\");\n });\n txt.append(exit_clone);\n snd.append(txt);\n \n\n }\n\n top = document.createElement(\"div\");\n top.className = \"ptx-runestone-container\"\n fst.className = \"runestone assignment-nav top-assignment-nav\"\n //top.style.backgroundColor = \"var(--componentBgColor)\"\n //top.style.borderColor = \"var(--componentBorderColor)\"\n //top.style.borderWidth = \"1px\"\n top.append(fst);\n //top.append(snd);\n\n bottom = document.createElement(\"div\");\n bottom.className = \"ptx-runestone-container\"\n snd.className = \"runestone assignment-nav bottom-assignment-nav\"\n //bottom.style.backgroundColor = \"var(--componentBgColor)\"\n //bottom.style.borderColor = \"var(--componentBorderColor)\"\n //bottom.style.borderWidth = \"1px\"\n \n //bottom.append(active.cloneNode(true));\n //bottom.append(fst.cloneNode(true));\n bottom.append(snd);\n\n\n // check the body tag to see if it has a pretext class (no jquery)\n if (ptxbook) {\n //append parts to the header and progress container\n let content = document.getElementById(\"ptx-content\");\n if (content) {\n content.insertBefore(top, content.firstChild);\n }\n let pc = document.getElementById(\"scprogresscontainer\");\n if (pc) {\n pc.style.marginBottom = \"20px\";\n pc.appendChild(bottom);\n }\n return;\n }\n const mainContent = document.getElementById(\"main-content\");\n if (mainContent && snd) {\n mainContent.insertBefore(top,mainContent.firstChild)\n mainContent.appendChild(bottom);\n \n }\n }\n}\n\nfunction timedRefresh() {\n var timeoutPeriod = 900000; // 75 minutes\n let idleTimeoutId;\n\n function onIdle() {\n // After timeout period send the user back to the index. This will force a login\n // if needed when they want to go to a particular page. This may not be perfect\n // but its an easy way to make sure laptop users are properly logged in when they\n // take quizzes and save stuff.\n if (location.href.indexOf(\"index.html\") < 0) {\n console.log(\"Idle timer - \" + location.pathname);\n location.href =\n eBookConfig.app +\n \"/default/user/login?_next=\" +\n location.pathname +\n location.search;\n }\n }\n\n function resetIdleTimer() {\n if (idleTimeoutId) {\n clearTimeout(idleTimeoutId);\n }\n idleTimeoutId = setTimeout(onIdle, timeoutPeriod);\n }\n\n [\"mousemove\", \"keydown\", \"scroll\", \"click\", \"touchstart\", \"wheel\"].forEach(\n (eventName) => {\n window.addEventListener(eventName, resetIdleTimer, { passive: true });\n },\n );\n\n resetIdleTimer();\n}\n\nclass PageProgressBar {\n constructor(actDict) {\n this.possible = 0;\n this.total = 1;\n if (actDict && \"assignment_spec\" in actDict) {\n this.assignment_spec = actDict.assignment_spec;\n delete actDict.assignment_spec;\n }\n if (actDict && Object.keys(actDict).length > 0) {\n this.activities = actDict;\n } else {\n let activities = { page: 0 };\n document.querySelectorAll(\".runestone\").forEach(function (e) {\n activities[e.firstElementChild.id] = 0;\n });\n this.activities = activities;\n }\n this.calculateProgress();\n // Hide the progress bar on the index page.\n if (\n window.location.pathname.match(\n /.*\\/(index.html|toctree.html|Exercises.html|search.html)$/i,\n )\n ) {\n const scprogresscontainer = document.getElementById(\n \"scprogresscontainer\",\n );\n if (scprogresscontainer) scprogresscontainer.style.display = \"none\";\n }\n this.renderProgress();\n }\n\n calculateProgress() {\n for (let k in this.activities) {\n if (k !== undefined) {\n this.possible++;\n if (this.activities[k] > 0) {\n this.total++;\n }\n }\n }\n }\n\n renderProgress() {\n let value = 0;\n const scprogresstotal = document.getElementById(\"scprogresstotal\");\n if (scprogresstotal) scprogresstotal.textContent = this.total;\n const scprogressposs = document.getElementById(\"scprogressposs\");\n if (scprogressposs) scprogressposs.textContent = this.possible;\n try {\n value = (100 * this.total) / this.possible;\n } catch (e) {\n value = 0;\n }\n // Replace #subchapterprogress div with a native element if not already done\n let subchapterprogress = document.getElementById(\"subchapterprogress\");\n if (subchapterprogress && subchapterprogress.tagName !== \"PROGRESS\") {\n // Replace the div with a element\n const progressElem = document.createElement(\"progress\");\n progressElem.id = \"subchapterprogress\";\n progressElem.max = 100;\n progressElem.value = value;\n // Copy over any classes from the old div\n progressElem.className = subchapterprogress.className;\n subchapterprogress.replaceWith(progressElem);\n subchapterprogress = progressElem;\n } else if (subchapterprogress) {\n subchapterprogress.max = 100;\n subchapterprogress.value = value;\n }\n if (this.assignment_spec) {\n // If the user has completed all activities, send the reading score.\n // This handles the case where there are no activities on the page or\n // where the user completed activities on the assignment page and now\n // is viewing the reading page.\n let completeActivities = this.total - 1; // subtract 1 for the page reading which is in total but not an activity\n let requiredActivities =\n this.assignment_spec.activities_required || 0;\n if (completeActivities >= requiredActivities) {\n this.sendCompletedReadingScore().then(() => {\n console.log(\"Reading score sent for page\");\n // wait a tick then mark the page complete\n // this is needed to let the progress bar update before marking complete\n setTimeout(() => {\n let cb = document.getElementById(\"completionButton\");\n if (\n cb &&\n cb.textContent.toLowerCase() === \"mark as completed\"\n ) {\n cb.click();\n }\n }, 500);\n });\n }\n }\n if (!eBookConfig.isLoggedIn) {\n const subchapterDiv = document.getElementById(\"subchapterprogress\");\n if (subchapterDiv) subchapterDiv.classList.add(\"loggedout\");\n }\n }\n\n updateProgress(div_id) {\n this.activities[div_id]++;\n // Only update the progress bar on the first interaction with an object.\n if (this.activities[div_id] === 1) {\n this.total++;\n let val = (100 * this.total) / this.possible;\n const scprogresstotal2 = document.getElementById(\"scprogresstotal\");\n if (scprogresstotal2) scprogresstotal2.textContent = this.total;\n const scprogressposs2 = document.getElementById(\"scprogressposs\");\n if (scprogressposs2) scprogressposs2.textContent = this.possible;\n let subchapterprogress2 =\n document.getElementById(\"subchapterprogress\");\n if (\n subchapterprogress2 &&\n subchapterprogress2.tagName === \"PROGRESS\"\n ) {\n subchapterprogress2.value = val;\n }\n if (\n this.assignment_spec &&\n this.assignment_spec.activities_required !== null &&\n this.total >= this.assignment_spec.activities_required\n ) {\n console.log(\"Required activities completed\");\n this.sendCompletedReadingScore().then(() => {\n console.log(\"Reading score sent\");\n });\n }\n if (\n val == 100.0 &&\n (function () {\n const cb = document.getElementById(\"completionButton\");\n return (\n cb &&\n cb.textContent &&\n cb.textContent.toLowerCase() === \"mark as completed\"\n );\n })()\n ) {\n const cb = document.getElementById(\"completionButton\");\n if (cb && typeof cb.click === \"function\") {\n cb.click();\n }\n }\n }\n }\n\n async sendCompletedReadingScore() {\n let headers = new Headers({\n \"Content-type\": \"application/json; charset=utf-8\",\n Accept: \"application/json\",\n });\n let data = { ...this.assignment_spec };\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/update_reading_score`,\n {\n method: \"POST\",\n body: JSON.stringify(data),\n headers: headers,\n },\n );\n try {\n let response = await fetch(request);\n if (!response.ok) {\n console.error(\n `Failed to send reading score! ${response.statusText}`,\n );\n }\n data = await response.json();\n } catch (e) {\n console.error(`Error sending reading score ${e}`);\n }\n }\n}\n\nexport var pageProgressTracker = {};\n\nfunction getCookie(name) {\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop().split(\";\").shift();\n}\n\nasync function handlePageSetup() {\n var mess;\n if (eBookConfig.useRunestoneServices) {\n let headers = new Headers({\n \"Content-type\": \"application/json; charset=utf-8\",\n Accept: \"application/json\",\n });\n let data = {\n timezoneoffset: new Date().getTimezoneOffset() / 60,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n };\n let RS_info = getCookie(\"RS_info\");\n var tz_match = false;\n if (RS_info) {\n try {\n let cleaned = RS_info.replace(/\\\\054/g, \",\"); // handle octal comma encoding\n let info = JSON.parse(decodeURIComponent(cleaned));\n info = JSON.parse(decodeURIComponent(info));\n if (\n info.timezone === data.timezone &&\n info.tz_offset === data.timezoneoffset\n ) {\n console.log(\n \"Timezone cookie matches, not sending timezone to server\",\n );\n tz_match = true;\n }\n } catch (e) {\n console.error(\n \"Error parsing RS_info cookie, sending timezone to server\",\n );\n }\n }\n if (tz_match === false) {\n // Set a cookie so we don't have to do this again for a while.\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/set_tz_offset`,\n {\n method: \"POST\",\n body: JSON.stringify(data),\n headers: headers,\n },\n );\n try {\n let response = await fetch(request);\n if (!response.ok) {\n console.error(\n `Failed to set timezone! ${response.statusText}`,\n );\n }\n data = await response.json();\n } catch (e) {\n console.error(`Error setting timezone ${e}`);\n }\n }\n }\n console.log(`This page served by ${eBookConfig.served_by}`);\n if (eBookConfig.isLoggedIn) {\n mess = `username: ${eBookConfig.username}`;\n if (!eBookConfig.isInstructor) {\n const ipDropdown = document.getElementById(\"ip_dropdown_link\");\n if (ipDropdown && typeof ipDropdown.remove === \"function\") {\n ipDropdown.remove();\n }\n const instPeer = document.getElementById(\"inst_peer_link\");\n if (instPeer && typeof instPeer.remove === \"function\") {\n instPeer.remove();\n }\n }\n document.dispatchEvent(new Event(\"runestone:login\"));\n addReadingList();\n // Avoid the timedRefresh on the grading page.\n if (\n window.location.pathname.indexOf(\"/admin/grading\") == -1 &&\n window.location.pathname.indexOf(\"/peer/\") == -1\n ) {\n timedRefresh();\n }\n } else {\n mess = \"Not logged in\";\n document.dispatchEvent(new Event(\"runestone:logout\"));\n let bw = document.getElementById(\"browsing_warning\");\n if (bw) {\n bw.innerHTML =\n \"\";\n }\n let aw = document.getElementById(\"ad_warning\");\n if (aw) {\n aw.innerHTML =\n \"\";\n }\n }\n document.querySelectorAll(\".loggedinuser\").forEach((el) => {\n el.innerHTML = mess;\n });\n\n pageProgressTracker = new PageProgressBar(eBookConfig.activities);\n notifyRunestoneComponents();\n}\n\nfunction setupNavbarLoggedIn() {\n const profileLink = document.getElementById(\"profilelink\");\n if (profileLink) profileLink.style.removeProperty(\"display\");\n const passwordLink = document.getElementById(\"passwordlink\");\n if (passwordLink) passwordLink.style.removeProperty(\"display\");\n const registerLink = document.getElementById(\"registerlink\");\n if (registerLink) registerLink.style.display = \"none\";\n document.querySelectorAll(\"li.loginout\").forEach((el) => {\n el.innerHTML =\n 'Log Out';\n });\n}\ndocument.addEventListener(\"runestone:login\", setupNavbarLoggedIn);\n\nfunction setupNavbarLoggedOut() {\n if (eBookConfig.useRunestoneServices) {\n console.log(\"setup navbar for logged out\");\n const registerLink = document.getElementById(\"registerlink\");\n if (registerLink) registerLink.style.removeProperty(\"display\");\n const profileLink = document.getElementById(\"profilelink\");\n if (profileLink) profileLink.style.display = \"none\";\n const passwordLink = document.getElementById(\"passwordlink\");\n if (passwordLink) passwordLink.style.display = \"none\";\n const ipDropdown = document.getElementById(\"ip_dropdown_link\");\n if (ipDropdown) ipDropdown.style.display = \"none\";\n const instPeer = document.getElementById(\"inst_peer_link\");\n if (instPeer) instPeer.style.display = \"none\";\n document.querySelectorAll(\"li.loginout\").forEach((el) => {\n el.innerHTML =\n 'Login';\n });\n document.querySelectorAll(\".footer\").forEach((el) => {\n el.innerHTML = \"user not logged in\";\n });\n }\n}\ndocument.addEventListener(\"runestone:logout\", setupNavbarLoggedOut);\n\nfunction notifyRunestoneComponents() {\n // Runestone components wait until login process is over to load components because of storage issues. This triggers the `dynamic import machinery`, which then sends the login complete signal when this and all dynamic imports are finished.\n console.log(\"triggering runestone:pre-login-complete\");\n document.dispatchEvent(new Event(\"runestone:pre-login-complete\"));\n}\n\nfunction placeAdCopy() {\n if (typeof showAd !== \"undefined\" && showAd) {\n let adNum = Math.floor(Math.random() * 2) + 1;\n let adBlock = document.getElementById(`adcopy_${adNum}`);\n let rsElements = document.querySelectorAll(\".runestone\");\n if (rsElements.length > 0) {\n let randomIndex = Math.floor(Math.random() * rsElements.length);\n rsElements[randomIndex].after(adBlock);\n adBlock.style.display = \"block\";\n }\n }\n}\n\n// initialize stuff\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n if (eBookConfig) {\n handlePageSetup();\n placeAdCopy();\n } else {\n if (typeof eBookConfig === \"undefined\") {\n console.log(\n \"eBookConfig is not defined. This page must not be set up for Runestone\",\n );\n }\n }\n});\n\n// misc stuff\n// todo: This could be further distributed but making a video.js file just for one function seems dumb.\nwindow.addEventListener(\"load\", function () {\n // add the video play button overlay image\n document.querySelectorAll(\".video-play-overlay\").forEach(function (el) {\n el.style.backgroundImage =\n \"url('{{pathto('_static/play_overlay_icon.png', 1)}}')\";\n });\n\n // This function is needed to allow the dropdown search bar to work;\n // The default behaviour is that the dropdown menu closes when something in\n // it (like the search bar) is clicked\n document\n .querySelectorAll(\".dropdown input, .dropdown label\")\n .forEach(function (el) {\n el.addEventListener(\"click\", function (e) {\n e.stopPropagation();\n });\n });\n\n // re-write some urls\n // This is tricker than it looks and you have to obey the rules for # anchors\n // The #anchors must come after the query string as the server basically ignores any part\n // of a url that comes after # - like a comment...\n if (location.href.includes(\"mode=browsing\")) {\n let queryString = \"?mode=browsing\";\n document.querySelectorAll(\"a\").forEach((link) => {\n let anchorText = \"\";\n if (\n link.href.includes(\"books/published\") &&\n !link.href.includes(\"?mode=browsing\")\n ) {\n if (link.href.includes(\"#\")) {\n let aPoint = link.href.indexOf(\"#\");\n anchorText = link.href.substring(aPoint);\n link.href = link.href.substring(0, aPoint);\n }\n link.href = link.href.includes(\"?\")\n ? link.href + queryString.replace(\"?\", \"&\") + anchorText\n : link.href + queryString + anchorText;\n }\n });\n }\n});\n\n/**\n * Returns true if the string appears to contain LaTeX math.\n */\nexport function looksLikeLatexMath(text) {\n if (typeof text !== \"string\") return false;\n\n // Common LaTeX math delimiters\n const mathDelimiters = [\n /\\$\\$[\\s\\S]+?\\$\\$/, // $$ ... $$\n /\\$[^$\\n]+?\\$/, // $ ... $\n /\\\\\\[[\\s\\S]+?\\\\\\]/, // \\[ ... \\]\n /\\\\\\([\\s\\S]+?\\\\\\)/, // \\( ... \\)\n ];\n\n // Common math commands (avoid generic \\text or \\ref-only cases)\n const mathCommands =\n /\\\\(frac|sqrt|sum|prod|int|lim|sin|cos|tan|log|ln|alpha|beta|gamma|pi|theta|sigma|Delta|cdot|times|leq|geq|neq)\\b/;\n\n // Superscripts/subscripts like x^2 or a_i\n const superSubScript = /[a-zA-Z0-9]\\s*[\\^_]\\s*\\{?.+?\\}?/;\n\n return (\n mathDelimiters.some((re) => re.test(text)) ||\n mathCommands.test(text) ||\n superSubScript.test(text)\n );\n}\n","import { runestone_import } from \"../../../webpack.index.js\";\n\nexport async function renderRunestoneComponent(\n componentSrc,\n whereDiv,\n moreOpts\n) {\n /**\n * The easy part is adding the componentSrc to the existing div.\n * The tedious part is calling the right functions to turn the\n * source into the actual component.\n */\n if (!componentSrc) {\n jQuery(`#${whereDiv}`).html(\n `

    Sorry, no source is available for preview.

    `\n );\n return;\n }\n let patt = /..\\/_images/g;\n componentSrc = componentSrc.replace(\n patt,\n `${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`\n );\n jQuery(`#${whereDiv}`).html(componentSrc);\n\n if (typeof window.componentMap === \"undefined\") {\n window.componentMap = {};\n }\n\n let componentKind = $($(`#${whereDiv} [data-component]`)[0]).data(\n \"component\"\n );\n // Import the JavaScript for this component before proceeding.\n await runestone_import(componentKind);\n let opt = {};\n opt.orig = jQuery(`#${whereDiv} [data-component]`)[0];\n if (opt.orig) {\n opt.lang = $(opt.orig).data(\"lang\");\n opt.useRunestoneServices = true;\n opt.graderactive = false;\n opt.python3 = true;\n if (typeof moreOpts !== \"undefined\") {\n for (let key in moreOpts) {\n opt[key] = moreOpts[key];\n }\n }\n }\n\n if (typeof component_factory === \"undefined\") {\n alert(\"Error: Missing the component factory!\");\n } else {\n if (\n !window.component_factory[componentKind] &&\n !jQuery(`#${whereDiv}`).html()\n ) {\n jQuery(`#${whereDiv}`).html(\n `

    Preview not available for ${componentKind}

    `\n );\n } else {\n let res = window.component_factory[componentKind](opt);\n if (componentKind === \"activecode\") {\n if (moreOpts.multiGrader) {\n window.componentMap[\n `${moreOpts.gradingContainer} ${res.divid}`\n ] = res;\n } else {\n window.componentMap[res.divid] = res;\n }\n }\n }\n }\n}\n\nexport function createTimedComponent(componentSrc, moreOpts) {\n /* The important distinction is that the component does not really need to be rendered\n into the page, in fact, due to the async nature of getting the source the list of questions\n is made and the original html is replaced by the look of the exam.\n */\n\n let patt = /..\\/_images/g;\n componentSrc = componentSrc.replace(\n patt,\n `${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`\n );\n\n let componentKind = $($(componentSrc).find(\"[data-component]\")[0]).data(\n \"component\"\n );\n\n let origId = $(componentSrc).find(\"[data-component]\").first().attr(\"id\");\n\n // Double check -- if the component source is not in the DOM, then briefly add it\n // and call the constructor.\n let hdiv;\n if (!document.getElementById(origId)) {\n hdiv = $(\"
    \", {\n css: { display: \"none\" },\n }).appendTo(\"body\");\n hdiv.html(componentSrc);\n }\n // at this point hdiv is a jquery object\n\n let ret;\n let opts = {\n orig: document.getElementById(origId),\n timed: true,\n };\n if (typeof moreOpts !== \"undefined\") {\n for (let key in moreOpts) {\n opts[key] = moreOpts[key];\n }\n }\n\n if (componentKind in window.component_factory) {\n ret = window.component_factory[componentKind](opts);\n }\n\n let rdict = {};\n rdict.question = ret;\n return rdict;\n}\n\n// For integration with the React overhault of Pretext\n// 1. Disable the automatic instantiation at the end of each component.js\n// 2. react will search for all \".runestone\" and will call this function for each of them.\nexport async function renderOneComponent(rsDiv) {\n // Find the actual component inside the runestone component.\n let component = rsDiv.querySelector(\"[data-component]\");\n if (component == null) {\n console.log(\"Render was called for a component, but now [data-component] attribute is present. This may mean the component has already been rendered.\")\n return;\n }\n let componentKind = component.dataset.component;\n await runestone_import(componentKind);\n if ($(this).closest(\"[data-component=timedAssessment]\").length == 0) {\n // If this element exists within a timed component, don't render it here\n try {\n let divid = component.id;\n window.componentMap[divid] = window.component_factory[\n componentKind\n ]({\n orig: component,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n });\n } catch (err) {\n console.log(`Error rendering ${componentKind} Problem ${this.id}\n Details: ${err}`);\n }\n }\n}\n"],"names":["$","patchToc","$ul","minLevel","findA","$elem","level","find","each","index","item","$item","tag","tagName","toLowerCase","$childrenLi","children","$parentLi","parent","length","addClass","first","attr","patchTables","removeClass","navHeight","height","shiftWindow","scrollBy","location","hash","window","addEventListener","this","remove","not","$parent","$kids","detach","replaceWith","after","$localLi","dropdown","i","e","hasClass","text","jQuery","codeExercises","presentModeInitialized","presentToggle","dataComponent","closest","css","wrapAll","wrap","before","presentModeSetup","bod","presentClass","fullHeightClass","bottomClass","localStorage","setItem","presenterCssLink","disabled","activateExercise","getActiveExercise","active","filter","nextExercise","nextIndex","prevExercise","prevIndex","document","on","eBookConfig","isInstructor","prepend","change","i18n","extend","fallbacks","ab","ace","aln","als","an","anp","arn","arz","av","ay","ba","bar","bcc","bh","bjn","bm","bpy","bqi","bug","ce","crh","csb","cv","dsb","dtp","egl","eml","ff","fit","frc","frp","frr","fur","gag","gan","gl","glk","gn","gsw","hif","hsb","ht","ii","inh","iu","jut","jv","kaa","kbd","khw","kiu","kk","kl","koi","krc","ks","ksh","ku","kv","lad","lb","lbe","lez","li","lij","liv","lmo","ln","ltg","lzz","mai","mg","mhr","min","mo","mrj","mwl","myv","mzn","nah","nap","nds","no","os","pcd","pdc","pdt","pfl","pms","pt","qu","qug","rgn","rmy","rue","ruq","sa","sah","scn","sg","sgs","sli","sr","srn","stq","su","szl","tcy","tg","tt","ty","udm","ug","uk","vec","vep","vls","vmf","vot","vro","wa","wo","wuu","xal","xmf","yi","za","zea","zh","language","pluralRules","ak","one","am","ar","zero","two","few","many","ars","as","be","bn","br","bs","cs","cy","da","fa","fil","fr","ga","gd","gu","guw","gv","he","hi","hr","hy","is","iw","kab","kn","kw","lag","lt","lv","mk","mr","mt","naq","nso","pa","pl","prg","ro","ru","se","sh","shi","si","sk","sl","sma","smi","smj","smn","sms","ti","tl","tzm","zu","convertPlural","count","forms","pluralFormIndex","form","explicitPluralPattern","RegExp","test","parseInt","slice","indexOf","undefined","map","locale","getPluralForm","Math","number","pluralForms","pluralRuleParser","convertNumber","num","integer","tmp","transformTable","numberString","convertedNumber","digitTransformTable","String","parseFloat","convertGrammar","word","gender","push","tables","ml","lo","or","kh","my","ta","te","th","bo","split","languages","strongDirRegExp","parser","emitter","bidi","nodes","m","dir","match","module","exports","MessageParserEmitter","prototype","constructor","emit","node","replacements","ret","subnodes","operation","messageParserEmitter","n","Error","concat","result","replace","plural","grammar","MessageParser","options","defaults","simpleParse","message","parameters","str","parse","ast","pipe","colon","backslash","anyCharacter","dollar","digits","regularLiteral","regularLiteralWithoutBar","escapedOrLiteralWithoutBar","escapedOrRegularLiteral","templateContents","templateName","openTemplate","closeTemplate","expression","paramExpression","p","fn","pos","choice","parserSyntax","sequence","res","originalPos","nOrMore","parsed","makeStringParser","s","len","makeRegexParser","regex","matches","escapedLiteral","replacement","templateParam","expr","templateWithReplacement","templateWithOutReplacement","template","toString","join","start","MessageStore","messages","sources","load","source","url","deferred","key","deferreds","messageStore","log","Deferred","getJSON","done","resolve","fail","jqxhr","settings","exception","promise","localization","set","Object","hasOwnProperty","call","when","apply","get","messageKey","I18N","nav","Array","localize","localeParts","localePartIndex","fallbackIndex","tryingLocale","fallbackLocale","destroy","removeData","fallbackLocales","locIndex","sourceMap","pop","param1","data","arguments","lBracket","rBracket","type","$this","html","debug","console","navigator","userLanguage","idleTimer","newTimeout","elem","opts","startImmediately","idle","enabled","timeout","events","toggleIdleState","myelem","obj","elapsed","Date","olddate","clearTimeout","tId","setTimeout","event","Event","trigger","off","stop","trim","isPreTeXt","querySelector","processPageState","completionFlag","pageLoad","markingComplete","markingIncomplete","currentPathname","pathname","substring","lastIndexOf","isPtxBook","lastPageUrl","lastPageScrollLocation","round","scrollTop","course","ajaxError","jqhxr","ajax","new_server_prefix","contentType","dataType","JSON","stringify","method","async","lastPositionVal","href","completionClass","completionMsg","detail","completionStatus","scp","classList","add","append","getCompletions","getUrlVar","animate","navLinkBgRightHalfOpen","navLinkBgRightHiddenPosition","outerWidth","relationsNextIconInitialPosition","relationsNextIconNewPosition","show","navBgShown","scroll","right","left","addNavigationAndCompletionButtons","subChapterList","allSubChapterURLs","chapterName","subChapterName","parentElement","endDate","hover","next","hide","lastPageData","lastPageChapter","lastPageSubchapter","decorateTableOfContents","getUrlVars","vars","hashes","search","name","rb","querySelectorAll","forEach","el","div_id","getAttribute","logBookEvent","act","open","id","btn","container","codeInput","textContent","warn","style","display","setupPTXEvents","getElementById","overflow","SpliceWrapper","super","initSplice","base64","jsonPayload","sourceIframe","sendingIframe","subject","handleScoreAndState","handleSpliceEvent","handleGetState","origin","msgdata","jwt","decodeURIComponent","atob","c","charCodeAt","frame_id","score","getUniqueID","frame","rsDiv","activity_id","src","error","state","percent","correct","answer","f","getElementsByTagName","contentWindow","getSavedState","response","fetch","headers","body","ok","status","json","postMessage","message_id","checkLocalStorage","setLocalStorage","restoreAnswers","disableInteraction","module_map","activecode","ble","clickablearea","codelens","datafile","dragndrop","fillintheblank","groupsub","khanex","lp_build","matching","multiplechoice","hparsons","parsons","poll","quizly","reveal","selectquestion","shortanswer","showeval","simple_sensor","spreadsheet","tabbedStuff","timedAssessment","wavedrom","webwork","youtube","doenet","Promise","module_map_cache","QUEUE_FLUSH_TIME_MS","queue","queueLastFlush","flushQueue","now","toFlush","component_name","flushedPromise","reject","flushed","all","pre_login_complete_promise","runestone_auto_import","Set","element","a","value","z","msg","then","dataset","reactInUse","dispatchEvent","CustomEvent","runestone_import","retPromise","r","rej","queueImport","ready","script_src","currentScript","rc","getSwitch","toggleSwitch","currentTheme","getItem","documentElement","setAttribute","checked","switchTheme","popupScratchAC","scratchDiv","ACFactory","createScratchActivecode","divid","componentMap","createActiveCode","acDefaultLanguage","isLoggedIn","enableSaveLoad","toggleScratchActivecode","renderOneComponent","runestoneComponents","NO_DECORATE","RunestoneBase","component_ready_promise","_component_ready_resolve_fn","optional","allComponents","sid","graderactive","showfeedback","timed","isTimed","enforceDeadline","deadline","parseBooleanAttribute","orig","selector_id","assessmentTaken","timedWrapper","question_label","is_toggle","is_select","mjelements","self","mjReady","mjresolver","aQueue","AutoQueue","preamble","y","createElement","innerHTML","appendChild","jsonHeaders","Headers","Accept","attributeName","attrValue","lowerValue","eventInfo","post_return","course_name","clientLoginStatus","timezoneoffset","getTimezoneOffset","assignmentId","assignment_id","useRunestoneServices","logLevel","postLogMessage","prefix","updateProgress","decorateStatus","request","Request","scoreSpec","gradeBox","updateScores","alert","assigned","scoreSpan","getElementsByClassName","toFixed","allScores","allmax","total","max","totalSpan","maxSpan","percentSpan","logRunEvent","post_promise","forceSave","save_code","errinfo","checkServer","will_be_ready","checkServerComplete","csresolver","rawdeadline","tzoff","practice_mode","peer","loadData","repopulateFromStorage","attempted","statusText","err","indicate_component_ready","containerDiv","shouldUseServer","storedData","ex","localStorageKey","removeItem","storageDate","timestamp","email","addCaption","elType","capDiv","caption","hasUserActivity","isAnswered","checkCurrentAnswer","logCurrentAnswer","renderFeedback","queueMathJax","component","MathJax","typesetPromise","runestoneMathReady","enqueue","assignmentInfo","questions","Queue","_items","dequeue","shift","size","_pendingPromise","qq","payload","preambleDiv","insertAdjacentElement","PageProgressBar","actDict","possible","assignment_spec","keys","activities","page","firstElementChild","calculateProgress","scprogresscontainer","renderProgress","k","scprogresstotal","scprogressposs","subchapterprogress","progressElem","className","activities_required","sendCompletedReadingScore","cb","click","subchapterDiv","val","scprogresstotal2","scprogressposs2","subchapterprogress2","pageProgressTracker","looksLikeLatexMath","some","re","profileLink","removeProperty","passwordLink","registerLink","app","ipDropdown","instPeer","mess","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","RS_info","parts","cookie","getCookie","tz_match","cleaned","info","tz_offset","served_by","username","assignment_info_string","readings","top","bottom","page_name","exit_link","fst","snd","new_pos","path_parts","new_pos_link","assignment_info","assignment_name","reading_names","readingNames","cur_path_parts","ptxbook","endLop","contains","position","num_readings","cloneNode","txt","fst_lnk","snd_lnk","exit_clone","content","insertBefore","firstChild","pc","marginBottom","mainContent","addReadingList","idleTimeoutId","onIdle","resetIdleTimer","eventName","passive","timedRefresh","bw","aw","handlePageSetup","showAd","adNum","floor","random","adBlock","rsElements","placeAdCopy","backgroundImage","stopPropagation","includes","queryString","link","anchorText","aPoint","renderRunestoneComponent","componentSrc","whereDiv","moreOpts","basecourse","componentKind","opt","lang","python3","component_factory","multiGrader","gradingContainer","createTimedComponent","hdiv","origId","appendTo","rdict","question"],"sourceRoot":""} \ No newline at end of file diff --git a/course/_static/prefix-runestone.80892ed1280c2803.bundle.js.map.gz b/course/_static/prefix-runestone.80892ed1280c2803.bundle.js.map.gz new file mode 100755 index 0000000000000000000000000000000000000000..52c654439a6edf6fc36a3332e51c68e5fff5ddd7 GIT binary patch literal 70356 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 literal 0 HcmV?d00001 diff --git a/course/_static/prefix-runtime.991c135ccf182bf5.bundle.js b/course/_static/prefix-runtime.3dca4b99808f4053.bundle.js similarity index 82% rename from course/_static/prefix-runtime.991c135ccf182bf5.bundle.js rename to course/_static/prefix-runtime.3dca4b99808f4053.bundle.js index 21187fc..a561853 100755 --- a/course/_static/prefix-runtime.991c135ccf182bf5.bundle.js +++ b/course/_static/prefix-runtime.3dca4b99808f4053.bundle.js @@ -1,2 +1,2 @@ -(()=>{"use strict";var e,r,t,a,d,c={},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var t=n[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,o),t.loaded=!0,t.exports}o.m=c,e=[],o.O=(r,t,a,d)=>{if(!t){var c=1/0;for(i=0;i=d)&&Object.keys(o.O).every((e=>o.O[e](t[b])))?t.splice(b--,1):(n=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[t,a,d]},o.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return o.d(r,{a:r}),r},o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((r,t)=>(o.f[t](e,r),r)),[])),o.u=e=>e+"."+{28:"bb005543f41af5fb",39:"dc45aaf5abca8027",126:"a976f62852f30b51",128:"5bed857c54ac4e8b",131:"ee437eeefadd750d",168:"fe63e6dec2d06468",186:"be52164d57f4b7e4",249:"7ec032cf0b3ede9a",268:"0659406f2c053718",296:"37eb8c05642d8ef9",340:"c525bd899366c5f9",357:"a6fa55aea0c38a63",412:"5965503d81003593",420:"8dae5ad08a4e52ad",442:"f48919e396acaa18",460:"bae9001422d7a484",466:"4e1a3fb09520281a",486:"78d96ffc5c65634b",529:"115400ffea03835d",566:"0e38ac5442cc38c2",576:"f923ab1e9910a1be",580:"f387819ad2e14f0a",616:"89f80a32caf41aef",625:"120987bdd5293ae3",640:"cbc8d3a34deb8837",662:"1bb5065279414751",669:"05a3639d12541567",680:"ec85c3ce31480628",759:"f27ff66e7ad33076",764:"c33a81cafe63d2b6",770:"7bd6d39128dde910",817:"3438cd0f1b0f98bc",819:"fa7785b520e523a5",824:"4343b78afc34c12f",877:"fc49cc812ccc4937",915:"8f500bccc86f901d",919:"237aced0c044e4b6"}[e]+".js",o.miniCssF=e=>"prefix-"+e+"."+{39:"89cf817b9a35aeca",131:"b184379d0dc5871b",168:"1c4deaed00ca1f5e",186:"0d47de180767fda9",198:"86b6b2a70a576922",249:"6ca19da539a8ed1a",268:"c9e33e1350d18af9",294:"986bf74bfa4ccbd4",350:"dbca9271f6e2dfbf",380:"67748940131a4a84",412:"25f3c4ff23eb9893",442:"6ae0ea584f8e75c5",460:"7c0b70502d117f7d",486:"990aca82e7ba3e1c",576:"9b1852878840651d",580:"22958d4327b0425a",616:"5c78f604ddad1ec0",621:"8c109e297bdd8ce7",737:"cf869b6ea8bfad2f",824:"271ae6cff6401ed5",850:"e86d03c2cec75438",877:"fa7c46f756cd5a82",915:"882512b642b7fffa"}[e]+".css",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r={},t="WebComponents:",o.l=(e,a,d,c)=>{if(r[e])r[e].push(a);else{var n,b;if(void 0!==d)for(var f=document.getElementsByTagName("script"),i=0;i{n.onerror=n.onload=null,clearTimeout(u);var d=r[e];if(delete r[e],n.parentNode&&n.parentNode.removeChild(n),d&&d.forEach((e=>e(a))),t)return t(a)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=s.bind(null,n.onerror),n.onload=s.bind(null,n.onload),b&&document.head.appendChild(n)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var r=o.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),a=e=>new Promise(((r,t)=>{var a=o.miniCssF(e),d=o.p+a;if(((e,r)=>{for(var t=document.getElementsByTagName("link"),a=0;a{var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onerror=d.onload=c=>{if(d.onerror=d.onload=null,"load"===c.type)t();else{var n=c&&("load"===c.type?"missing":c.type),o=c&&c.target&&c.target.href||r,b=new Error("Loading CSS chunk "+e+" failed.\n("+o+")");b.code="CSS_CHUNK_LOAD_FAILED",b.type=n,b.request=o,d.parentNode.removeChild(d),a(b)}},d.href=r,document.head.appendChild(d)})(e,d,r,t)})),d={121:0},o.f.miniCss=(e,r)=>{d[e]?r.push(d[e]):0!==d[e]&&{39:1,131:1,168:1,186:1,198:1,249:1,268:1,294:1,350:1,380:1,412:1,442:1,460:1,486:1,576:1,580:1,616:1,621:1,737:1,824:1,850:1,877:1,915:1}[e]&&r.push(d[e]=a(e).then((()=>{d[e]=0}),(r=>{throw delete d[e],r})))},(()=>{var e={121:0};o.f.j=(r,t)=>{var a=o.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^([16]21|(35|38|85)0|198|294|737)$/.test(r))e[r]=0;else{var d=new Promise(((t,d)=>a=e[r]=[t,d]));t.push(a[2]=d);var c=o.p+o.u(r),n=new Error;o.l(c,(t=>{if(o.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var d=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;n.message="Loading chunk "+r+" failed.\n("+d+": "+c+")",n.name="ChunkLoadError",n.type=d,n.request=c,a[1](n)}}),"chunk-"+r,r)}},o.O.j=r=>0===e[r];var r=(r,t)=>{var a,d,[c,n,b]=t,f=0;if(c.some((r=>0!==e[r]))){for(a in n)o.o(n,a)&&(o.m[a]=n[a]);if(b)var i=b(o)}for(r&&r(t);f{"use strict";var e,r,t,a,d,c={},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var t=n[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,o),t.loaded=!0,t.exports}o.m=c,e=[],o.O=(r,t,a,d)=>{if(!t){var c=1/0;for(i=0;i=d)&&Object.keys(o.O).every((e=>o.O[e](t[f])))?t.splice(f--,1):(n=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[t,a,d]},o.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return o.d(r,{a:r}),r},o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((r,t)=>(o.f[t](e,r),r)),[])),o.u=e=>e+"."+{28:"bb005543f41af5fb",39:"dc45aaf5abca8027",126:"a976f62852f30b51",128:"5bed857c54ac4e8b",131:"ee437eeefadd750d",168:"fe63e6dec2d06468",186:"be52164d57f4b7e4",249:"7ec032cf0b3ede9a",268:"0659406f2c053718",296:"37eb8c05642d8ef9",340:"c525bd899366c5f9",357:"a6fa55aea0c38a63",412:"5965503d81003593",420:"8dae5ad08a4e52ad",442:"f48919e396acaa18",460:"bae9001422d7a484",466:"4e1a3fb09520281a",486:"78d96ffc5c65634b",529:"115400ffea03835d",566:"0e38ac5442cc38c2",576:"f923ab1e9910a1be",580:"f387819ad2e14f0a",616:"89f80a32caf41aef",625:"120987bdd5293ae3",640:"cbc8d3a34deb8837",662:"e77a89c65303c376",669:"05a3639d12541567",680:"ec85c3ce31480628",759:"f27ff66e7ad33076",764:"c33a81cafe63d2b6",770:"7bd6d39128dde910",817:"3438cd0f1b0f98bc",819:"fa7785b520e523a5",824:"4343b78afc34c12f",877:"fc49cc812ccc4937",915:"8f500bccc86f901d",919:"237aced0c044e4b6"}[e]+".js",o.miniCssF=e=>"prefix-"+e+"."+{39:"89cf817b9a35aeca",131:"b184379d0dc5871b",168:"1c4deaed00ca1f5e",186:"0d47de180767fda9",198:"86b6b2a70a576922",249:"6ca19da539a8ed1a",268:"c9e33e1350d18af9",294:"986bf74bfa4ccbd4",350:"dbca9271f6e2dfbf",380:"67748940131a4a84",412:"25f3c4ff23eb9893",442:"6ae0ea584f8e75c5",460:"7c0b70502d117f7d",486:"990aca82e7ba3e1c",576:"9b1852878840651d",580:"22958d4327b0425a",616:"5c78f604ddad1ec0",621:"8c109e297bdd8ce7",737:"cf869b6ea8bfad2f",824:"271ae6cff6401ed5",850:"e86d03c2cec75438",877:"fa7c46f756cd5a82",915:"882512b642b7fffa"}[e]+".css",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r={},t="WebComponents:",o.l=(e,a,d,c)=>{if(r[e])r[e].push(a);else{var n,f;if(void 0!==d)for(var b=document.getElementsByTagName("script"),i=0;i{n.onerror=n.onload=null,clearTimeout(u);var d=r[e];if(delete r[e],n.parentNode&&n.parentNode.removeChild(n),d&&d.forEach((e=>e(a))),t)return t(a)},u=setTimeout(s.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=s.bind(null,n.onerror),n.onload=s.bind(null,n.onload),f&&document.head.appendChild(n)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var r=o.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),a=e=>new Promise(((r,t)=>{var a=o.miniCssF(e),d=o.p+a;if(((e,r)=>{for(var t=document.getElementsByTagName("link"),a=0;a{var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onerror=d.onload=c=>{if(d.onerror=d.onload=null,"load"===c.type)t();else{var n=c&&("load"===c.type?"missing":c.type),o=c&&c.target&&c.target.href||r,f=new Error("Loading CSS chunk "+e+" failed.\n("+o+")");f.code="CSS_CHUNK_LOAD_FAILED",f.type=n,f.request=o,d.parentNode.removeChild(d),a(f)}},d.href=r,document.head.appendChild(d)})(e,d,r,t)})),d={121:0},o.f.miniCss=(e,r)=>{d[e]?r.push(d[e]):0!==d[e]&&{39:1,131:1,168:1,186:1,198:1,249:1,268:1,294:1,350:1,380:1,412:1,442:1,460:1,486:1,576:1,580:1,616:1,621:1,737:1,824:1,850:1,877:1,915:1}[e]&&r.push(d[e]=a(e).then((()=>{d[e]=0}),(r=>{throw delete d[e],r})))},(()=>{var e={121:0};o.f.j=(r,t)=>{var a=o.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^([16]21|(35|38|85)0|198|294|737)$/.test(r))e[r]=0;else{var d=new Promise(((t,d)=>a=e[r]=[t,d]));t.push(a[2]=d);var c=o.p+o.u(r),n=new Error;o.l(c,(t=>{if(o.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var d=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;n.message="Loading chunk "+r+" failed.\n("+d+": "+c+")",n.name="ChunkLoadError",n.type=d,n.request=c,a[1](n)}}),"chunk-"+r,r)}},o.O.j=r=>0===e[r];var r=(r,t)=>{var a,d,[c,n,f]=t,b=0;if(c.some((r=>0!==e[r]))){for(a in n)o.o(n,a)&&(o.m[a]=n[a]);if(f)var i=f(o)}for(r&&r(t);b>rwkH-V}PARk}b&_ePX`HE(=?6ve zfWX41L`SM56~}YZfA6!Pcz3?U&5W%h7rB&ctMfXId68DToj=YRV9Dci7vN>mP+y40fm0XV z)jFhly$QSMb?u)WVE16)#Wudaf7mSfi1t=!bK z-frMKwy~IOKO5)C7L)x8d1;PE{h~I(<>l+i|Gkq9*Y#&7Q3-up-pXwKQg-`yt zwwoXbUXIbQ-)%Md_WC-M!P3VDGBls*%S&HFSHO6-!9C6Mwr-w-v8k1hry1-9OZvJA zPNy04lc{0Tp@#ckDL2tkw){}7Mp3knIfMHw1_;Z{IOQW}M zY4}%X4m*0uSwoQ_s}8$y>E7l5c98-0_iEXng0N>rruLCf9EjPhaj}K5K^Ju#Cct;W zkK`WDNJ96vrEmLgPyP6T$HIGR4|mk7W=BiJd72{s_%BLU$78LoQ3!oglj|ziVm!ZuDr;*x{u4H*EB+8S(?~XDx2BH3zKT; z8J%Vd@2b(N6mj8&GR~Kts*2p^ahb(75ltpp3>{fRrpyYRrAnt%LWfM`(j!Wff(T$5 zQ)I$GoMX17JfYl>j*ZCEyo9)f?uN2h=BddFn>GcdUKppaq#!MlSXb>_rb0e5n%vP_W@Iw@72 zcws7IxKrg>CK6LhA(E_OaSSD;QIshoN|nM?1$WXEvu#>dvZAEQl~#%^Nps9@6jegV zG>%Q7(lTW+3`|L?#5SVJViA`T?xgH|QJN~ZR%bfT@+1Xilc*#$0Juz$5P1&gsVG!g!RSOJIw^7%!)}qOBu^?M z<1Cd~&a>GP(q*O-O^HlPfi&{MBExJO7uM!E70M)uU?oMKV#_2^rG$CN7ZW!uE}#Uq z zSwM-^X{B{3fh(Ta%Sr;1(q=+5kd?WugfuLM?l>uwCL^>+Q%Ygr3H=b2_0!;?(C)VF z_SGx;n}z93r4ru$$0I z+KkRsBTQNtk|kg(tWn5pSz&gWH+d7QLMUWL702gd%CWXGDoZL=l96*UX{2vLGC_?> zU{Y~00i+6AY>_rrrCK*8<*Gpd40=Kp7t-bw8`}W8goB$G1u7vGa6+ZZB|H~XoY_RD z*2W1nRq2X}t0q?@NM&VeODZy*ovWtMqA5fsVk2c?3v(`ysuC!!GNz(YFjSutz5-TR zjO;Ga3Nnt1OZYghveKkUTr?t$vpL~2U6eK#sWHk(bQMl`;9Y7dDvB%4`BD>NUL;5b z#3rwroKy+_jmr>D9Qds$*T`3RN`~`^F`+UysDN0LF3?QNIiFOa)7%zWu1yB}=X@&T zOd_MxxIyMyH7AZ9T;{y1XG-D+e8zj7>-An;k018b*~PnE*Qnihx7%T6C6AKT*nhY` zOGmsPk1f4ld^Icdo(y?`ADpxr^(_;h-`nW@wl&@Rd6Vhwbn^Ke>E^@ld=TyXZtQqj zbgPEf@7wu=n>f#O3h_}k*4}@pdDY$RyOvsTB=&g6${Z^@)0!TD1pE{255ujmf)(us za))*s+K-r-3FgzcsZFPGlD1=nGxW5tCy+QZe{pbbZ#F3hhI1+2v z)eXo3tKYGT&qq+l<}mWoUVA}Z)A9Ix#HdkSzo%xe^v^tHyfVRkTklp)PwMB>sXZQj z%UlbD=)pdXv60RuJ{lH8`d0M=0i?rduaQP=G;Z&xJB&3NGm{t4sWuuuvY_o+O`aPJ z!smk@nHREgJf+t)At20M*J|T9*iif6NQ{3QAvAs8fd=D=IcePexX;l+noU$49(@Gi4edq6|#_7B_Y@# zD&w4VBi>Kpp@vuU)h^NLHOY6 z^Kljip@p4u@NP+&NbUF3n%R#NbF|(OOYhK59M5Eq#yON z-+^WLH$OJ$@ynYK=spVn9R2k#&qP1G{2kfN`o|w`Hdida@wk2OYdWF*hl*2yO+DW& z9_|nK6Bv&?2JVIi@B1so!1=$q`}|S&-ECVmNbD$9>ha2{=H83jRLfXyg5PVfw;)hn zfWz$B;3Q{*ykY#Xqv4i_4=}W@o=|bVsa@CRKez>*n@W3{?#zF5Ua&@JXBQ{4^>55> z9T?7d{r`;*o?7x?2%^BZ`G?O7xCc9E!*es9p!w9nF=4tg>}>rMfzU+Udunf_U&k9q zEX+d-G;^=h(`oxVBd+~<{K#Nxrz{x#r{{3ZH~VK(UV2EP0qx3Lp4WsO&%=xB$d6AE zgK|9fp{<`(%Gc0_)r(he-YoR(q5XN`DD%Rq?T$?J0|?AjcjW~flt|+|sXa`6`|9uC zfAi0`U%&qRi??5W{*SM}{K5DaV%L($QM!SgdrURXUC;9VL|~ zXU-EVYlVW3##?Irsr@@4j*!sr@iz6i^O?^>VGks5zC1ZAW>i*;%1`z4#?m=}UedbX zET?0fONp^j0UlH^p2^=j-b{J7fcWM|e=YM(ERTMY9h34{W`Q^YuOkpT!pGn*=k|

    oGlj>5g=afohyFO#(d-lI zg5B^Z#qO};4JId%X~Ep_#-|lDKChthTtS-WjSm$xKkH@R#~*glkv4%J$29LWhn&uPa+wuhgN^}I%Ckr9Hs z8@xQ9{2v7yrLxu`N^w(uBiEV>y`^D+g3CeW_G@6t?awS_`m%5l$iW*1F{e z%ZqI=eFOyL!HJiERP_EBteVFT-JnCG!>t?sZpv}t&zZC~o9TBgHaPzH3HCgE;(P6H z1HPjSw6oEfH9Lqty0iSj@bS3bAd6;J+dm`ullKY5>0|J;P&GFul{s%^XJ9T z9ePdwLI*;0zyJ5w_4#8$e`uNSMv2iXZK|pirA {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"WebComponents:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = (chunkId, fullhref, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t121: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"39\":1,\"131\":1,\"168\":1,\"186\":1,\"198\":1,\"249\":1,\"268\":1,\"294\":1,\"350\":1,\"380\":1,\"412\":1,\"442\":1,\"460\":1,\"486\":1,\"576\":1,\"580\":1,\"616\":1,\"621\":1,\"737\":1,\"824\":1,\"850\":1,\"877\":1,\"915\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"28\":\"bb005543f41af5fb\",\"39\":\"dc45aaf5abca8027\",\"126\":\"a976f62852f30b51\",\"128\":\"5bed857c54ac4e8b\",\"131\":\"ee437eeefadd750d\",\"168\":\"fe63e6dec2d06468\",\"186\":\"be52164d57f4b7e4\",\"249\":\"7ec032cf0b3ede9a\",\"268\":\"0659406f2c053718\",\"296\":\"37eb8c05642d8ef9\",\"340\":\"c525bd899366c5f9\",\"357\":\"a6fa55aea0c38a63\",\"412\":\"5965503d81003593\",\"420\":\"8dae5ad08a4e52ad\",\"442\":\"f48919e396acaa18\",\"460\":\"bae9001422d7a484\",\"466\":\"4e1a3fb09520281a\",\"486\":\"78d96ffc5c65634b\",\"529\":\"115400ffea03835d\",\"566\":\"0e38ac5442cc38c2\",\"576\":\"f923ab1e9910a1be\",\"580\":\"f387819ad2e14f0a\",\"616\":\"89f80a32caf41aef\",\"625\":\"120987bdd5293ae3\",\"640\":\"cbc8d3a34deb8837\",\"662\":\"1bb5065279414751\",\"669\":\"05a3639d12541567\",\"680\":\"ec85c3ce31480628\",\"759\":\"f27ff66e7ad33076\",\"764\":\"c33a81cafe63d2b6\",\"770\":\"7bd6d39128dde910\",\"817\":\"3438cd0f1b0f98bc\",\"819\":\"fa7785b520e523a5\",\"824\":\"4343b78afc34c12f\",\"877\":\"fc49cc812ccc4937\",\"915\":\"8f500bccc86f901d\",\"919\":\"237aced0c044e4b6\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"prefix-\" + chunkId + \".\" + {\"39\":\"89cf817b9a35aeca\",\"131\":\"b184379d0dc5871b\",\"168\":\"1c4deaed00ca1f5e\",\"186\":\"0d47de180767fda9\",\"198\":\"86b6b2a70a576922\",\"249\":\"6ca19da539a8ed1a\",\"268\":\"c9e33e1350d18af9\",\"294\":\"986bf74bfa4ccbd4\",\"350\":\"dbca9271f6e2dfbf\",\"380\":\"67748940131a4a84\",\"412\":\"25f3c4ff23eb9893\",\"442\":\"6ae0ea584f8e75c5\",\"460\":\"7c0b70502d117f7d\",\"486\":\"990aca82e7ba3e1c\",\"576\":\"9b1852878840651d\",\"580\":\"22958d4327b0425a\",\"616\":\"5c78f604ddad1ec0\",\"621\":\"8c109e297bdd8ce7\",\"737\":\"cf869b6ea8bfad2f\",\"824\":\"271ae6cff6401ed5\",\"850\":\"e86d03c2cec75438\",\"877\":\"fa7c46f756cd5a82\",\"915\":\"882512b642b7fffa\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t121: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^([16]21|(35|38|85)0|198|294|737)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkWebComponents\"] = self[\"webpackChunkWebComponents\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["deferred","inProgress","dataWebpackPrefix","loadStylesheet","installedCssChunks","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","this","Function","window","obj","prop","prototype","hasOwnProperty","l","url","done","push","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","setTimeout","bind","type","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","importScripts","location","currentScript","tagName","toUpperCase","test","Error","replace","p","resolve","reject","href","fullhref","existingLinkTags","dataHref","tag","rel","existingStyleTags","findStylesheet","linkTag","errorType","realHref","err","code","request","createStylesheet","miniCss","then","installedChunks","installedChunkData","promise","error","realSrc","message","name","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"prefix-runtime.3dca4b99808f4053.bundle.js","mappings":"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","sources":["webpack://WebComponents/webpack/runtime/chunk loaded","webpack://WebComponents/webpack/runtime/load script","webpack://WebComponents/webpack/runtime/css loading","webpack://WebComponents/webpack/bootstrap","webpack://WebComponents/webpack/runtime/compat get default export","webpack://WebComponents/webpack/runtime/define property getters","webpack://WebComponents/webpack/runtime/ensure chunk","webpack://WebComponents/webpack/runtime/get javascript chunk filename","webpack://WebComponents/webpack/runtime/get mini-css chunk filename","webpack://WebComponents/webpack/runtime/global","webpack://WebComponents/webpack/runtime/hasOwnProperty shorthand","webpack://WebComponents/webpack/runtime/make namespace object","webpack://WebComponents/webpack/runtime/node module decorator","webpack://WebComponents/webpack/runtime/publicPath","webpack://WebComponents/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"WebComponents:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = (chunkId, fullhref, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t121: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"39\":1,\"131\":1,\"168\":1,\"186\":1,\"198\":1,\"249\":1,\"268\":1,\"294\":1,\"350\":1,\"380\":1,\"412\":1,\"442\":1,\"460\":1,\"486\":1,\"576\":1,\"580\":1,\"616\":1,\"621\":1,\"737\":1,\"824\":1,\"850\":1,\"877\":1,\"915\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"28\":\"bb005543f41af5fb\",\"39\":\"dc45aaf5abca8027\",\"126\":\"a976f62852f30b51\",\"128\":\"5bed857c54ac4e8b\",\"131\":\"ee437eeefadd750d\",\"168\":\"fe63e6dec2d06468\",\"186\":\"be52164d57f4b7e4\",\"249\":\"7ec032cf0b3ede9a\",\"268\":\"0659406f2c053718\",\"296\":\"37eb8c05642d8ef9\",\"340\":\"c525bd899366c5f9\",\"357\":\"a6fa55aea0c38a63\",\"412\":\"5965503d81003593\",\"420\":\"8dae5ad08a4e52ad\",\"442\":\"f48919e396acaa18\",\"460\":\"bae9001422d7a484\",\"466\":\"4e1a3fb09520281a\",\"486\":\"78d96ffc5c65634b\",\"529\":\"115400ffea03835d\",\"566\":\"0e38ac5442cc38c2\",\"576\":\"f923ab1e9910a1be\",\"580\":\"f387819ad2e14f0a\",\"616\":\"89f80a32caf41aef\",\"625\":\"120987bdd5293ae3\",\"640\":\"cbc8d3a34deb8837\",\"662\":\"e77a89c65303c376\",\"669\":\"05a3639d12541567\",\"680\":\"ec85c3ce31480628\",\"759\":\"f27ff66e7ad33076\",\"764\":\"c33a81cafe63d2b6\",\"770\":\"7bd6d39128dde910\",\"817\":\"3438cd0f1b0f98bc\",\"819\":\"fa7785b520e523a5\",\"824\":\"4343b78afc34c12f\",\"877\":\"fc49cc812ccc4937\",\"915\":\"8f500bccc86f901d\",\"919\":\"237aced0c044e4b6\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"prefix-\" + chunkId + \".\" + {\"39\":\"89cf817b9a35aeca\",\"131\":\"b184379d0dc5871b\",\"168\":\"1c4deaed00ca1f5e\",\"186\":\"0d47de180767fda9\",\"198\":\"86b6b2a70a576922\",\"249\":\"6ca19da539a8ed1a\",\"268\":\"c9e33e1350d18af9\",\"294\":\"986bf74bfa4ccbd4\",\"350\":\"dbca9271f6e2dfbf\",\"380\":\"67748940131a4a84\",\"412\":\"25f3c4ff23eb9893\",\"442\":\"6ae0ea584f8e75c5\",\"460\":\"7c0b70502d117f7d\",\"486\":\"990aca82e7ba3e1c\",\"576\":\"9b1852878840651d\",\"580\":\"22958d4327b0425a\",\"616\":\"5c78f604ddad1ec0\",\"621\":\"8c109e297bdd8ce7\",\"737\":\"cf869b6ea8bfad2f\",\"824\":\"271ae6cff6401ed5\",\"850\":\"e86d03c2cec75438\",\"877\":\"fa7c46f756cd5a82\",\"915\":\"882512b642b7fffa\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t121: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^([16]21|(35|38|85)0|198|294|737)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkWebComponents\"] = self[\"webpackChunkWebComponents\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["deferred","inProgress","dataWebpackPrefix","loadStylesheet","installedCssChunks","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","this","Function","window","obj","prop","prototype","hasOwnProperty","l","url","done","push","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","setTimeout","bind","type","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","importScripts","location","currentScript","tagName","toUpperCase","test","Error","replace","p","resolve","reject","href","fullhref","existingLinkTags","dataHref","tag","rel","existingStyleTags","findStylesheet","linkTag","errorType","realHref","err","code","request","createStylesheet","miniCss","then","installedChunks","installedChunkData","promise","error","realSrc","message","name","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file diff --git a/course/_static/prefix-runtime.3dca4b99808f4053.bundle.js.map.gz b/course/_static/prefix-runtime.3dca4b99808f4053.bundle.js.map.gz new file mode 100755 index 0000000000000000000000000000000000000000..9ff8dc048654011221a1073dd1f422cb3722d247 GIT binary patch literal 8477 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 Lvs+J2)lm=a{ literal 0 HcmV?d00001 diff --git a/course/_static/prefix-runtime.991c135ccf182bf5.bundle.js.gz b/course/_static/prefix-runtime.991c135ccf182bf5.bundle.js.gz deleted file mode 100755 index 0cafec74d5bb7f0dee03200bdd25050181c88473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3116 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 G7XSdPnKwlM diff --git a/course/_static/prefix-runtime.991c135ccf182bf5.bundle.js.map.gz b/course/_static/prefix-runtime.991c135ccf182bf5.bundle.js.map.gz deleted file mode 100755 index 92138fefccae76352a08c2b25f41a5f92261e6f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8479 zcmV+)A>iI0iwFP!000026YYG9QrpP3=&xwFr#AK-$4Ii}2b}CFOO}m82qA_{??%;ewCdUWey>V>z|cUhgZsK>w}X$7K#{C%xWD4@Y?}bPwag?6Y_I?A~Ws6EHZ!=h0i7`{o$o zo#Nw%Lwr1Aw1&O&PXP8^Z^T%=$0_HhwWD6|=nXcV^l3D$aoQ`iyn&I!hI>R!E`x+k zejLa#Cp{;GHHN)64EY>?jiC3?vX^#%Zx^`J@R<8AsGqRn#pvfb{e&$Z^_;GQ+a1yZ zhcNKCN829~@vzT{h#-tCZD>dsj~;Cz(UXl7JniG4BgE|+&KeMyqqn8ykcctQdax1A zr6VZ|6ny_|fe$qDn83TWV;D|zKfS{_3GupjW7ERk39->365rcu^DtoO$sTw<`(_u& z;`-Qj^arhSitxK~NuKhScQop`F)X6c{7756AgcLYySfbSEA7&9 z*~oY`0n)OUb-9vg?nUi0v#@teE3=WfK#_3`7jS;pSMU=j#~CfdH#?O`t?2g=ilK9B zlchW5eJt$_%8@8}g>fgjfjEzd0{3otL3d0n7KA!+zip$21HX@)cW*3-LyK{Ei&pp# z;^R3pOPWR4?;Onh+%7%Si2r^5fAe`^BV)|ZW>0>l@9Is#)RP%ei zG1{sLMM&s1dncbzUq7(ZB%q%@a*o)H%i92q1%^w(mQBl>yFMi)%a5uu4j zt4&Q89rDVj-G1Ti$Rz|YQtCD2rjR^t7X3JXpvk*1C~o+W;Eup)jKGo5z^^Jo;;8bg zO@unfSf%?cLTPeP)o{uokaN$5S2C5H>ZwJRc|yz`a*ylOJR}U@bN&(A$32ZgIHF@AH07`HfwL@5uK920%chP0y*N{A0~1O}db#5wxZTblx( zlQV9C`QunFn_#dEGWk0VxX2JbyDtuKXZ_Lufst7w#~dw0pRqpqOv(^qTTtSiazjHE zbB@U0%Gp zatxcv_Ap>W3Vi+jk#nu50rKShTlRK_q#mJcLE8{q;UR_eBYi;G>fWGe$lYnbc4Jd+ zfHC4)=UqR8mJ&Ln8C$fyerX(YE9RK+hBbOZ=6_6hpUuhY-noeCZ9j5UBkH({009lh z>Qj*Xc~Tky@^g$S#)<_QO-M-C+!nILk`1)j{tj}h=l-6X&i-?oh)E9U6q{x;R4q!r zeNxY35~O$d)1wW2=9SS_Vo!qeT;QC8z>x?mn-$_1H38Q=;m4;wm{#XK!QdF=lvDFF z8IFv4{C=YRrF^FhyYNo325M^z?}ySaaVqt(1~`3ML6$wEhCACNOBLkam$DA$#+76{ z!n7l=C7d*d#jxq@9VfsG8h&AwR~u43hYQT?Iqli$<@T>(=R|kdM0VF47N~7|gTpch ztm?*K&0|gQ(HVhu412Q3axBL-NL4=E^x3rgXxcf@AGI?F=G>C$6DW^=v{e3gjG+rj zxOYgFkupnfAR{0k$`BWi2WyUcVbA*I{eT{%gzf3`P5nAxhIH3AbxV(<7WTVukY=NP zVSg@9+oSz`RQp4Hnb=QG315n8Gkot6%JB%Fd*Z$1OSUCUINJ`_Igl(U4a{Y>%PbmE zKd%CuFZ)I3eA;tk=Z3WD^pGP*Fp>dD#%b4Pe}936f(|Wmde5GmGr-dnHE&|S!EFu6 zS@nAl&bEQ8I?r)$V6qAmQH#_yoLdp>^=7kf-57s<`t1+Y>mFy%Cix(*712p$0d&YHYH| z&M7W9qSV7}AC^Wk-Ke&Ns_Y(ulJ-x&6}jOo?YAu!;5MP- zGjH`PRp<-AaNM-uUX39eg>@{4vJN&(nM|C^9DnPVeC*?}ShRAfXtnIGWC0Q9eM19u zV^8dKSj2>PxRkhK7^RZ-au-ZPFe;lMVc=xab%Io+tBAnCFa19FL8n z{T-A0IDSviPq{>KnDcAs$_h4>yMYrAWL_`sSqw=gyQoZ5;Jp~Ax(QeE$!Q!hBrkFI>rr9 zgnecnlFyn^P5p*Yd9;&5MkPI@P?uQB_`Jo2&tD17AL*zhLkki*FGhujB%oh7@o}kI z!1Ev>#Y**XLQEbeY}^QX<51y5&YxD9VNt|IL)afK2+JlXL8dJwPj2mP;q;}?{v%;} z$XfXk*E44JHpxd#E^q-r#BSL>VC>-<_PWt<=?o7=v&?4cHh}@RPV11BiDV22t@H6A zznHc>YnctDdB3OgwbN;zXYDz8u8W8@`d{V1E)|eY9^B^x%R`Qy*z`f`aHqDDELO2E zlAZm_od+>qdj8%1-rj{6JB#^p5s4^G_GJ5>JQ>~dC#&dAn=QOR1OVZs({O^8`0;d^ z{=_UlNoc8Qbn}8))m@ySDvonfp+B0#ZSVSPowE8r1yUx%4{+AW!L*?k@U&LOzh<{@K zay6b!{r6rv`H4xl$s$^6xgw!-UuVkbETR;qp-$d=F-oO~V-aYtwae>+tLV!Y3GPcQ zzOJUR`0}NG0-cpuBp|&thC2$9nifVi5X$Kyo~BP#?e#ykKd+*zbQ)IFkSe!arD_zw z$sYguOVbayJ6yyS#AOQo3ZFX2$4xppfX07ny7rHMWIdNt?UiO+Uz*p@qrkzqSFfst zG1moHa)w;3Jmzxqe$?Ptq^mfhm+$xk(To=9U^N2?o)Otb5vV7kfc>x)E!&HZ*#GB- zE&cjyMj9Nu4TsVe6h=59EG(bKE0NQY7r*7jZ((r-I$QjS80ZS zvII>KmD^XZYMN0!P$Rx;VwQ;Fj3RMD4>}L>J`m1qv;SGzVRfCYnPg=v@q_#YkivX! zwtU8GiSCrqRo%#(81afK`4*4|vGxnleHF2-2Z*e0Ff=|WtV=&wCglj|{eA$(fn*Mi z-3_!SFz?Ur&_x>VrQQWo{yp77g3ha*k_p+r+JV7)dt@%o*xHAy$WNz>NJ|>a;ME zYWLIZG4*aXn~WKnj8#0VX#p%z(}2yH=_uKX9Op|IehsA5)|%?eRWhj{nCgKh^-;@| zkrAnBkq|*IO+9~dAR)t&>qIT+9M3~S1q**Q2P)LTO}R6HkBR;C(YtvEcE579!y~VD zsvE48)Nl!Gqk_xjV6YsOt1_XP;JSc$JRPr6S}*otF%2<~XQ+tJMj%IDNt(-{&zbzI zMw<7hVil}^pp9eU-AU>dMGElvg~w%h=L9VqnG9S;Hy?neLXxhs%L8_aT!k5Rf8xc7 zz?r+NGsqX^+c1@5K+V`BU6EfPubiKhX%sCYUtI0fv@P=wO4_^`Mw!mF ztwdhmDR59D?&W@CO{UTDphUAIpnxnQ);m#>+G?u9d%&Vq`RK?Pl|j?SMS>!5rth-9S_M(kC< zk}`p+)l6uJa8+q5G<=a`%6>eTIN-Y?!a5)7<7pIBkYu&olGH%0(x;`^*LEe4-5S`! z81!^s>D%{e4J8@=<7J<*IZFfFR5{U12wS6rglZO@*ZwPO82n;F$lw(O^ z*Wc^NP4qj8vj=PV;l{;-<|3xRwzr&OXwKQ0OggT1z%WVyfhTwkJ;?Wh`qfobq0S5^ z?5*a$^$HT(xbCB^K#l^)FV5llyQ42}PkQ|?gWl+^+n4NBgC+Yjx|KT73&>s|DP=({$?t@DQ>1o;wr`t)D$EWFv7l@trRAs(>{L+J zSXNTCOj$d{<1_&ub@P_tyd*3tXzQksXdU9#Mgus*z;@1WzAA`HVfhC{d~jD`1Z_5uM#(2-8k;;yE|_vM+8PKiz|x6IWvh?j{YYKf6!T#L%1M$zwoW;pp8a6z z63kS=5Mt_A(yn#Y%J#i(@YfybOS~u(j{GsDXk3HBtSm_vv5=+G-1;U=-)WSj9ww)- zXNTG`Cq!6=Y3yq{b7FJy7Aj(u9Q~4ckd!TlUjo0==w9vY8?~z)qhYA0R!2Q`TI#8* z+RUb!VP@mZZc{!rEL}Zy)Kk+i)l)NjYGu9I8df`d%I3BV)z&fC2BGsdVjo4I-8D#4JJBIzMyB=_Fn}Xv%+ouU3mDgG4`CXp=dXPvQCF zBrB}?5Yq~l`dpg1?+f*P`J(C}1O}%{Vb7`@S5a2)*q{*=hBi_q1OVbpgntJtQ%FoH z36rQu)xekFnEPLE#qCl7zm}2(I#-;zxrQMvOmSqLPZpBg3n89lax{<3sKmA6MS-@2 z%x4P!M_@^S%Yh_me^kz zB;z)dAfRMZi5r2NB8Z$GD!RiuC76!lkUz6PV-x5_B_CVkDj(4Cm(4>n6mVQ27nKEk z-lsYvD~(2ai3p@P;UXj&e$(=x)f@X>M>pHlXP7PO^t$a<*fKko88-B>Wyns3YK=wEvD&`X z^!%piFjS5`uXcoJHrhgf;Ru4Zr3c*E;+dgnHAE{Az8UDPCN^dfDj+K?(`YpVs~tAS zZPBDo4pkvw6u#at{ZJn_L?F5zcS^8&%j!1uR%rUV)o2?G*6cD^z-HWmj#kqQIwI^c z4VpT2`j%;pgHE^GXtjJxby{sELM!wv%M+gNH#%OcL7f~40};9{%hDS`$I$hL)s>wl zgY5*Ku)IL;cum-p$3)=B8HmvAbd9cPbX%V9c@kR=rhy2a=<2%BG|iyxH9Jk&$y;d( z!)t_Ny=$4e*)f<1O-a6XC+N1q(6{`S)oL`EE0)RRGYqS#>tP6cX>=MEBVznynU-&lry_V7S@tHjQRm zie{_D`_wJ3(Q0%9!?c=))sizMw!-gNe!~|HquJ40CKJAG@yyU{hheKF+FsCT=(u_8 zY&997M#JkEun~~oz#PlYHiLy-w1P$#v?Bn?G<53h7%W4LCQvlcLu0Im-OkvTopMdD z-R@Xp;3h~(!?U>4ZFq2FlwhRNjP%m`-s&93iv4B!|%NeXeY1cO3L*T>M) zX@y651Q>j7#$Fnb{KeU zJ2=UPHCyA>*!0@E2a41+&5|)|0km%5S&gpO5rI)QW_K@7l>cg?mDwuBjkW0shP6#iDb4R)ug!@j+yrwofUW~LQ3{AL)M z4KeO^lrfX`s^tk?cvhzwc0}9qt&+WJ`}(-8Te=w-MmuZ=C6mR{qJrf82n*pgo| zEM1_yWrF?afa$iRlq$nwnq8|CG#h4ntT#=oY*;M6-3eQIGYGuE0KXs&3-hz%8+uom zU9>G7U$ACyxdCV!c3RzWOL!fiV4!qLDjZPG6D=RC08mK;QX3_0MW+?$4d3*I-v)=; zDQlzG_M5G+ZMFQsg8i1Yv13{W*o>w*1`88<&lOG`pKJ}_u&7v3Dp;wib9}9Wb$G~h z_?8waDxFkt;OHMdsYzPhM0vD^7FPd>8n$M}0GKxZ;1GeOc zDMVaIAxd{9I1u3fnXPN0q&`%i?cL_P#I4P6ovjK?teZL(|~(#w!*_s zMtoPr`xNc}4Zz)e!@C7gm`pI3t&$eagH36q%oiayoh0hg8Z-VE+2!Lg3HXDmw$_jj zFJ<7xqfS2kJg1}kZMP3@>eD&yj*nk~HQA&s_2ZlRYyqN*KI>NsmDSB0c^I&Dni?RH z`6XYdaD-dX!Te}-72~OvyvkEN?=AJzQ$BbAexEOaaSr%6%&JkM&YTaU_aAqw#j||g z;ucs*?B}e=#{Zix-QY!;(j}X<`!&=2evKS}SN^iv;==^f%nIHmd}YuHPl1+TY<}7M z*Cb7smE^bT{$4#5Nm|KwP%U#fyTcs@aEm=p=vKby3#M;tJ5}XUM3tojK<<=@Fi&YJ)fp{?o^X^;@8T=R2voBvj zZR07H0kjY@Q^X1jM1jEQYn2FYSUg0KoZn3S`ntGQH7@QJkBxgT+W%BK1W7*@i09mZ zXUNAPEQ5r6?_Xo^G5dQpQnhN{{(tKK_dlMuUS0jRrG4-6U-0AlSMJ>7wKty+74VRu zYP6t;@%+O`7WKBA+aU2(MMK4{Fgmm60Gi7lNEe<{qk9Kg2ZWy7zK21mNUgXGaulzd1X3_kO*s1JasbI?ruK8JE77dRxrq zqOyi|;o{+M>s!jhpZ%QXxy{+IC>_J#y*j{O*XF{D5|9pW77H(U%E4pkA1U*LcT5!V zvnkSgg4W8d^OSV!(xrQ`+fI7a;7jxRN0(&r!r$J%Dwjs<+BE*EG_1cGoxeI(RsRdJ zhQA=h{|n;O>VHUEsOVS1fVKs8W3|k-h9@Az%i_Zlcw-H2{VY0Ljt`3YQj0bgAsP%o z!M_6`eOQ2?q8-7zJ79dn)r|Yn7{5`#)HGhlP2Ee$4RCo$bs`Vjaw9(0cz#o=AUi*) zchz+e#S_IBF!>sJ-55#0$#s3E42E6|#ZfTWa<4vVAxsomTQv5?0*5@Kg zyc@)F_ifS1XuG94#cuI}7Ix+PgU)>#th9JBu~ves5eacglD6&Rx8B}bA6UN0 zb+&QO8`Rpkt`x3N7XN%NHi$RJ>li#gRN&F`7WP#7z-NoGE)grc-%zr68|$Z~gZ~1MwQCF;znGCc zscLNJ)E6$?TG@6cpM9dRT`;QJ_CC6>mS3nlm~Q$is(5=&*~Qn{u>8{8&-*^K*V`1R zy6J{ZdB~-HU0M5B;cv}G@hhQ?IxauvtExK(bX%oBx*-+m=wkdVyu4Ch9@2WH4~MRH zu3tC`l5DEIJYOce)4$0c6fd>w6w_@0fH57Q@ptpL%;X`@J7G2aY?7+~__d_^v}8mBMk5CdER{_-UZ!dsORk?io-!{6Cm1bA7fhO82a;Im5%3=A>C=6rAP zB-0TDN@U>EecCQ(4oGAqk32s@Q1~}1XTwX%zm(y@Pj;!$jEIeI8P<}2apf4E%e7;q z8ZH#$PyFTuM}v$aS=7hv`G*`?D~X}3sPP`3)zok-cV#zxasS0nFo+)XjTY{OziYwu ze4JaJ2QepZYV8XY+M2j$juJe1Bc7g6{BViFCr5IVg9uT}FX9vVv#a>XF18SiM?M!7 z7g1$OayX166|_*{&OE$vVH=0#rERMD&Q>@%ng@hJI!TBOTrkcEd`=80m3>K}xT=dY ziltCOMp3;`TE#aAz2KKCsUoXQxHPLA=CJf6H3aVjvj)xNF)c99S5c z-Tg*DrHjkB2L^+~RSZr5_-hGn#{DU_P!yg?P6?D$4N?T6-I}9%)`Agwu3-uVx%?T4 zm`q@H*be6(!IzADCOn(mzoZXY!z@_AH8|>^f2Crc*@BV>AbFdG`N#7g7K?Oee`n|W Ne*p>;l2hbg006;+a0&nb diff --git a/course/_static/pretext/css/print-worksheet.css.map b/course/_static/pretext/css/print-worksheet.css.map index 16fd9b4..f30e0ea 100755 --- a/course/_static/pretext/css/print-worksheet.css.map +++ b/course/_static/pretext/css/print-worksheet.css.map @@ -1,6 +1,6 @@ { "version": 3, - "sources": ["c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/print-worksheet.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\fonts\\_fonts-google.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_asides-basic.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_asides-floating.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_codelike.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\helpers\\_cols.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_exercises.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_solutions.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_sidebyside.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\helpers\\_inline-heading-mixin.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_discussion-inline.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_knowls.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/_chunks-worksheet.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\_spacing.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_list-styles.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_description-lists.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_lists.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_fillin.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_headings.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_links.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_tables.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_front-matter.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_summary-links.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_footnotes.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_index.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_media.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_figures.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_poem.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_prism.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_math.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_permalinks.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_misc-content.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\_printing.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\_worksheet.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\_google-search.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\_pretext-search.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\helpers\\_buttons-default.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\interactives\\_runestone.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\interactives\\_webwork.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\interactives\\_sagecell.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\components\\interactives\\_calculators.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\colors\\_color-vars.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\print-worksheet/..\\..\\colors\\_color-helpers.scss"], + "sources": ["c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/print-worksheet.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\fonts\\_fonts-google.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_asides-basic.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_asides-floating.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_codelike.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\helpers\\_cols.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_exercises.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_solutions.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_sidebyside.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\helpers\\_inline-heading-mixin.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_discussion-inline.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\chunks\\_knowls.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/_chunks-worksheet.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\_spacing.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_list-styles.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_description-lists.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_lists.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_fillin.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_headings.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_links.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_tables.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_front-matter.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_summary-links.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_footnotes.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_index.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_media.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_figures.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_poem.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_prism.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_math.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_permalinks.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\elements\\_misc-content.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\_printing.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\_worksheet.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\_google-search.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\_pretext-search.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\helpers\\_buttons-default.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\interactives\\_runestone.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\interactives\\_webwork.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\interactives\\_sagecell.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\components\\interactives\\_calculators.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\colors\\_color-vars.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\print-worksheet/..\\..\\colors\\_color-helpers.scss"], "sourcesContent": ["$primary-color: #386F94;\n$primary-color-dark: #5192BD;\n$provide-dark-mode: yes;\n/*! Theme: print-worksheet */\n\n// Used for print versions of worksheets (including their previews) for all themes\n\n// File is only included in standalone printable worksheet pages (the print preview pages).\n// Most rules apply to both screen and print; rules at the bottom of the file split into these two cases.\n\n// Also see:\n// components/_printing.scss : base rules for printing a standard PreTeXt page - removes UI\n// components/_worksheet.scss : rules that apply to worksheets in context and in print/preview.\n\n// Current maintainer: Oscar Levin\n\n// ---------------------------------------------\n// Grouping containers - based off of those in default-modern\n@use 'chunks-worksheet' with ($border-radius: 0);\n\n// Bring in the standard PreTeXt styles for components\n@use 'components/pretext';\n\n// Use underline style headings\n//@use 'components/elements/extras/heading-underlines';\n\n// Make sure fonts are available\n@use 'fonts/fonts-google';\n\n// For the print button\n@use 'components/helpers/buttons-default' as buttons;\n\n\n// Make sure we are including the root colors using simple black-and-white palette\n@use \"colors/color-helpers\" as colorHelpers;\n@use 'colors/palette-single' as palette with (\n $primary-color: black,\n);\n\n// render the actual colors\n@include colorHelpers.set-root-colors(palette.$colors);\n\n// ---------------------------------------------\n// concrete rules / includes that generate CSS\n\n// Set variables for default width and margins\n:root {\n --ws-width: 8.5in; // Default width for worksheets\n --ws-height: 11in; // Default height for worksheets\n --ws-top-margin: 40px; // Default top margin for worksheets\n --ws-right-margin: 55px; // Default right margin for worksheets\n --ws-bottom-margin: 45px; // Default bottom margin for worksheets\n --ws-left-margin: 45px; // Default left margin for worksheets\n\n --ws-content-width: calc(var(--ws-width) - var(--ws-right-margin) - var(--ws-left-margin));\n --ws-content-height: calc(var(--ws-height) - var(--ws-top-margin) - var(--ws-bottom-margin));\n}\n\n\n\n\n// Remove surrounding UI elements\n .pretext .ptx-masthead,\n .pretext .ptx-navbar,\n body.pretext > a.assistive,\n .pretext .ptx-page > .ptx-sidebar,\n .pretext .ptx-page-footer,\n .pretext .ptx-main > div.ptx-content-footer {\n display:none;\n }\n\n // Remove the print preview link\n.heading .print-links {\n display: none;\n}\n\n .autopermalink {\n display: none;\n}\n\n// Some elements don't make sense to print:\n// image descriptions\n// webwork \"activate\" buttons\n// buttons in general (to remove Runestone \"Check Me\" button)\n// We remove these here.\ndetails.image-description,\n.ptx-content .webwork-button,\n.ptx-runestone-container button.btn {\n display: none;\n}\n\n\n// Set font appropriate for printing\nsection.worksheet, section.handout {\n font-size: 11pt;\n font-family: var(--font-print);\n}\n\n// .onepage is the common class that wraps all content in a single worksheet page (often modified by the javascript)\n .onepage > .heading {\n margin-top: 0;\n font-size: 1.3em;\n}\n\n.onepage .instructions {\n display: none;\n}\n\n\n// Try to make an open solution knowl look less strange. Eventually the print version of worksheets should create HTML that isn't a details element.\nsummary::marker {\n content: \"\";\n}\n\nsummary {\n font-weight: bolder;\n display: inline;\n}\n\n.knowl__content {\n display: inline;\n margin: unset;\n border: none;\n padding: 3px 0;\n background-color: unset;\n}\n\n.knowl__link {\n all: unset\n}\n\n.code-inline {\n border: unset;\n background: unset;\n}\n\n.onepage article {\n padding-left: 0;\n border: none;\n}\n\n.onepage article::after {\n all: unset;\n}\n\n.onepage > .para:first-child,\n.onepage > article:first-child {\n margin-top: 0;\n}\n\n\n// Some headings have larger top-margins than their parent section, so we fix that here.\n.onepage > section > .heading {\n margin-top: 0;\n}\n\n// tasks might be \"free-floating\" articles, in which case they should get the same indenting as tasks inside exercises.\n section article.task {\n margin-left: 20px;\n}\n\nsection.worksheet > .heading, section.handout > .heading {\n display: inline;\n font-size: 1.1em;\n}\n\nsection.worksheet > .heading + .para, section.handout > .heading + .para {\n display: inline;\n}\n\n.introduction, .conclusion {\n > .heading {\n font-size: 1.1em;\n font-weight: bold;\n margin-bottom: 0;\n border-bottom: none;\n + .para {\n margin-top: 0.5em;\n }\n }\n}\n\nform.papersize-select {\n padding-bottom: 8px;\n}\n\n\n\n\n// Screen specific styles (mostly for showing the border around a worksheet with it's \"margins\" and for the print controls)\n@media screen {\n .ptx-main {\n max-width: var(--ws-width);\n margin: 50px auto;\n }\n\n .worksheet, .handout {\n max-width: var(--ws-width);\n margin: 0 auto;\n }\n\n .onepage {\n width: 100%;\n height: var(--ws-height);\n padding: var(--ws-top-margin) var(--ws-right-margin) var(--ws-bottom-margin) var(--ws-left-margin);\n box-shadow: 5px 10px 40px -10px;\n }\n\n // Set space between pages\n .onepage + .onepage {\n margin-top: 2.5em;\n }\n\n\n .workspace-container {\n display: flex;\n overflow: visible;\n }\n\n .workspace {\n width: 100%;\n }\n\n .highlight-workspace .onepage .workspace {\n border: 1px dashed grey;\n background: hsl(224, 100%, 95%);\n }\n\n // Normally, the .workspace.original is hidden in the print preview, but if the highlight-workspace checkbox is checked, it will be shown.\n .onepage .original-workspace {\n display: none;\n }\n\n .highlight-workspace .onepage .original-workspace {\n display:block;\n width: 10px;\n background: hsl(152, 29%, 65%);\n }\n\n .highlight-workspace .onepage .warning {\n background: hsl(36, 65%, 67%);\n }\n\n .print-button {\n @include buttons.ptx-button;\n }\n\n .papersize-select {\n z-index: 1;\n .name::after {\n content: \": \";\n }\n }\n\n .print-controls {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 1em;\n }\n}\n\n\n\n// Print specific styles\n@media print {\n body {\n margin: 0;\n padding: 0;\n width: var(--ws-content-width);\n }\n\n .print-preview-header {\n display: none;\n }\n\n section.worksheet, section.handout {\n border: none;\n width: 100%;\n\n .onepage {\n margin-top: 0;\n width: 100%;\n height: var(--ws-content-height);\n overflow: hidden;\n page-break-after: always;\n page-break-inside: avoid;\n }\n // Never show the workspace preview in print\n div.workspace,\n div.workspace.squashed.tight {\n border: none;\n padding: 0;\n background: none !important;\n }\n }\n\n a {\n color: black;\n }\n\n @page {\n // Note: when we allow custom margins, the javascript will need to change these defaults.\n // Default margins appear to be necessary for Firefox and Safari (Chrome already works with the variable values).\n margin: var(--ws-top-margin, 40px) var(--ws-right-margin, 55px) var(--ws-bottom-margin, 45px) var(--ws-left-margin, 45px);\n }\n}\n", "@use \"sass:map\";\n@use \"sass:string\";\n@use \"sass:list\";\n\n// Fonts to use\n$body: 'Open Sans, Helvetica Neue, Helvetica, Arial, sans-serif' !default;\n$heading: 'PT Serif, Times New Roman, Times, serif' !default;\n$monospace: 'Inconsolata, Consolas, Monaco, monospace;' !default;\n$print: 'PT Serif, Times New Roman, Times, serif' !default;\n\n@function is-variable-font($font-name) {\n $static-fonts: ('PT Serif'); // list of known static fonts used by themes\n @if list.index($font-name, $static-fonts) {\n @return false;\n }\n @return true;\n}\n\n@function generate-import($font-name) {\n @if is-variable-font($font-name) {\n @return 'https://fonts.googleapis.com/css2?family=' + $font-name + ':ital,wght@0,400..700;1,400..700&display=swap';\n }\n @else {\n @return 'https://fonts.googleapis.com/css2?family=' + $font-name + ':ital,wght@0,400;0,700;1,400;1,700&display=swap';\n }\n}\n\n// For now, only try to fetch the first name in the list and assume\n// the rest are system defined fallbacks.\n// lists are 1-indexed\n$body-font: list.nth(string.split($body, ','), 1);\n// @debug \"----------------\" $body-font;\n@import url( generate-import($body-font) );\n\n$heading-font: list.nth(string.split($heading, ','), 1);\n// generate-import($heading-font);\n@import url( generate-import($heading-font) );\n\n$monospace-font: list.nth(string.split($monospace, ','), 1);\n// generate-import($monospace-font);\n@import url( generate-import($monospace-font) );\n\n:root {\n --font-body: #{$body};\n}\n:root {\n --font-headings: #{$heading};\n}\n:root {\n --font-monospace: #{$monospace};\n}\n:root {\n --font-print: #{$print};\n}\n\n// 9/5/24 ... TODO controlled list of fonts ... wait and explore later\n// // Available fonts\n// $serif-options: ('Alegreya', 'Merriweather', 'Noto Serif', 'PT Serif', 'Source Serif 4');\n// $sans-options: ('Alegreya Sans', 'Barlow', 'Lato', 'Open Sans', 'Roboto', 'Source Sans 3');\n// $code-options: ('Inconsolata');\n\n// // Backup lists\n// $sans-backups: ', Helvetica Neue, Helvetica, Arial, sans-serif';\n// $serif-backups: ', Times New Roman, Times, serif';\n\n// // ---------------------------------------------------------\n\n\n// @function add-fonts($list, $backups, $fonts: ()) {\n// @each $font in $list {\n// $fonts: map.set($fonts, $font, (\n// url: '\"https://fonts.googleapis.com/css2?family=#{$font}:wdth,wght@75..100,300..800&display=swap\"',\n// fontlist: $font + $backups,\n// ));\n// }\n// @return $fonts;\n// }\n\n// $fonts: add-fonts($sans-options, $sans-backups);\n// $fonts: add-fonts($serif-options, $sans-backups, $fonts);\n\n// $bodyfont: map.get($fonts, $body);\n// @if not $bodyfont {\n// @error \"Unknown body font: #{$body}\";\n// } @else {\n// @import url(#{map.get($bodyfont, \"url\")});\n// :root {\n// --font-body: #{map.get($bodyfont, \"fontlist\")};\n// }\n// }\n\n// $headingfont: map.get($fonts, $heading);\n// @if not $headingfont {\n// @error \"Unknown heading font: #{$heading}\";\n// } @else {\n// @import url(#{map.get($headingfont, \"url\")});\n// :root {\n// --font-headings: #{map.get($headingfont, \"fontlist\")};\n// }\n// }\n", "$border-width: 2px !default;\n$side-margins: 30px !default;\n\n.aside-like {\n & > .knowl__link {\n color: var(--aside-like-link-color);\n border-bottom-color: var(--aside-like-link-color);\n }\n & > .knowl__content{\n margin-left: $side-margins;\n margin-right: $side-margins;\n border: $border-width solid var(--aside-like-border-color);\n background-color: var(--aside-like-body-background);\n }\n}", "$float-width: 200px !default;\n$float-offset: -248px !default;\n$min-float-width: 1280px !default;\n\n@use 'asides-basic';\n\n@media screen and (min-width: $min-float-width) {\n details.aside-like {\n position: relative;\n margin-left: $float-offset;\n width: $float-width;\n right: $float-offset;\n float: right;\n clear: right;\n }\n\n /* disable in any multicolumn list/exercisegroup */\n .multicolumn details.aside-like {\n position: relative;\n margin-left: inherit;\n width: auto;\n right: 0;\n float: none;\n clear: none;\n }\n\n details.aside-like > .knowl__content {\n margin-left:0;\n margin-right:0;\n background-color: var(--aside-like-body-background);\n z-index: 100;\n }\n}", "@mixin code-text {\n font-family: var(--font-monospace);\n background: var(--code-background);\n font-size: .93rem;\n line-height: 1.2;\n}\n\n@mixin code-inline-spacing {\n line-height: normal; //prevent extra \"padding\" based on line-height\n padding: 0.0625em .15em;\n}\n\n// wide programs need to be scrollable\n.code-box {\n overflow-x: auto;\n}\n\n.code-display {\n overflow-x: auto; //scroll if overflowing\n font-family: var(--font-monospace);\n}\n\n.console,\n.program {\n border: 1px solid var(--page-border-color);\n padding: 5px 15px;\n overflow-x: auto;\n margin: 0;\n @include code-text();\n}\n\n.code-inline {\n font-family: var(--font-monospace);\n white-space: pre;\n color: var(--body-text-color);\n background: var(--code-inline-background);\n border: 1px solid color-mix(in oklab, var(--code-inline-background) 50%, #888);\n border-radius: 0.2em;\n display: inline-block;\n overflow-x: auto;\n max-width: 100%;\n vertical-align: middle;\n @include code-inline-spacing();\n}\n\n\n.prompt.unselectable {\n user-select: none;\n}\n\n// code blocks are preformatted text that is not a program\n.code-block {\n border-left: 1px solid #aaa;\n padding: 0 15px 5px;\n overflow-x: auto;\n background: var(--code-background);\n margin-top: 0;\n margin-bottom: 0;\n @include code-text();\n}\n\n.code-block::before {\n content:' ';\n font-size: 50%;\n border-top: 1px solid #aaa;\n display: block;\n margin-right: auto;\n margin-left: -15px;\n width: 3.0em;\n}\n\n// special handling for code-display as it appears inside .paras\n// and may need space around it\n.code-display {\n margin: 0.5em 0;\n}\n// if inside clipboardable, move margin to that container and turn some into padding\n// to help make sure clipboard icon is contained inside the code-display in dark mode\n.clipboardable:has(.code-display) {\n margin: 0.25em 0;\n\n .code-display {\n margin: 0;\n padding: 0.25em 0;\n }\n}\n\n\n.clipboardable {\n position: relative; // To anchor the code-copy button\n display: flow-root;\n\n .code-copy {\n position: absolute;\n right: 0;\n top: 0;\n opacity: 0.25;\n border-width: 0;\n background: none;\n cursor: pointer;\n z-index: 1;\n white-space-collapse: collapse;\n padding: 1px;\n scale: 0.85;\n\n &:hover {\n opacity: 0.7;\n }\n\n .checkmark {\n display: none;\n }\n\n &.copied {\n opacity: 1;\n color: mediumseagreen;\n cursor: not-allowed;\n pointer-events: none;\n\n .copyicon {\n display: none;\n }\n\n .checkmark {\n display: inline;\n }\n }\n }\n}\n\n@media print {\n .code-copy {\n display: none;\n }\n}\n", "\n// columns are arranged in row-major order to match print output in LaTeX\n:is(.cols2, .cols3, .cols4, .cols5, .cols6) {\n display: flex;\n flex-wrap: wrap;\n justify-content: start;\n}\n\n// see lists and exercises for sample use\n@mixin allow-cols($el, $col-gap: 2em) {\n @for $i from 2 through 6 {\n .cols#{$i} > #{$el} {\n // columns are a suggestion enforced by a minimum size\n // content that needs to be wider can reduce number of columns\n // in its row\n min-width: calc(100% / $i - #{$col-gap});\n width: min-content;\n margin-right: $col-gap;\n }\n }\n}\n\n", "@use '../helpers/cols';\n\n// generate multi column rules for exercises\n@include cols.allow-cols('.exercise-like');\n\n.exercise-like > .heading {\n // exercise heading/numbers regular size\n font-size: inherit;\n}\n\n.exercisegroup {\n\n .exercise-like {\n margin-top: 1em;\n }\n\n > .heading {\n font-size: 1.10em;\n line-height: 1.05em;\n margin-top: 0.75em;\n display: inline;\n\n & + .introduction {\n display: inline;\n\n & > .para:first-child {\n display: inline;\n }\n }\n }\n\n // push the actual exercises down from any possible heading/intro\n .exercisegroup-exercises {\n margin-top: 1em;\n \n //indent items with padding so cols works correctly on them\n padding-left: 40px;\n }\n\n .conclusion {\n margin-left: 40px; // match the padding of the exercisegroup-exercises\n \n .heading {\n // exercise heading/numbers regular size\n font-size: inherit;\n } \n }\n}\n\n// subtasks are indented\n.exercise-like > .exercise-like.task {\n margin-left: 20px;\n}\n\n\n\n// ---------------------------------------------------------\n// exercise-wrapper is used for WW problems\n// these rules need testing/refactoring\n\n.exercise-wrapper form button:hover {\n cursor: pointer;\n background-color: #e0e0ff;\n border: 1px solid #000;\n}\n.exercise-wrapper form button:active {\n background-color: #f0f0f0;\n}\n.exercise-wrapper form button + button {\n margin-left: 0.8em;\n}\n\n.exercise-wrapper,\n.exercise-wrapper form,\n.exercise-wrapper form > div:first-child {\n display: inline-block;\n vertical-align: top;\n width: 100%; /* for live ww to open at 100% wide */\n}\n\n.knowl .exercise-wrapper,\n.knowl .exercise-wrapper form,\n.knowl .exercise-wrapper form > div:first-child {\n width: 100%;\n}\n\n.exercise-wrapper > .para:first-child,\n.exercisegroup .exercise-wrapper > .para:first-child {\n margin-top: 0;\n display: inline;\n}\n\n/* next is related to having exercises start in-line with their exercise number,\n including when a static WW problem is made interactive */\n/* not sure this was the right way to do it */\n/* see https://opentext.uleth.ca/apex-calculus/sec_antider.html#exercise-722 */\n.heading + .exercise-wrapper {\n display: inline-block;\n max-width: 95%;\n width: 100%;\n}\n\n.cols2 .heading + .exercise-wrapper {\n width: auto;\n}\n", "// \n\n/* stacked headings in the solutions backmatter */\nsection.solutions > .heading + .heading {\n margin-top: 0.5em;\n}\n\nsection.solutions > h3.heading,\nsection.solutions section > h3.heading {\n font-size: 1.6em;\n}\n\nsection.solutions > h4.heading,\nsection.solutions section > h4.heading {\n font-size: 1.45em;\n}\n\nsection.solutions > h5.heading,\nsection.solutions section > h5.heading {\n font-size: 1.35em;\n}\n\nsection.solutions > h6.heading,\nsection.solutions section > h6.heading {\n font-size: 1.25em;\n}\n", "// Space all rows in a sbsgroup, no other styling\n.sbsgroup > *:not(:first-child)\n{\n margin-top: 1.5em;\n}\n\n\n// sidebysides get laid out into a grid with two rows. \"Plain panels\" without\n// a caption are in the first row. Panels with things like tables/figures with\n// captions we want to align are decomposed across two rows.\n// If there is no content (no captions) in a second row, it will collapse.\n\n// 1| plain panel | figure-like/table-like\n// 2| | figcaption\n.sbsrow {\n display: grid;\n grid-template-rows: auto auto;\n}\n\n.sbspanel {\n // most sbspanels are in the first row\n grid-row: 1; \n\n // tables and their captions get centered when in panels\n & > .table > figcaption {\n text-align: center;\n }\n .tabular {\n overflow-x: auto;\n margin-left: auto;\n margin-right: auto;\n }\n}\n\n\n// panel content alignment options\n.sbspanel--top {\n align-self: start;\n}\n\n.sbspanel--middle {\n align-self: center;\n}\n\n.sbspanel--bottom {\n align-self: end;\n}\n\n\n// sbspanels with figures or tables get decomposed into two rows\n// both the panel and the figure-like/table-like element should\n// be ignored by the grid layout so we can place the items inside\n// the *-like into the grid\n.sbspanel:has(.figure-like, .table-like),\n.sbspanel > :is(.figure-like, .table-like) {\n display: contents;\n}\n\n\n// first child of decomposed *-like goes to the first row\n.sbspanel > :is(.figure-like, .table-like) > *:first-child {\n grid-row: 1;\n align-items: start;\n align-self: start;\n}\n\n// and gets alignment info\n.sbspanel--top > :is(.figure-like, .table-like) > *:first-child {\n align-items: start;\n align-self: start;\n}\n\n.sbspanel--middle > :is(.figure-like, .table-like) > *:first-child {\n align-items: center;\n align-self: center;\n}\n\n.sbspanel--bottom > :is(.figure-like, .table-like) > *:first-child {\n align-items: end;\n align-self: end;\n}\n\n\n// second child of decomposed *-like goes to the second row\n.sbspanel > :is(.figure-like, .table-like) > *:nth-child(2) {\n margin-top: 0.5em;\n grid-row: 2;\n width: 100%;\n}\n\n\n// make sure content for a panel stays in the correct column\n// otherwise captions may shift left into columns that do not have\n// second row content\n@for $col from 2 through 10 {\n .sbspanel:nth-of-type(#{$col}) * {\n grid-column: #{$col};\n }\n}", "// Generate styles for an inline heading\n@mixin heading {\n & > .heading:first-child {\n display: inline;\n line-height: initial;\n border-bottom: 0; // disable underline that may come from underlined headings\n\n &:after {\n content: \"\\2009\";\n }\n\n // Following sibling also needs to be inline for heading to line up correctly\n // For now limit to logical paragraphs and introductions as they seem to cover\n // the plain text cases. Not clear we would want same treatment for other\n // kinds of content\n & + :is(.para, .para.logical, .introduction) {\n display: inline;\n // possible first child that is the actual text\n & > .para:first-child {\n display: inline;\n }\n // an introduction could have a para.logical with a para\n & > .para.logical:first-child > .para:first-child {\n display: inline;\n }\n }\n }\n}\n", "@use './helpers/inline-heading-mixin';\n\n.discussion-like {\n @include inline-heading-mixin.heading;\n & > .heading {\n ::after {\n content: \"\\2009\";\n }\n\n & + .para {\n display: inline;\n }\n\n .space,\n .codenumber,\n .period {\n display: none;\n }\n\n .type::after {\n content: \". \";\n }\n }\n}\n", "/*\n main knowls styles\n*/\n\n$border-radius: 0px !default;\n$border-width: 3px !default;\n$pad: 12px !default;\n\n.source-view__link,\n.knowl__link {\n cursor: pointer;\n margin-left: 0.1em;\n margin-right: 0.1em;\n color: var(--knowl-link-color);\n border-bottom: 1px dotted var(--knowl-link-color);\n}\n\n.source-view {\n margin: 0.5em 0;\n}\n\nsummary.source-view__link,\nsummary.knowl__link {\n display: list-item inline;\n}\n\n.source-view__link > *,\n.knowl__link > * {\n display: inline;\n}\n\n.source-view__link:is(:hover, :focus, [open]),\n.knowl__link:is(:hover, :focus, [open]) {\n background-color: var(--knowl-background);\n border-bottom-color: transparent;\n}\n\n.source-view__content {\n margin: 0.2em 0;\n}\n\n.knowl__content {\n margin: 0.75em 0; //at least this much space above/below\n border: $border-width solid var(--knowl-border-color);\n border-radius: $border-radius;\n padding: $pad;\n background-color: var(--knowl-background);\n\n .incontext {\n display: block;\n font-size: 85%;\n text-align: right;\n }\n}\n\n/* nested knowl alt colors */\n.knowl__content .knowl__content {\n background-color: var(--knowl-nested-1-background);\n}\n\n.knowl__content .knowl__content .knowl__content {\n background-color: var(--knowl-nested-2-background);\n}\n\n.knowl__content .knowl__content .knowl__content .knowl__content {\n background-color: var(--knowl-nested-3-background);\n}\n\n.knowl__content .knowl__content .knowl__content .knowl__content .knowl__content {\n background-color: var(--knowl-nested-4-background);\n}\n\n\n/* spacing tweaks inside knowls */\n.knowl__content > figure {\n margin-left: 0;\n margin-right: 0;\n}\n", "// Standard collection of chunks. This file should only be modified\n// to fix bugs or improve the default-modern theme. If you want to\n// make changes for use in some other theme, create a _chunks-XXX file\n// in that theme's directory.\n\n$border-radius: 8px !default;\n\n// One stop include for default style content blocks\n@use 'components/chunks/asides-floating';\n@use 'components/chunks/codelike';\n@use 'components/chunks/exercises';\n@use 'components/chunks/solutions';\n@use 'components/chunks/sidebyside';\n@use 'components/chunks/discussion-inline';\n@use 'components/chunks/knowls' with ($border-radius: $border-radius);\n\n@use 'components/chunks/helpers/inline-heading-mixin';\n\n\n.theorem-like,\n.definition-like,\n.example-like,\n.project-like,\n.remark-like,\n.openproblem-like,\n.computation-like,\n.assemblage-like {\n > .heading {\n display: block;\n font-size: 1.1em;\n }\n}\n\n.proof {\n padding-bottom: 1.5em;\n &::after {\n content: \"□\";\n float: right;\n }\n\n .heading {\n font-size: unset;\n font-weight: bold;\n font-style: italic;\n }\n}\n\n.solution-like {\n .heading {\n display: inline;\n font-style: italic;\n font-size: unset;\n }\n}\n\n\n .goal-like {\n border: none;\n padding: 0;\n}\n\n.goal-like > .heading {\n margin-top: -0.5em;\n padding: 0;\n margin: 0;\n font-size: 1.1em;\n}\n\n.paragraphs,\narticle {\n @include inline-heading-mixin.heading;\n}\n", "// Basic spacing for content\n\n// Breakpoint at which the navbar moves to the bottom of the screen\n$navbar-breakpoint: 800px !default;\n\n// all styling assumes border-box layout measurement\n* {\n box-sizing: border-box;\n}\n\n//----------------------------------------------------------\n// Inter item vertical spacing\n//\n// Set some baseline minimal inter-item vertical spacings\n//\n// Individual items can override this with their own margin. The\n// user of @layer here forces these rules to all have less precedence\n// than any rules not in a layer.\n// Most spacing should be done with margin-top.\n\n@layer spacing {\n // inter-item spacing high level containers\n :is(section, article, .knowl__content) > *:not(:first-child) {\n margin-top: 1.5em;\n }\n\n // but tighten up spacing slightly for adjacent paragraphs in a section\n :is(section, article, .knowl__content) > .para + .para {\n margin-top: 1em;\n }\n\n // lower-level container elements that are expected to contain sequences of items\n // tighter spacing here to avoid visually breaking up the minor container\n .ptx-content :is(ul, td, li, dd, .blockquote, .sbspanel, .para.logical) > *:not(:first-child) {\n margin-top: 0.5em;\n }\n}", "// Types of ol/ul - used by web and ebooks\n// Any spacing should be in _lists.scss, not here\n\nol.no-marker,\nul.no-marker,\nli.no-marker {\n list-style-type: none;\n}\n\nol.decimal {\n list-style-type: decimal;\n}\n\nol.lower-alpha {\n list-style-type: lower-alpha;\n}\n\n// Match LaTeX style for second level (i.e. level=\"1\") lists\nol.lower-alpha-level-1 > li::marker {\n content: \"(\"counter(list-item,lower-alpha)\") \";\n}\n\nol.upper-alpha {\n list-style-type: upper-alpha;\n}\n\nol.lower-roman {\n list-style-type: lower-roman;\n}\n\nol.upper-roman {\n list-style-type: upper-roman;\n}\n\nul.disc {\n list-style-type: disc;\n}\n\nul.square {\n list-style-type: square;\n}\n\nul.circle {\n list-style-type: circle;\n}\n", "/* dl is used for glossaries and descriptions lists.\n Glossaries are simple: bold word by itself on a line.\n Definition indented on the next line.\n Vertical space before the next term.\n\n Description lists are more complicated. The wider version\n (refering to the horizontal indentation of the definition;\n this is the default)\n has the (wrapped) term inline with the definition.\n\n The narrow version is complicated because the term is inline\n with its definition if it fits, otherwise it is on the line above.\n That means the vertical space between entries can't be handled by\n a top margin on the dt. Instead we have an ::after on the dd .\n */\n\ndl:is(.description-list, .glossary) {\n margin: 0;\n //overflow: hidden; // Removed to show permalinks\n\n dt {\n font-weight: bold;\n max-width: 55ex;\n }\n\n dd::after {\n content: \"\";\n display: block;\n clear: both;\n }\n}\n\n.para > dl:is(.description-list) {\n // add some space when inside a .para\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n\ndl.glossary {\n dt {\n margin-top: 1.25em;\n\n &:first-of-type {\n margin-top: 0;\n }\n }\n\n dd {\n margin-left: 5ex;\n }\n}\n\ndl.description-list {\n\n dt,\n dd {\n margin-top: 1em;\n\n &:first-of-type {\n margin-top: 0;\n }\n }\n\n dt {\n float: left;\n clear: both;\n text-align: right;\n width: 18ex;\n margin-right: 1ex;\n }\n\n dd {\n margin-left: 22ex;\n }\n\n &.narrow {\n dt {\n width: 11ex;\n }\n\n dd {\n margin-left: 15ex;\n }\n }\n\n &.wide {\n dt {\n width: 25ex;\n }\n\n dd {\n margin-left: 29ex;\n }\n }\n}\n\ndl.description-list dt:first-of-type {\n clear: none;\n}\n\n.description-list + * {\n clear: both;\n}\n\n/* where do we have nested dl? */\ndl.description-list dl dt {\n width: 8ex;\n}\n\ndl.description-list dd dd {\n margin-left: 18ex;\n}\n\ndl.description-list dl dd {\n margin-left: 12ex;\n}\n\n\n@media screen and (max-width: 480px) {\n dl.description-list dt {\n float: none;\n margin-left: 0;\n text-align: left;\n }\n\n dl.description-list dd,\n dl.description-list.narrow dd,\n dl.description-list.wide dd {\n margin-top: 0.5em;\n margin-left: 3em;\n max-width: calc(100% - 3em);\n }\n}\n", "// Entry point for ol/ul/dl web styling\n\n@use \"list-styles\";\n@use \"description-lists\";\n@use '../helpers/cols';\n\n// generate multi column rules for lists\n@include cols.allow-cols('li');\n\n// use .ptx-content to avoid styling lists in toc/header/etc...\n.ptx-content {\n ol,\n ul {\n\n ol,\n ul {\n // margin-top: 0.5em;\n }\n }\n\n li {\n margin-top: 0.5em;\n // margin-bottom: 0;\n\n // & > .para:first-child {\n // margin-top: 0;\n // }\n\n .li--heading-title {\n font-size: 100%;\n font-weight: normal;\n font-style: italic;\n }\n }\n} // .ptx-content\n\n.para > :is(ol, ul) {\n // add some space when inside a .para\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n\n// provide space for custom markers\nol > li {\n padding-left: 0.25em;\n}\n", "\n.fillin {\n display: inline-block;\n border: none;\n border-width: 1px;\n margin-right: 0.1em;\n margin-left: 0.1em;\n margin-bottom: -0.25em;\n\n &.underline {\n border-bottom-style: solid;\n border-width: 1px;\n }\n\n &.box {\n outline: 1px solid var(--body-text-color);\n height: 1.3em;\n }\n\n &.shade {\n background-color: var(--fillin-background-color, #eee);\n height: 1.3em;\n }\n}\n\n\n:root.dark-mode {\n --fillin-background-color: #444;\n}\n", "// headings for standard page elements - sections/articles/etc...\n// more specialized headings (exercises) should be defined in the specific component\n// complex stylizing (like boxes) should be done by \"chunks\"\n\n// reset size/margin for headings\n.heading:is(h1, h2, h3, h4, h5, h6) {\n margin: 0;\n font-size: unset;\n}\n\n.heading {\n line-height: 1.1;\n font-family: var(--font-headings);\n font-weight: 700;\n margin-top: 0;\n margin-bottom: 0;\n}\n\nsection > .heading {\n font-size: 1.75em;\n color: var(--body-title-color);\n line-height: 1.25em;\n margin-top: 2.5em;\n margin-bottom: 0.5em;\n\n // pull in any following items that default to a larger top margin\n & + * {\n margin-top: 0.5em;\n }\n}\n\n.ptx-content > section > .heading {\n //first heading on page\n margin-top: 0.5em;\n}\n\nsection section > .heading {\n font-size: 1.5em;\n margin-top: 2em;\n}\n\nsection section section > .heading {\n font-size: 1.40em;\n margin-top: 2em;\n}\n\n\narticle > .heading {\n font-size: 1.25em;\n margin-top: 1.5em;\n\n // pull in any following items that default to a larger top margin\n & + * {\n margin-top: 0.5em;\n }\n}\n\n.paragraphs > .heading {\n font-size: 1.125em;\n}\n\n// heading followed by no content and then a subsection that starts with heading\n:is(section, article) > .heading + :is(section, article) > .heading {\n margin-top: 0.5em;\n}\n\n// smaller headings on phone screens\n@media screen and (max-width: 480px) {\n section > .heading {\n font-size: 1.5em;\n line-height: 1.33em;\n margin-top: 1em;\n }\n section section > .heading {\n font-size: 1.3em;\n line-height: 1.15em;\n }\n section section section > .heading {\n font-size: 1.15em;\n line-height: 1em;\n }\n}\n\n.heading.hide-type > .type {\n display: none;\n}\n", "\n// Reset for all links\na {\n color: var(--link-text-color);\n text-decoration: none;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n}\n\n\na[href^=\"mailto:\"] {\n white-space: pre;\n}\n\n\n// Body links. .ptx-content to avoid hitting navbar, toc, etc...\n.ptx-content {\n a.internal {\n color: var(--link-text-color);\n font-weight: bold;\n }\n a.external {\n color: var(--link-alt-text-color);\n font-weight: bold;\n }\n a.internal:hover, a.internal:hover *,\n a.internal:focus, a.internal:focus * {\n color: var(--link-active-text-color);\n background-color: var(--link-active-background);\n font-weight: bold;\n }\n a.external:hover, a.external:hover *,\n a.external:focus, a.external:focus * {\n color: var(--link-alt-active-text-color);\n background-color: var(--link-alt-active-background);\n font-weight: bold;\n }\n}\n", "// limit rules targeting basic elements to just content area\n.ptx-content {\n table {\n border-spacing: 0;\n border-collapse: collapse;\n }\n\n td {\n padding: 2px 5px;\n font-size: 90%;\n\n img {\n max-width: 200px;\n margin-right: 30px;\n }\n }\n\n th {\n padding: 2px 5px;\n }\n\n // generate alignment/border mixin classes for both th and td\n @each $cell-type in (th, td) {\n #{$cell-type} {\n .lines {\n white-space: nowrap;\n }\n\n // horizontal alignment options\n @each $class, $align in (l: left, c: center, r: right, j: justify) {\n &.#{$class} {\n text-align: $align;\n }\n }\n\n // vertical alignment options\n @each $class, $align in (t: top, b: bottom, m: middle) {\n &.#{$class} {\n vertical-align: $align;\n }\n }\n\n // border options\n @each $side, $side-symbol in (left: l, right: r, top: t, bottom: b) {\n @for $i from 0 through 3 {\n &.#{$side-symbol}#{$i} {\n @if $i ==0 {\n border-#{$side}: none;\n }\n\n @else {\n border-#{$side}: #{$i}px solid var(--body-text-color);\n }\n }\n }\n }\n }\n }\n\n\n // when cells do not have a border on left and right, add padding\n th.r0.l0,\n td.r0.l0 {\n padding-left: 0.8em;\n padding-right: 0.8em;\n }\n\n tr.header-vertical {\n th {\n writing-mode: vertical-rl;\n padding-left: 2em;\n }\n }\n\n .center {\n table {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n }\n }\n}\n\n// Rules with non-generic targeting\n\n.tabular-box {\n margin-top: 0.5em; //minimum space above to separate from figcaption\n overflow-x: auto;\n}\n\n.tabular-box.natural-width table {\n margin-left: auto;\n margin-right: auto;\n}\n\n// More specific types of tables\n\ntable.notation-list {\n tr {\n th {\n text-align: left;\n margin-left: 1em;\n }\n\n td {\n text-align: left;\n vertical-align: top;\n }\n }\n}\n\n\n\n", "// Styles for the items that are (at least generally) a part of the front matter\n// There are some pretty generic class names. Those get wrapped with a class\n// limiting their scope to the expected page\n\n.frontmatter {\n & > .heading {\n display: block;\n text-align: center;\n }\n\n & > .heading .title,\n .book > .heading .title {\n font-size: 1.3em;\n }\n\n & > .heading .subtitle,\n .book > .heading .subtitle {\n display: block;\n font-weight: normal;\n color: var(--byline-color);\n font-size: 0.875em;\n line-height: 1.42857em;\n margin-top: 0.35714em;\n }\n\n & > .para:first-of-type {\n margin-top: 4em;\n }\n\n & > .author,\n & > .credit {\n margin-top: 2em;\n text-align: center;\n }\n\n .author:first-of-type {\n margin-top: 4em;\n }\n\n & > .author .author-name {\n font-size: 120%;\n }\n\n .date {\n display: block;\n margin-top: 2em;\n text-align: center;\n }\n\n .credit .title {\n font-size: 1em;\n }\n\n .credit .author {\n font-size: 0.9em;\n margin-top: 0.75em;\n }\n\n .author-info {\n font-size: 90%;\n }\n\n .summary-links {\n margin-top: 4em;\n }\n\n .abstract {\n margin: 4em 2em;\n }\n\n .keywords, .support {\n margin-top: 2em;\n }\n\n .abstract, .keywords, .support {\n & > .title {\n font-size: 1.125em;\n font-weight: 600;\n line-height: 1.125em;\n display: inline;\n }\n\n & > .title::after {\n content: \".\\2009\\2009\\2009\";\n }\n\n & > .title + .para {\n display: inline;\n }\n }\n\n .colophon {\n .copyright {\n margin-top: 2.5em;\n }\n\n .license {\n margin-top: 2.5em;\n }\n }\n}\n", "\n/* Start of division toc links */\n// .ptx-content to override _links rules\n.ptx-content .summary-links {\n font-family: var(--font-headings);\n display: block;\n margin-top: 1em;\n\n a {\n color: var(--summary-link-text-color);\n background: var(--summary-link-background);\n font-size: 1.5em;\n line-height: 1.25em;\n padding: 10px 20px;\n padding-right: 60px;\n border-radius: 3px;\n position: relative;\n display: block;\n font-weight: unset;\n\n .title{\n font-style: normal;\n }\n\n .codenumber {\n margin-right: 0.41667em;\n }\n\n &::after {\n // triangles\n right: 0.83333em;\n content: \"\";\n position: absolute;\n top: 50%;\n margin-top: -0.4em;\n width: 0;\n height: 0;\n border-top: 0.4em solid transparent;\n border-bottom: 0.4em solid transparent;\n border-left: 0.4em solid var(--summary-link-text-color);\n }\n\n &:hover {\n color: var(--summary-link-hover-text-color);\n background: var(--summary-link-hover-background);\n\n // need to override work done in _links\n * {\n color: var(--summary-link-hover-text-color);\n background: var(--summary-link-hover-background);\n }\n .title {\n font-weight: normal;\n }\n\n &::after {\n border-left: 0.4em solid var(--summary-link-hover-text-color);\n } \n } \n }\n\n ul {\n list-style-type: none;\n padding: 0;\n margin-top: 0;\n }\n\n li {\n margin-top: 5px;\n }\n}\n\n@media screen and (width <= 480px) {\n .ptx-content .summary-links a {\n //shrink on mobile\n font-size: 100%;\n line-height: 1.25em;\n }\n}\n", "$border-radius: 0px !default;\n\n.ptx-footnote {\n display: inline-block;\n position: relative;\n}\n\n.ptx-footnote[open] {\n display: contents;\n}\n\n\n.ptx-footnote[open] .ptx-footnote__number::before {\n font-size: smaller;\n content: \"[x]\";\n visibility: visible;\n vertical-align: super;\n}\n\n.ptx-footnote[open] .ptx-footnote__number sup {\n display: none;\n}\n\n.ptx-footnote__number {\n display: inline-block;\n cursor: pointer;\n min-width: 1em; //hopefully enough space...\n}\n\n.ptx-footnote__number::marker {\n content: \"\";\n}\n\n.ptx-footnote__contents {\n display: block;\n font-style: italic;\n background: var(--knowl-background);\n border-radius: $border-radius;\n padding: 8px;\n margin: 4px auto;\n width: fit-content;\n max-width: calc(100% - 60px);\n border: 2px solid var(--knowl-border-color);\n //reset color/weight/size in case used in block that changed them\n // e.g. theorem title in denver\n color: var(--body-text-color);\n font-weight: normal;\n font-size: var(1rem);\n}\n", "\n\n/* the index at the back of the book */\n// TODO - refactor\n\n\n.navbar .indexnav {\n position: absolute;\n top: 46px;\n right: 0;\n}\n\n.mininav {\n float: left;\n padding-top: 0.7ex;\n padding-left: 1ex;\n}\n\n\n.indexjump {\n margin-left: 1.5ex;\n margin-top: 0.2ex;\n padding-top: 0;\n float: left;\n line-height: 0.95;\n}\n\n.indexjump a {\n padding-left: 2.5px;\n padding-right: 0.5px;\n width: 2.5ex;\n/*\n* * omitted, because we put a space in the source\n* padding-right: 3px;\n* */\n margin-right: -1px;\n color: inherit;\n font-size: 80%;\n text-align: center;\n}\n.indexjump a::after{\n content: \"\";\n display: inline-block;\n}\n.indexjump a:nth-of-type(14){\n padding-left: 1.8ex;\n}\n.indexjump a:last-child {\n padding-right: 10px;\n}\n\n.indexjump a:hover {\n background: var(--activated-content-bg);\n}\n\n.indexitem {\n margin-top: 4px;\n}\n\n.subindexitem {\n margin-left: 2em;\n font-size: 95%;\n margin-top: -1px;\n}\n\n.subsubindexitem {\n margin-left: 3.5em;\n font-size: 95%;\n margin-top: -1px;\n}\n\n.indexknowl {\n margin-left: 0.11em;\n}\nem + .indexknowl {\n margin-left: -0.25em;\n}\n.indexknowl a {\n margin-left: 2em;\n}\n\n.indexitem .see,\n.subindexitem .see,\n.subsubindexitem .see {\n margin-left: 1em;\n margin-right: 0;\n}\n.indexitem .seealso,\n.subindexitem .seealso,\n.subsubindexitem .seealso {\n margin-left: 1em;\n margin-right: 0;\n}\n.indexitem .see em,\n.subindexitem .see em,\n.subsubindexitem .see em,\n.indexitem .seealso em,\n.subindexitem .seealso em,\n.subsubindexitem .seealso em {\n margin-right: 0.25em;\n font-style: italic;\n}\n/* note that multiple things after \"see\" are in separate spans */\n.indexitem .see + .see,\n.subindexitem .see + .see,\n.subsubindexitem .see + .see,\n.indexitem .seealso + .seealso,\n.subindexitem .seealso + .seealso,\n.subsubindexitem .seealso + .seealso {\n margin-left: 0;\n margin-right: 0;\n}\n\n.indexitem .indexknowl {\n font-size: 90%;\n}\n\n.indexitem [data-knowl], .subindexitem [data-knowl], .indexitem [data-knowl]:hover {\n padding-right: 2px;\n padding-left: 2px;\n}\n.indexknowl [data-knowl]:hover, .indexknowl .active[data-knowl] {\n margin-left: 2em;\n}\n\n.subindexitem .indexknowl {\n font-size: 95%;\n}\n.subsubindexitem .indexknowl {\n font-size: 95%;\n}\n\n.indexletter {\n margin-top: 1.5em;\n}\n", "// ---------------------------------------------\n// containers for images, audio, video, and asymptote\n.image-box,\n.audio-box,\n.video-box,\n.asymptote-box {\n position: relative;\n}\n\n.image-box .asymptote-box iframe.asymptote,\niframe.asymptote,\n.video-box .video,\n.video-box .video-poster {\n position: absolute; top: 0; left: 0; width: 100%; height: 100%;\n}\n\n// images in containers should grow to fit space\n.image-box img,\nimg.contained {\n width: 100%;\n}\n\n// ---------------------------------------------\n// images\n.ptx-content img, .ptx-content svg {\n // for body images in dark mode, we want to be able to force a light colored background\n // as most transparent images will assume that the background is white\n background: var(--ptx-image-bg);\n}\n// but mermaid svg should always have a transparent background\n.mermaid > svg {\n background: none;\n}\n\n.image-description {\n summary {\n list-style: none; // no marker\n cursor: pointer;\n }\n}\n\n// download links after an image\n.image-archive {\n margin: 0.75em auto 0;\n font-family: var(--font-monospace);\n justify-content: center;\n display: flex;\n gap: 0.5em;\n}\n\n// TODO - refactor mag_popup JS and CSS\n// was .ptx-content .image-box > img:not(.draw_on_me):not(.mag_popup)\n.image-box > img:not(.mag_popup) {\n cursor: zoom-in;\n}\n\nimg.mag_popup {\n border: 1px solid #666;\n box-shadow: 4px 6px 4px #999;\n cursor: zoom-out;\n}\n\n.mag_popup_container {\n width:100%;\n position:absolute;\n z-index:1001;\n overflow-x: visible;\n}\n\n// ---------------------------------------------\n// other\n.audio {\n width: 100%;\n}\n\n.video-poster {\n cursor: pointer;\n}\n", "figure {\n clear: both;\n position: relative;\n\n // override browser margins\n margin-left: 0;\n margin-right: 0;\n}\n\nfigcaption {\n margin-left: auto;\n margin-right: auto;\n margin-top: 0.5em;\n\n code.code-inline {\n white-space: pre;\n }\n \n .codenumber,\n .type {\n font-weight: 700;\n }\n\n // add n-dashes\n .codenumber::after,\n .type:last-of-type::after {\n content: \"\\2002\";\n }\n\n // make sure first para comes right after title\n .para:first-of-type {\n display: inline;\n }\n}\n\n// tables are inset\nfigure.table-like {\n margin-left: 30px;\n margin-right: 30px;\n\n // but lists can go full right\n .list {\n margin-right: 0;\n }\n}\n\n@media (max-width <= 943px){\n .figure-like {\n overflow-x: auto;\n }\n}\n", "/* style for poems */\n.poem {\n display: table;\n margin: 0 auto;\n width: auto;\n max-width: 90%;\n}\n\n.poem > .heading {\n display: block;\n text-align: center;\n}\n\nsection article.poem > .heading::after {\n content: \"\";\n}\n\n.poem > .heading > .title {\n font-weight: bold;\n font-size: 1.2em;\n line-height: 1.2em;\n}\n\n.poem .author {\n font-style: italic;\n margin-top: 0.75em;\n}\n\n.poem .author.left {\n text-align: left;\n}\n\n.poem .author.center {\n text-align: center;\n}\n\n.poem .author.right {\n text-align: right;\n}\n\n.poem .stanza > .heading {\n text-align: center;\n font-weight: bold;\n font-size: 1em;\n line-height: 1em;\n}\n\n.poem .stanza + .stanza {\n margin-top: 1em;\n}\n\n.poem .heading + .stanza {\n margin-top: 0.2em;\n}\n\n.poem .heading + .line {\n margin-top: 0.2em;\n}\n\n.poem .line.left {\n text-align: left;\n margin-left: 4em;\n text-indent: -4em;\n}\n\n.poem .line.center {\n text-align: center;\n}\n\n.poem .line.right {\n text-align: right;\n}\n\n.poem .tab {\n margin-left: 2em;\n}\n", "@use '../chunks/codelike';\n\n// Prism stylesheets built locally as default ones don't support light/dark switching\n// this is a merged version of the default and dark themes\n\n// Default prism styling\n// Blocks\npre[class*=\"language-\"] {\n margin: 0;\n overflow: auto;\n border: 1px solid #e1e1e1;\n}\n\n// Inline code\n:not(pre) > code[class*=\"language-\"] {\n padding: .1em;\n border-radius: .3em;\n white-space: normal;\n}\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n color: black;\n background: #fdfdfd;\n text-shadow: none;\n font-family: var(--font-monospace);\n text-align: left;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n word-wrap: normal;\n line-height: 1.2;\n tab-size: 4;\n hyphens: none;\n\n &.code-inline {\n // unclobber some inline code styles\n @include codelike.code-inline-spacing();\n }\n\n &::selection,\n & ::selection {\n background: #b3d4fc;\n }\n\n .token {\n \n &:is(.comment,\n .prolog,\n .doctype,\n .cdata) {\n color: #2a9716;\n }\n \n &.punctuation {\n color: #000;\n }\n \n &.namespace {\n opacity: .9;\n }\n \n &:is(.property,\n .tag,\n .boolean,\n .number,\n .constant,\n .symbol,\n .deleted) {\n color: rgb(41, 120, 15);\n }\n \n &:is(.selector,\n .attr-name,\n .string,\n .char,\n .builtin,\n .regex,\n .inserted) {\n color: #a11;\n }\n \n &:is(.operator,\n .entity,\n .url) {\n color: #000;\n background: none;\n }\n \n &:is(.atrule,\n .attr-value,\n .keyword) {\n color: #0679B7;\n }\n \n &.function,\n &.class-name {\n color: #30a;\n }\n \n &.important,\n &.variable {\n color: rgb(0, 0, 0);\n }\n \n \n &.important,\n &.bold {\n font-weight: bold;\n }\n \n &.italic {\n font-style: italic;\n }\n \n &.entity {\n cursor: help;\n }\n }\n \n // -------------------------------------------\n // Line numbers\n &.line-numbers {\n position: relative;\n padding-left: 3.8em;\n counter-reset: linenumber;\n overflow: auto;\n \n > code {\n position: relative;\n white-space: inherit\n }\n \n .line-numbers-rows {\n position: absolute;\n pointer-events: none;\n top: 0;\n font-size: 100%;\n left: -3.8em;\n width: 3em;\n letter-spacing: -1px;\n border-right: 1px solid #999;\n user-select: none\n }\n \n .line-numbers-rows > span {\n display: block;\n counter-increment: linenumber\n }\n \n .line-numbers-rows > span::before {\n content: counter(linenumber);\n color: #999;\n display: block;\n padding-right: .8em;\n text-align: right\n }\n }\n \n \n // -------------------------------------------\n // Line highlighting\n .line-highlight {\n position: absolute;\n margin-top: 4px; // tune to match padding of containing pre\n left: 0;\n right: 0;\n padding: inherit 0;\n font-size: inherit;\n background: hsla(24, 20%, 50%, 8%);\n pointer-events: none;\n line-height: inherit;\n white-space: pre\n }\n}\n\n// -------------------------------------------\n// Dark mode\n:root.dark-mode {\n \n /* Code blocks */\n pre[class*=\"language-\"] {\n border: 1px solid #3d3d3d;\n }\n \n \n // Darker styling to match Runesone's code mirror theme\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n color: white;\n background: hsl(0, 0%, 8%);\n \n &::selection,\n & ::selection {\n background: hsl(200, 4%, 16%);\n }\n \n /* Make the tokens sit above the line highlight so the colours don't look faded. */\n .token {\n position: relative;\n z-index: 1;\n \n &:is(.comment,\n .prolog,\n .doctype,\n .cdata) {\n color: #68a950;\n }\n \n &.punctuation {\n color: white;\n opacity: 1;\n }\n \n &.namespace {\n opacity: .9;\n }\n \n &:is(.property,\n .tag,\n .boolean,\n .number,\n .constant,\n .symbol,\n .deleted) {\n color: #abc792;\n }\n \n &:is(.selector,\n .attr-name,\n .string,\n .char,\n .builtin,\n .regex,\n .inserted) {\n color: #ca9147;\n }\n \n &:is(.operator,\n .entity,\n .url) {\n color: white;\n }\n \n &:is(.atrule,\n .attr-value,\n .keyword) {\n color: #2d94fb;\n }\n \n &.function,\n &.class-name {\n color: #e3e1c2;\n }\n \n &.important,\n &.bold {\n font-weight: bold;\n }\n \n &.italic {\n font-style: italic;\n }\n \n &.entity {\n cursor: help;\n }\n \n }\n }\n \n .line-highlight {\n background: hsla(0, 0%, 33%, 10%);\n border-bottom: 1px dashed hsl(0, 0%, 33%);\n border-top: 1px dashed hsl(0, 0%, 33%);\n z-index: 0;\n }\n}\n\n@media print {\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n .line-highlight {\n color-adjust: exact\n }\n }\n}\n", "// TODO - refactor\n\n.displaymath {\n overflow-x: auto;\n overflow-y: hidden;\n}\n\n.displaymath mjx-container[jax=\"CHTML\"][display=\"true\"] {\n margin: 0 0 0 0; // container is going to apply margin, so remove it from mjx-container\n padding-top: 2px; // Chrome sometimes clips the top 1-2 pixels of math after it has been scaled - provide room for that content\n}\n\n.process-math mjx-container svg {\n // remove the background that is normally applied to svg's by PreTeXt CSS\n // we use .process-math instead of .displaymath to get inline math as well.\n background: none;\n}\n\n// ?\n[data-knowl] > mjx-mrow .TEX-I {\n font-family: MJXZERO !important;\n font-style: normal !important;\n}\n\n/* remove this when MathJax fixes the bug that was setting the width to 0 */\n/* as in $x=0$. becomes $x=0\\text{.}$ */\n.knowl mjx-mtext > mjx-utext,\nmjx-mtext > mjx-utext {\n width: revert !important;\n}\nmjx-msup mjx-utext,\nmjx-msub mjx-utext {\n display: inline;\n}\n", "// TODO - refactor\n$opacity: 0.0 !default;\n\n/*\nSo that we can position things (like .autopermalink) absolutely wrt these items.\nAny element whose permalink should be positioned directly to the left of it\nshould be in this list.\n*/\nsection,\narticle,\nli,\nblockquote,\nfigcaption,\ndt,\n.exercisegroup,\n.discussion-like,\n.solution-like,\n.para {\n position: relative;\n}\n\n.autopermalink {\n position: absolute;\n display: inline-block;\n top: 0.5ex;\n left: -2em;\n font-size: 85%;\n // variable allows theme to set different opacities for dark/light\n opacity: var(--permalink-opacity, $opacity);\n transition: opacity 0.2s;\n margin-top: 0 !important;\n}\n\nli > .autopermalink {\n left: -3.5em;\n}\n\n.autopermalink > * {\n padding-left: 0.2em;\n padding-right: 0.2em;\n}\n\n\n// Move permalink for division titles etc a little bit lower\n.appendix > .autopermalink,\n.chapter > .autopermalink,\n.index > .autopermalink,\n.section > .autopermalink,\n.subsection > .autopermalink,\n.references > .autopermalink,\n.exercises > .autopermalink {\n top: 1.5ex;\n}\n\n// In some styles, the autopermalink for paras land right on the border line.\n// This is an attempt to fix that. TODO: find a more robust solution, maybe\n// using a variable for the left offset of paras inside blocks.\n.assemblage-like > .para > .autopermalink,\n.example-like > .para > .autopermalink,\n.example-like > .exercise-like > .autopermalink,\n.project-like > .para > .autopermalink,\n.project-like > .exercise-like > .autopermalink,\n.project-like > .exercise-like > .introduction > .para > .autopermalink,\n.project-like > .exercise-like > .conclusion > .para > .autopermalink,\n.remark-like > .para > .autopermalink {\n left: -2.9em;\n}\n\n\n.axiom-like, .example-like, .exercise-like, .solution-like, .assemblage-like, .definition-like, .remark-like, .project-like, .openproblem-like, .computation-like, .theorem-like, .proof, .case, li, dd {\n > .para:first-of-type > .autopermalink {\n display:none;\n }\n\n > .introduction > .para:first-of-type > .autopermalink {\n display:none;\n }\n}\n\n\n// Hover effects\n\n.ptx-content:has(.autopermalink:hover) .autopermalink {\n opacity: 0.2;\n}\n\n.ptx-content:has(.autopermalink:hover) .autopermalink:hover {\n opacity: 1;\n}\n\n.autopermalink:has(a:focus-visible) {\n opacity: 1;\n}\n\n.permalink-alert {\n position: absolute;\n top: -3em;\n left: 5em;\n padding: 1.5em 2em;\n background: var(--content-background);\n border: 3px solid var(--page-border-color);\n z-index: 2001;\n}\n\n\n/* when jumping to a permalink, push down so sticky navbar does not cover */\n:target {\n scroll-margin-top: 45px;\n // the \"pink flash\" when navigating to a target\n animation: target-fade 10s 1;\n}\n\n@keyframes target-fade {\n 0% { background-color: var(--activated-content-bg) }\n 100% {\n background-color: inherit;\n opacity: 1;\n }\n}\n", "\n// Miscellaneous stylized content blocks that are not complex enough\n// to warrant their own file\n\nem.alert {\n font-weight: bold;\n}\n\n.bib {\n margin-top: 0.25em;\n\n .bibitem {\n display: inline-block;\n vertical-align: top;\n width: 7%;\n margin-right: 0;\n }\n \n .bibitem + .bibentry {\n display: inline-block;\n width: 90%;\n margin-top: 0;\n }\n}\n\n\n\n.caption {\n margin-top: 10px;\n margin-left: auto;\n margin-right: auto;\n font-size: 100%;\n text-align: center;\n}\n\n\n.contributor {\n margin-top: 1.5ex;\n\n &:first-child {\n margin-top: 0em;\n }\n\n & + .para {\n margin-top: 3ex;\n }\n\n .contributor-name {\n font-variant: small-caps;\n }\n\n .contributor-info {\n font-size: 88%;\n font-style: italic;\n margin-left: 3ex;\n }\n}\n\n\n// Icon font settings\n.material-symbols-outlined {\n font-variation-settings:\n 'FILL' 0,\n 'wght' 400,\n 'GRAD' 0,\n 'opsz' 24\n}\n\n\niframe {\n margin: 0;\n border: none;\n}\n\n\n.kbdkey {\n background: #f1f1f1;\n color: #333;\n border: 1px solid #dddddd;\n border-radius: 3px;\n padding: 1px 2px 0 2px;\n vertical-align: 0.1em;\n font-size: 110%;\n line-height: 1;\n box-shadow: 2px 2px grey;\n display: inline-block;\n margin-right: 3px;\n}\n\n\n.unit,\n.quantity {\n white-space: nowrap;\n word-spacing: -0.25ex;\n margin-right: 0.125em;\n\n sub, sup {\n word-spacing: normal;\n }\n}\n\n\n.terminology {\n font-style: italic;\n font-weight: bold;\n}\n\n\n\n.times-sign {\n font-size: larger;\n vertical-align: -0.15ex;\n}\n\n\n.emphasis {\n font-style: italic;\n\n .emphasis {\n font-weight: bold;\n }\n}\n\n.definition-like .emphasis {\n font-weight: 700;\n}\narticle.theorem-like .emphasis {\n font-weight: 700;\n}\n\n.para {\n line-height: 1.35;\n}\n\n.hidden {\n display: none !important;\n}\n\n/* genus and species in italics */\n.taxon {\n font-style: italic;\n}\n\n.quote {\n padding-left: 40px;\n padding-right: 10px;\n margin-bottom: 1em;\n}\n\n.booktitle {\n font-style: oblique;\n}\n\n/* Adapted from William Hammond (attributed to David Carlisle) */\n/* \"mathjax-users\" Google Group, 2015-12-27 */\n\n.latex-logo {font-family: \"PT Serif\", \"Times New Roman\", Times, serif;}\n\n.latex-logo .A {font-size: 75%; text-transform: uppercase; vertical-align: .5ex;\n margin-left: -.48em; margin-right: -.2em;}\n\n.latex-logo .E {vertical-align:-.5ex; text-transform: uppercase;\n margin-left: -.18em; margin-right: -.12em; }\n", "// Basic rules for printing a standard PreTeXt page\n\n// Get rid of UI elements.\n// Leave margin fiddling for system print dialog.\n\n// Worksheet and handout printing is handled in print-worksheet.scss\n\n@media print {\n .pretext .ptx-masthead,\n .pretext .ptx-navbar,\n body.pretext > a.assistive,\n .pretext .ptx-page > .ptx-sidebar,\n .pretext .ptx-page-footer,\n .pretext .ptx-main > div.ptx-content-footer {\n display:none;\n }\n\n .ptx-page, .ptx-main, .ptx-main .ptx-content {\n all: unset !important;\n width: 100%;\n border: none;\n padding: 0;\n margin: 0;\n }\n\n .ptx-sagecell, .tabular, .table-like, .figure-like, .exercise-like {\n break-inside: avoid;\n }\n\n .heading {\n break-after: avoid;\n }\n\n .code-inline {\n border: unset;\n background: unset;\n }\n\n @page {\n margin: 0.75in 0.75in 0.75in 0.75in;\n }\n}\n", "// TODO refactor\n\n// Rules in this file apply to both screen and print\n// Print specific rules should go in a file in targets/print-worksheet stylesheet\n@use 'components/helpers/buttons-default' as buttons;\n\n.heading .print-links {\n float: right;\n vertical-align: bottom;\n .print-link {\n font-family: var(--font-body);\n padding: 0.1em 0.2em;\n }\n .material-symbols-outlined {\n margin-top:5pt;\n }\n}\n\n", "// TODO - refactor\n// Make conditional on use of google search???\n\n.pretext .searchwrapper {\n max-width: 900px;\n position: absolute;\n right: 0;\n bottom: 0;\n margin-bottom: 39px;\n}\n\n.pretext .searchwrapper .cse .gsc-control-cse,\n.pretext .searchwrapper .cse .gsc-control-cse input,\n.searchwrapper .gsc-control-cse {\n padding: 5px;\n}\n\n// .pretext .searchwrapper .cse .gsc-search-button input.gsc-search-button-v2,\n// .searchwrapper input.gsc-search-button-v2 {\n// padding: 2px 2px;\n// }\n\n// .pretext .searchwrapper form.gsc-search-box {\n// margin: 0;\n// }\n\n// .pretext .searchwrapper table.gsc-search-box {\n// margin: 0;\n// }\n\n// .pretext .searchwrapper .gsc-search-box-tools .gsc-search-box .gsc-input {\n// padding: 0;\n// }\n\n// .pretext .searchwrapper .gsib_a {\n// padding: 0 0 0 5px;\n// }\n\n// .pretext .searchwrapper .gsc-input-box {\n// height: 3.0ex;\n// }\n\n// .pretext .searchwrapper form.gsc-search-box {\n// font-size: 12px;\n// }\n", "\n@use 'components/helpers/buttons-default' as buttons;\n\n.searchbox {\n\n .searchwidget {\n height: 100%;\n }\n \n .searchresultsplaceholder {\n position: fixed;\n top: 5vh;\n bottom: 5vh;\n padding: 1em;\n left: max(10vw, calc(100vw - 800px) / 2);\n width: 80vw;\n max-width: 800px;\n border: 2px solid var(--body-text-color);\n background: var(--knowl-background, #eaf0f6);\n z-index: 5000;\n display: flex;\n flex-direction: column;\n }\n\n .searchresultsplaceholder article {\n width: 60%;\n margin-left: auto;\n margin-right: auto;\n font-family: sans-serif;\n }\n\n .search-results-controls {\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n gap: 10px;\n margin-bottom: 1em;\n height: 35px;\n }\n\n .ptxsearch {\n flex: 1 1;\n }\n \n\n .closesearchresults {\n @include buttons.ptx-button;\n }\n\n .detailed_result {\n margin-bottom: 10px;\n }\n\n .searchresults a:hover {\n text-decoration: underline;\n background: var(--link-active-background);\n }\n\n\n .searchresults {\n padding-left: 10px;\n margin-top: 0;\n overflow-y: auto;\n flex: 1 1;\n background: var(--content-background, white);\n border: 1px solid var(--page-border-color, #ccc);\n }\n\n .searchresults:empty {\n display: none;\n }\n \n .search-result-bullet {\n list-style-type: none;\n }\n\n .search-result-score {\n display: none;\n }\n\n //result qualities\n .no_result {\n font-size: 90%;\n font-weight: 200;\n }\n\n .low_result {\n font-weight: 200;\n }\n\n .medium_result {\n font-weight: 500;\n }\n .high_result {\n font-weight: 700;\n }\n\n .searchempty {\n display: none;\n padding-left: 10px;\n padding-top: 5px;\n }\n\n .search-results-unshown-count {\n margin-top: 0.6em;\n }\n\n .search-result-clip-highlight {\n background: var(--searchresultshighlight);\n }\n\n .searchresultsbackground {\n position: fixed;\n top: 0;\n background: var(--searchresultsbackground, white);\n width: 100vw;\n height: 100%;\n left: 0;\n z-index: 4999;\n }\n\n @media screen and (max-width: 800px) {\n .searchresultsplaceholder {\n bottom: 10vh;\n }\n }\n}\n\n:root {\n --searchresultsbackground: #fff8;\n --searchresultshighlight: rgba(255, 255, 0, 50%);\n}\n\n:root.dark-mode {\n --searchresultsbackground: #0008;\n --searchresultshighlight: rgba(255, 255, 0, 15%);\n}\n", "$border-radius: 0 !default;\n\n@mixin ptx-button(\n $border-radius: $border-radius\n) {\n font: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0 10px;\n gap: 10px;\n min-height: 34px;\n color: var(--button-text-color);\n background-color: var(--button-background);\n border-width: 1px;\n border-color: var(--button-border-color);\n border-style: solid;\n border-radius: $border-radius;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n\n // Disable accidental text-selection\n user-select: none;\n\n &:hover:not(.disabled) {\n color: var(--button-hover-text-color);\n background-color: var(--button-hover-background);\n }\n\n &:focus-visible {\n outline: 2px solid var(--button-text-color);\n outline-offset: -2px;\n }\n\n &.disabled {\n opacity: .4;\n cursor: not-allowed;\n }\n\n &.hidden {\n display: none;\n }\n\n &.open {\n color: var(--button-hover-text-color);\n background-color: var(--button-hover-background);\n }\n}\n\n@mixin ptx-dropdown-button {\n position: relative;\n\n .dropdown-content {\n display: none;\n position: absolute;\n background-color: var(--dropdown-background);\n min-width: 160px;\n z-index: 100;\n border: 1px solid var(--dropdown-border-color);\n right: 0;\n top: 35px;\n text-align: start;\n padding: 0;\n\n a {\n display: block;\n text-decoration: none;\n color: var(--dropdown-text-color);\n padding: 2px 8px;\n\n &:is(:hover, :focus-visible) {\n background-color: var(--dropdown-hover-background);\n color: var(--dropdown-hover-text-color);\n }\n }\n\n hr {\n color: var(--dropdown-border-color);\n margin: 4px 0;\n }\n }\n\n &:is(:hover, :focus-visible, :focus-within) {\n overflow: visible;\n\n .dropdown-content {\n display: block;\n }\n }\n}\n", "// extra specific to override Runestone margin\n.ptx-content .ptx-runestone-container .runestone {\n margin: unset;\n border-radius: 0;\n border-width: 1px;\n}\n\n// avoid label splitting into multiple lines\n.multiplechoice_section label > .para {\n display: inline;\n}\n\n// extra specific to override Runestone margin\n.ptx-content .ptx-runestone-container .ac_question { \n max-width: var(--base-content-width);\n margin: 0 auto 10px;\n}\n\n.runestone .runestone_caption {\n // caption is always just something like \"ActiveCode\" in PTX\n display: none;\n}\n\n\n/* to undo Runestone's draganddrop.css */\n.ptx-content .ptx-runestone-container .rsdraggable {\n font-size: 100%;\n}\n\n// Unsure if still needed\n/* hack for runestone */\n/* to undo Runestone's presentermode.css */\n.ptx-content .bottom {\n position: unset;\n}\n\n// override Runestone's pre formatting with these extra specific rules\n.ptx-runestone-container .runestone code,\n.ptx-runestone-container .runestone pre {\n font-size: .93rem;\n line-height: 1.2;\n font-family: var(--font-monospace);\n}\n\n// override Runestone's pre formatting with these extra specific rules\n.ptx-runestone-container code[class*=\"language-\"],\n.ptx-runestone-container pre[class*=\"language-\"] {\n color: black;\n background: #fdfdfd;\n}\n\n//Fixup datafile captions\n.runestone.datafile {\n .datafile_caption {\n background: var(--code-inline-background);\n border: 1px solid color-mix(in oklab, var(--code-inline-background) 50%, #888);\n display: block;\n width: fit-content;\n margin: 0 auto;\n }\n img {\n margin: 0 auto;\n display: block;\n border: 1px solid color-mix(in oklab, var(--code-inline-background) 50%, #888);\n }\n pre, textarea {\n margin: 0 auto;\n border: 1px solid color-mix(in oklab, var(--code-inline-background) 50%, #888);\n background-color: var(--page-color);\n }\n}\n.runestone.datafile + .program {\n margin-top: 0;\n}\n\n// RS does not care what kind of element is used\n// PTX chooses to use a ul, so we will fix margins for it here instead of RS\nul[data-component=\"timedAssessment\"] {\n margin: 0;\n padding: 0;\n}\n\n:root.dark-mode {\n // Darker styling to match Runesone's code mirror theme\n .ptx-runestone-container code[class*=\"language-\"],\n .ptx-runestone-container pre[class*=\"language-\"] {\n color: white;\n background: hsl(0, 0%, 8%);\n }\n}\n", "// TODO - needs refactoring and dark mode update\n\n@use 'components/helpers/buttons-default' as buttons;\n\n/* WW problems */\n.ptx-content .wwprob table.attemptResults {\n margin-left: 2em;\n background: #efefef;\n padding: 0.2em;\n}\n\n.ptx-content .wwprob table.attemptResults + .attemptResultsSummary {\n margin-top: 1em;\n}\n\n.ptx-content .wwprob .problem-main-form {\n margin-top: 1em;\n background: #eeeeff;\n padding: 0.5em;\n}\n\n.ptx-content .wwprob td.ResultsWithoutError {\n background: #9f9;\n}\n\n.ptx-content .wwprob td.ResultsWithError {\n background: #f99;\n}\n\n.ptx-content .wwprob tr th {\n text-align: center;\n padding: 0.2em 1em 0.2em 1em;\n}\n\n.ptx-content .wwprob tr td {\n text-align: center;\n}\n\n.ptx-content .wwprob tr td:empty {\n background: #fff;\n}\n\n.ptx-content .wwprob ol,\n.ptx-content .wwprob ul {\n margin-top: 0.75em !important;\n}\n\n.ptx-content .wwprob .problem {\n background: #fdfdfd;\n}\n\n.ptx-content .wwprob .problem a {\n text-decoration: none;\n}\n\n.ptx-content .wwprob #footer {\n font-size: 70%;\n text-align: right;\n}\n\n/* interactive WeBWorK */\n\nlabel.webwork {\n display: inline-flex;\n flex-direction: column;\n}\n\nlabel.correct .status {\n background-color: #a0f0a0;\n}\n\nlabel.partly-correct .status {\n color: #ffcc66;\n}\n\nlabel.incorrect .status {\n color: #b00;\n}\n\nlabel.incorrect .status::before {\n content: \" \";\n}\n\nlabel.feedback {\n word-wrap: break-word;\n}\n\nlabel.correct .feedback {\n background-color: #00ffcc;\n}\n\nlabel.partly-correct .feedback {\n color: #ffcc66;\n}\n\nlabel.incorrect .feedback {\n color: #e07070;\n}\n\n.webwork img,\n.webwork + .knowl-output img {\n max-width: 100%;\n}\n\n// Make the default margin for items inside the exercise-wrapper similar to\n// default for items in a section\n.exercise-wrapper > *:not(:first-child) {\n margin-top: 1.5em;\n}\n\n.ptx-content .problem-buttons {\n display: flex;\n}\n\n.ptx-content .webwork-button {\n @include buttons.ptx-button;\n}\n\n//.hidden-content used to be used for knowls and got repurposed for hiding webwork contents\n// now just used by webwork\n.problem-buttons.hidden-content,\n.problem-contents.hidden-content {\n display: none;\n}\n", "// TODO - refactor\n\n.sagecell_sessionOutput pre {\n font-family: var(--font-monospace);\n}\n\n.sagecell {\n white-space: normal;\n margin-top: 1.25em;\n margin-bottom: 1.25em;\n}\n\n.sage-interact.sagecell {\n margin: 0;\n}\n\n.sagecell_evalButton {\n font-family: var(--font-body);\n font-size: 16px;\n padding: 0 0.65em;\n}\n\n.sagecell_evalButton {\n cursor: pointer;\n display: inline-block;\n vertical-align: middle;\n /* Disable accidental text-selection */\n user-select: none;\n /* Truncate overflowing text with ellipsis */\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-width: 1px;\n border-style: solid;\n font-weight: bold;\n border-radius: 3px;\n}\n\n.sagecell_evalButton {\n color: #383838;\n background-image: linear-gradient(#f7f7f7, #bbbbbb);\n border-color: #c4c4c4;\n}\n\n.sagecell_evalButton:hover {\n color: #181868;\n background-image: linear-gradient(#bbbbbb, #f7f7f7);\n}\n\n.sagecell_evalButton:focus,\n.sagecell_evalButton:active {\n color: #20160b;\n background-image: linear-gradient(#ff6852, #ffd7d1);\n border-color: #ff2822;\n}\n\n.sagecell .sagecell_editor {\n margin-bottom: 8px;\n}\n\n.sageanswer {\n font-family: monospace;\n white-space: pre;\n margin-left: 3em;\n margin-bottom: 2em;\n}\n\n.sageanswer .key {\n display: inline-block;\n vertical-align: top;\n margin-right: 1em;\n}\n\n.sageanswer .output {\n display: inline-block;\n vertical-align: top;\n}\n", "// GeoGebra calculator\n\n$navbar-breakpoint: 856px !default;\n\n.calculator-container {\n position: fixed;\n z-index: 100;\n bottom: 5px;\n right: 5px;\n width: 253px;\n height: 460px;\n}\n\n@media screen and (max-width: $navbar-breakpoint) {\n .calculator-container {\n //assumes navbar moves to bottom of screen\n bottom: 50px !important;\n }\n}\n", "/*\n Master list of color variables and default values.\n Variables are defined in SCSS to allow for calculation of values. They are\n then converted to CSS variables for use in the HTML so authors can, if\n need be, override them with custom CSS.\n\n Any new variable should be added to this file and either defined to another\n variable or given a reasonable default value for the red-blue default theme.\n\n Variables should be semantic, not descriptive\n i.e. --link-color, not --pretty-blue\n*/\n\n@use \"sass:map\";\n\n// ==============================================================================\n// Light theme\n\n// ==============================================================================\n// Page structures\n\n$colors: (\n // Background of page (gutters if any)\n \"page-color\": white,\n // Background of content area\n \"content-background\": white,\n // Border around content area - also possibly used for internal borders\n \"page-border-color\": #ccc,\n\n // ------------------------------------------------------------------------------\n // Banner/nav related\n\n \"doc-title-color\": #932919,\n \"byline-color\": #333,\n \"banner-background\": #fafafa,\n \"navbar-background\": #ededed,\n \"footer-background\": var(--banner-background),\n\n // ------------------------------------------------------------------------------\n // TOC related\n\n \"toc-border-color\": #666,\n \"toc-background\": var(--content-background),\n\n \"tocitem-background\": var(--toc-background),\n \"toc-text-color\": var(--body-text-color),\n\n // highlight styles are used for hover\n \"tocitem-highlight-background\": #671d12,\n \"tocitem-highlight-text-color\": white,\n \"tocitem-highlight-border-color\": var(--toc-border-color),\n \n // active styles are used for the current toc item\n \"tocitem-active-background\": #671d12,\n \"tocitem-active-text-color\": white,\n \"tocitem-active-border-color\": var(--toc-border-color),\n\n // level based colors for TOC\n // levels are not necessarily all used\n // see the toc-basics.scss for how these are determined\n \"toclevel1-background\": var(--content-background),\n \"toclevel1-text-color\": var(--toc-text-color),\n \"toclevel2-background\": var(--content-background),\n \"toclevel2-text-color\": var(--toc-text-color),\n \"toclevel3-background\": var(--content-background),\n \"toclevel3-text-color\": var(--toc-text-color),\n\n\n // ==============================================================================\n // Content\n // ==============================================================================\n\n // ------------------------------------------------------------------------------\n // Text & titles\n\n \"body-text-color\": #000,\n \"body-title-color\": #000,\n\n \"ptx-image-bg\": transparent,\n \"activated-content-bg\": rgba(241, 185, 255, 30%),\n\n \"summary-link-background\": var(--button-background),\n \"summary-link-text-color\": var(--button-text-color),\n \"summary-link-hover-background\": var(--button-hover-background),\n \"summary-link-hover-text-color\": var(--button-hover-text-color),\n\n // ------------------------------------------------------------------------------\n // Links & knowls\n\n \"link-text-color\": #2B5F82,\n \"link-background\": transparent,\n \"link-active-text-color\": var(--link-text-color),\n \"link-active-background\": #cad2e1,\n\n \"link-alt-text-color\": #A62E1C,\n \"link-alt-background\": transparent,\n \"link-alt-active-text-color\": var(--link-alt-text-color),\n \"link-alt-active-background\": #e3d1ce,\n\n \"knowl-link-color\": var(--link-text-color),\n \"knowl-background\": #f5f8ff,\n \"knowl-border-color\": #e0e9ff,\n \"knowl-nested-1-background\": #f5f5ff,\n \"knowl-nested-2-background\": #fffff5,\n \"knowl-nested-3-background\": #f5ffff,\n \"knowl-nested-4-background\": #fff5f5,\n\n // ------------------------------------------------------------------------------\n // Blocks\n\n // Fall back generic block colors:\n \"block-body-background\": var(--content-background),\n \"block-border-color\": var(--knowl-border-color),\n \"block-head-color\": var(--body-text-color),\n\n // See below for specific block types\n \n \"aside-like-link-color\": var(--link-text-color),\n\n // ------------------------------------------------------------------------------\n // Buttons & Widgets\n\n \"button-background\": #ededed,\n \"button-text-color\": #333333,\n \"button-border-color\": #ccc,\n \"button-hover-background\": #c7c7c7,\n \"button-hover-text-color\": var(--button-text-color),\n\n \"dropdown-background\": var(--content-background),\n \"dropdown-border-color\": var(--toc-border-color),\n \"dropdown-text-color\": var(--toc-text-color),\n \"dropdown-hover-background\": var(--tocitem-active-background),\n \"dropdown-hover-text-color\": var(--tocitem-active-text-color),\n\n // ------------------------------------------------------------------------------\n // Other\n \"code-background\": #fdfdfd,\n \"code-inline-background\": #ededed,\n);\n\n// ==============================================================================\n// Block types\n\n// Variables for specific block types should look like those below. In this file\n// only \"top level\" blocks from the -like families are defined. \n// Other themes/color palettes may define\n// more specific ones - see palette_quad_chunks.scss for an example.\n\n// block-types based on those in entities.ent\n$block-types: \"assemblage-like\", \"definition-like\", \"theorem-like\", \"theorem-like\", \"axiom-like\", \"remark-like\", \"computation-like\", \"openproblem-like\", \"aside-like\", \"proof-like\", \"example-like\", \"project-like\", \"goal-like\", \"solution-like\";\n// TODO - \"proof\" should probably be updated to \"proof-like\" in HTML css\n\n@each $block in $block-types {\n $colors: map.merge(\n $colors,\n (\n // define background and border, but default to generic block colors\n \"#{$block}-body-background\": var(--block-body-background),\n \"#{$block}-border-color\": var(--block-border-color),\n )\n );\n}\n", "// This file contains functions and mixins for working with colors in SCSS\n\n@use \"sass:map\";\n@use \"sass:color\";\n\n@mixin set-root-colors($colors, $dark-colors: null) {\n :root {\n color-scheme: light;\n // prevent variable leak through to dark\n &:not(.dark-mode) {\n @include scss-to-css($colors);\n }\n }\n\n @if $dark-colors {\n :root.dark-mode {\n color-scheme: dark;\n @include scss-to-css($dark-colors);\n }\n }\n}\n\n// Renders a map of SCSS variables as CSS variables\n@mixin scss-to-css($colors) {\n @each $name, $value in $colors {\n --#{$name}: #{$value};\n }\n}\n\n// Create a map of colors that blend $color with $other at $mix-amounts\n// The resulting map will have keys of the form 'color-other-10'\n// Indicating 10% of other mixed into color\n@function mixes($color, $other, $mix-amounts) {\n $result: ();\n\n @each $i in $mix-amounts {\n $result: map.set($result, '#{$color}-#{$other}-#{$i}', 'color-mix(in oklab, var(--#{$color}), #{$other} #{$i}%)');\n }\n\n @return $result;\n}\n\n$std-mixes: (1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 65, 70, 75, 80, 85, 90, 95, 96, 97, 98, 99);\n\n// Creates a map of color blends for a given color\n// By default it creates blends with black, white, and gray at $std-mixes amounts\n// Mixing is done using css color-mix function so that if a theme file has the base\n// css variable overridden, the blends will be updated accordingly\n@function get-blends($color, $shades: $std-mixes, $tints: $std-mixes, $tones: $std-mixes, ) {\n $shades: mixes($color, black, $std-mixes);\n $tints: mixes($color, white, $std-mixes);\n $tones: mixes($color, gray, $std-mixes);\n\n $blends: map.merge(\n $tints,\n $shades\n );\n\n $blends: map.merge(\n $blends,\n $tones\n );\n @return $blends;\n}\n\n//--------------------------------------------------------------------------\n// https://jonnykates.medium.com/automating-colour-contrast-ratios-with-sass-e201f3b52797\n// Formula there has a typo, need parens around the sum of the three color channels\n\n@function text-contrast($color, $light: #ffffff, $dark: #000000) {\n $color-brightness: round(\n (\n (color.red($color) * 299) +\n (color.green($color) * 587) +\n (color.blue($color) * 114)\n ) / 1000\n );\n\n $light-color: round(\n (\n (color.red(#ffffff) * 299) +\n (color.green(#ffffff) * 587) +\n (color.blue(#ffffff) * 114)\n ) / 1000\n );\n\n @if abs($color-brightness) < calc($light-color / 2){\n @return $light;\n } @else {\n @return $dark;\n }\n}\n\n// @debug \"text-contrast(#7b7b55) should be #ffffff: \" text-contrast(#7b7b55);\n// @debug \"text-contrast(#9b9b70) should be #000000: \" text-contrast(#9b9b70);\n// @debug \"text-contrast(#766f7a) should be #ffffff: \" text-contrast(#766f7a);\n// @debug \"text-contrast(#70909b) should be #000000: \" text-contrast(#70909b);\n//--------------------------------------------rgb(25, 25, 24)-----------------------\n"], "mappings": "+UEIE,CAAA,UAAA,CAAA,CAAA,YACE,MAAA,IAAA,yBACA,oBAAA,IAAA,yBAEF,CAJA,UAIA,CAAA,CAAA,eACE,YARW,KASX,aATW,KAUX,OAAA,IAAA,MAAA,IAAA,2BACA,iBAAA,IAAA,8BCNJ,OAAA,OAAA,IAAA,CAAA,SAAA,EAAA,QACE,OAAA,CDHA,WCIE,SAAA,SACA,YARW,OASX,MAVU,MAWV,MAVW,OAWX,MAAA,MACA,MAAA,MAIF,CAAA,YAAA,OAAA,CDbA,WCcE,SAAA,SACA,YAAA,QACA,MAAA,KACA,MAAA,EACA,MAAA,KACA,MAAA,KAGF,OAAA,CDtBA,UCsBA,CAAA,CDlBA,eCmBE,YAAA,EACA,aAAA,EACA,iBAAA,IAAA,8BACA,QAAA,KCjBJ,CAAA,SACE,WAAA,KAGF,CAAA,aACE,WAAA,KACA,YAAA,IAAA,kBAGF,CAAA,QAAA,CAAA,QAEE,OAAA,IAAA,MAAA,IAAA,6BACA,IAAA,KACA,WAAA,YACA,EA1BA,YAAA,IAAA,kBACA,WAAA,IAAA,mBACA,UAAA,OACA,YAAA,IA2BF,CAAA,YACE,YAAA,IAAA,kBACA,YAAA,IACA,MAAA,IAAA,mBACA,WAAA,IAAA,0BACA,OAAA,IAAA,MAAA,UAAA,GAAA,KAAA,CAAA,IAAA,0BAAA,GAAA,CAAA,oBACA,KACA,QAAA,aACA,WAAA,KACA,UAAA,KACA,eAAA,OAjCA,YAAA,eACA,QAAA,MAqCF,CAAA,MAAA,CAAA,aACE,YAAA,KAIF,CAAA,WACE,YAAA,IAAA,MAAA,aACA,EAAA,KAAA,IACA,WAAA,KAEA,WAAA,EACA,cAAA,EAxDA,YAAA,IAAA,kBACA,WAAA,IAAA,mBACA,UAAA,OACA,YAAA,IAyDF,CAVA,UAUA,QACE,QAAA,IACA,UAAA,IACA,WAAA,IAAA,MAAA,KACA,QAAA,MACA,aAAA,KACA,YAAA,MACA,MAAA,IAKF,CAxDA,oBAyDE,KAAA,EAIF,CAAA,aAAA,KAAA,CA7DA,qBA8DE,MAAA,EAEA,CAHF,aAGE,KAAA,CAhEF,cAgEE,CAhEF,oBAiEI,UACA,MAAA,EAKJ,CAVA,cAWE,SAAA,SACA,QAAA,UAEA,CAdF,cAcE,CAAA,UACE,SAAA,SACA,MAAA,EACA,IAAA,EACA,QAAA,IACA,aAAA,EACA,WAAA,KACA,OAAA,QACA,QAAA,EACA,qBAAA,iBACA,IACA,MAAA,IAEA,CA3BJ,cA2BI,CAbF,SAaE,OACE,QAAA,GAGF,CA/BJ,cA+BI,CAjBF,UAiBE,CAAA,UACE,QAAA,KAGF,CAnCJ,cAmCI,CArBF,SAqBE,CAAA,OACE,QAAA,EACA,MAAA,QACA,OAAA,YACA,eAAA,KAEA,CAzCN,cAyCM,CA3BJ,SA2BI,CANF,OAME,CAAA,SACE,QAAA,KAGF,CA7CN,cA6CM,CA/BJ,SA+BI,CAVF,OAUE,CAdF,UAeI,QAAA,OAMR,OAAA,MACE,CAvCA,UAwCE,QAAA,MClIJ,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OACE,QAAA,KACA,UAAA,KACA,gBAAA,MAME,CATJ,KASI,CAAA,CAAA,cAIE,UAAA,KAAA,IAAA,EAAA,KACA,MAAA,YACA,aAR2B,IAE7B,CATJ,KASI,CAAA,CAAA,cAIE,UAAA,KAAA,eAAA,EAAA,KACA,MAAA,YACA,aAR2B,IAE7B,CATJ,KASI,CAAA,CAAA,cAIE,UAAA,KAAA,IAAA,EAAA,KACA,MAAA,YACA,aAR2B,IAE7B,CATJ,KASI,CAAA,CAAA,cAIE,UAAA,KAAA,IAAA,EAAA,KACA,MAAA,YACA,aAR2B,IAE7B,CATJ,KASI,CAAA,CAAA,cAIE,UAAA,KAAA,eAAA,EAAA,KACA,MAAA,YACA,aAR2B,ICJjC,CDMI,aCNJ,CAAA,CAAA,QAEE,UAAA,QAKA,CAAA,cAAA,CDDE,cCEA,WAAA,IAGF,CAJA,aAIA,CAAA,CAXF,QAYI,UAAA,MACA,YAAA,OACA,WAAA,MACA,QAAA,OAEA,CAVF,aAUE,CAAA,CAjBJ,OAiBI,CAAA,CAAA,aACE,QAAA,OAEA,CAbJ,aAaI,CAAA,CApBN,OAoBM,CAAA,CAHF,YAGE,CAAA,CAAA,IAAA,aACE,QAAA,OAMN,CApBA,cAoBA,CAAA,wBACE,WAAA,IAGA,aAAA,KAGF,CA3BA,cA2BA,CAAA,WACE,YAAA,KAEA,CA9BF,cA8BE,CAHF,WAGE,CArCJ,QAuCM,UAAA,QAMN,CDvCI,aCuCJ,CAAA,CDvCI,aCuCJ,CAAA,KACE,YAAA,KASF,CAAA,iBAAA,KAAA,MAAA,OACE,OAAA,QACA,iBAAA,QACA,OAAA,IAAA,MAAA,KAEF,CALA,iBAKA,KAAA,MAAA,QACE,iBAAA,QAEF,CARA,iBAQA,KAAA,MAAA,CAAA,OACE,YAAA,KAGF,CAZA,iBAYA,CAZA,iBAYA,KAAA,CAZA,iBAYA,IAAA,CAAA,GAAA,aAGE,QAAA,aACA,eAAA,IACA,MAAA,KAGF,CAAA,MAAA,CApBA,iBAoBA,CAAA,MAAA,CApBA,iBAoBA,KAAA,CAAA,MAAA,CApBA,iBAoBA,IAAA,CAAA,GAAA,aAGE,MAAA,KAGF,CA1BA,gBA0BA,CAAA,CA7DM,IA6DN,aAAA,CA1EE,cA0EF,CA1BA,gBA0BA,CAAA,CA7DM,IA6DN,aAEE,WAAA,EACA,QAAA,OAOF,CA3FA,OA2FA,CAAA,CApCA,iBAqCE,QAAA,aACA,UAAA,IACA,MAAA,KAGF,CDpGA,MCoGA,CAjGA,OAiGA,CAAA,CA1CA,iBA2CE,MAAA,KCpGF,OAAA,CAAA,SAAA,CAAA,CDEA,OCFA,CAAA,CDEA,QCDE,WAAA,KAGF,OAAA,CAJA,SAIA,CAAA,EAAA,CDFA,QCEA,OAAA,CAJA,UAIA,OAAA,CAAA,EAAA,CDFA,QCIE,UAAA,MAGF,OAAA,CATA,SASA,CAAA,EAAA,CDPA,QCOA,OAAA,CATA,UASA,OAAA,CAAA,EAAA,CDPA,QCSE,UAAA,OAGF,OAAA,CAdA,SAcA,CAAA,EAAA,CDZA,QCYA,OAAA,CAdA,UAcA,OAAA,CAAA,EAAA,CDZA,QCcE,UAAA,OAGF,OAAA,CAnBA,SAmBA,CAAA,EAAA,CDjBA,QCiBA,OAAA,CAnBA,UAmBA,OAAA,CAAA,EAAA,CDjBA,QCmBE,UAAA,OCvBF,CAAA,QAAA,CAAA,CAAA,KAAA,cAEI,WAAA,MAWJ,CAAA,OACE,QAAA,KACA,mBAAA,KAAA,KAGF,CAAA,SAEE,SAAA,EAGA,CALF,QAKE,CAAA,CAAA,KAAA,CAAA,WACE,WAAA,OAEF,CARF,SAQE,CAAA,QACE,WAAA,KACA,YAAA,KACA,aAAA,KAMJ,CAAA,cACE,WAAA,MAGF,CAAA,iBACE,WAAA,OAGF,CAAA,iBACE,WAAA,IAQF,CAlCA,QAkCA,KAAA,CAAA,YAAA,CAAA,YAAA,CAlCA,QAkCA,CAAA,IAAA,CAAA,YAAA,CAAA,YAEE,QAAA,SAKF,CAzCA,QAyCA,CAAA,IAAA,CAPA,YAOA,CAPA,WAOA,CAAA,CAAA,aACE,SAAA,EACA,YAAA,MACA,WAAA,MAIF,CA/BA,aA+BA,CAAA,IAAA,CAdA,YAcA,CAdA,WAcA,CAAA,CAAA,aACE,YAAA,MACA,WAAA,MAGF,CAhCA,gBAgCA,CAAA,IAAA,CAnBA,YAmBA,CAnBA,WAmBA,CAAA,CAAA,aACE,YAAA,OACA,WAAA,OAGF,CAjCA,gBAiCA,CAAA,IAAA,CAxBA,YAwBA,CAxBA,WAwBA,CAAA,CAAA,aACE,YAAA,IACA,WAAA,IAKF,CAjEA,QAiEA,CAAA,IAAA,CA/BA,YA+BA,CA/BA,WA+BA,CAAA,CAAA,cACE,WAAA,KACA,SAAA,EACA,MAAA,KAQA,CA5EF,QA4EE,gBAAA,EACE,YAAA,EADF,CA5EF,QA4EE,gBAAA,EACE,YAAA,EADF,CA5EF,QA4EE,gBAAA,EACE,YAAA,EADF,CA5EF,QA4EE,gBAAA,EACE,YAAA,EADF,CA5EF,QA4EE,gBAAA,EACE,YAAA,EADF,CA5EF,QA4EE,gBAAA,EACE,YAAA,EADF,CA5EF,QA4EE,gBAAA,EACE,YAAA,EADF,CA5EF,QA4EE,gBAAA,EACE,YAAA,EADF,CA5EF,QA4EE,iBAAA,EACE,YAAA,GC9FF,CAAA,eAAA,CAAA,CHGF,OGHE,aACE,QAAA,OACA,YAAA,QACA,cAAA,EAEA,CALF,eAKE,CAAA,CHFJ,OGEI,YAAA,OACE,QAAA,QAOF,CAbF,eAaE,CAAA,CHVJ,OGUI,YAAA,CAAA,IAAA,CHUE,KGVF,CHUE,IGVF,CAAA,QAAA,CHOA,cGNE,QAAA,OAEA,CAhBJ,eAgBI,CAAA,CHbN,OGaM,YAAA,CAAA,IAAA,CHOA,KGPA,CHOA,IGPA,CAHF,QAGE,CHIF,aGJE,CAAA,CHOA,IGPA,aACE,QAAA,OAGF,CApBJ,eAoBI,CAAA,CHjBN,OGiBM,YAAA,CAAA,IAAA,CHGA,KGHA,CHGA,IGHA,CAPF,QAOE,CHAF,aGAE,CAAA,CHGA,IGHA,CAPF,OAOE,YAAA,CAAA,CHGA,IGHA,aACE,QAAA,OClBJ,CDHF,eCGE,CAAA,CJAJ,QIAI,OACE,QAAA,QAGF,CDPF,eCOE,CAAA,CJJJ,OIII,CAAA,CJgBE,KIfA,QAAA,OAGF,CDXF,eCWE,CAAA,CJRJ,QIQI,CAAA,MAAA,CDXF,eCWE,CAAA,CJRJ,QIQI,CAAA,WAAA,CDXF,eCWE,CAAA,CJRJ,QIQI,CAAA,OAGE,QAAA,KAGF,CDjBF,eCiBE,CAAA,CJdJ,QIcI,CAAA,IAAA,OACE,QAAA,KCZN,CAAA,kBAAA,CTJE,YSMA,OAAA,QACA,YAAA,KACA,aAAA,KACA,MAAA,IAAA,oBACA,cAAA,IAAA,OAAA,IAAA,oBAGF,CAAA,mBACE,KAAA,EAGF,OAAA,CAbA,kBAaA,OAAA,CTjBE,YSmBA,QAAA,UAAA,OAGF,CAlBA,iBAkBA,CAAA,EAAA,CTtBE,WSsBF,CAAA,EAEE,QAAA,OAGF,CAvBA,iBAuBA,IAAA,OAAA,OAAA,CAAA,OAAA,CT3BE,WS2BF,IAAA,OAAA,OAAA,CAAA,OAEE,iBAAA,IAAA,oBACA,oBAAA,YAGF,CAAA,4BACE,KAAA,EAGF,CTjCE,sBSkCA,MAAA,EACA,OAAA,IAAA,MAAA,IAAA,oCXzB4C,UWZxC,KAwCJ,iBAAA,IAAA,oBAEA,CTxCA,eSwCA,CAAA,UACE,QAAA,MACA,UAAA,IACA,WAAA,MAKJ,CThDE,eSgDF,CThDE,eSiDA,iBAAA,IAAA,6BAGF,CTpDE,eSoDF,CTpDE,eSoDF,CTpDE,eSqDA,iBAAA,IAAA,6BAGF,CTxDE,eSwDF,CTxDE,eSwDF,CTxDE,eSwDF,CTxDE,eSyDA,iBAAA,IAAA,6BAGF,CT5DE,eS4DF,CT5DE,eS4DF,CT5DE,eS4DF,CT5DE,eS4DF,CT5DE,eS6DA,iBAAA,IAAA,6BAKF,CTlEE,cSkEF,CAAA,OACE,YAAA,EACA,aAAA,ECjDA,CAAA,YAAA,CAAA,CNtBF,QMsBE,CAAA,eAAA,CAAA,CNtBF,QMsBE,CAAA,YAAA,CAAA,CNtBF,QMsBE,CAAA,YAAA,CAAA,CNtBF,QMsBE,CAAA,WAAA,CAAA,CNtBF,QMsBE,CAAA,gBAAA,CAAA,CNtBF,QMsBE,CAAA,gBAAA,CAAA,CNtBF,QMsBE,CAAA,eAAA,CAAA,CNtBF,QMuBI,QAAA,MACA,UAAA,MAIJ,CAAA,MACE,eAAA,MACA,CAFF,KAEE,OACE,QAAA,QACA,MAAA,MAGF,CAPF,MAOE,CNnCF,QMoCI,UAAA,MACA,YAAA,IACA,WAAA,OAKF,CAAA,cAAA,CN3CF,QM4CI,QAAA,OACA,WAAA,OACA,UAAA,MAKH,CAAA,UACC,OAAA,aACA,EAGF,CALC,SAKD,CAAA,CNxDA,gBM0DE,SACA,EACA,UAAA,MH/DA,CAAA,UAAA,CAAA,CHGF,OGHE,aAAA,OAAA,CAAA,CHGF,OGHE,aACE,QAAA,OACA,YAAA,QACA,cAAA,EAEA,CALF,UAKE,CAAA,CHFJ,OGEI,YAAA,OAAA,OAAA,CAAA,CHFJ,OGEI,YAAA,OACE,QAAA,QAOF,CAbF,UAaE,CAAA,CHVJ,OGUI,YAAA,CAAA,IAAA,CHUE,KGVF,CHUE,IGVF,CAAA,QAAA,CHOA,cGPA,OAAA,CAAA,CHVJ,OGUI,YAAA,CAAA,IAAA,CHUE,KGVF,CHUE,IGVF,CAAA,QAAA,CHOA,cGNE,QAAA,OAEA,CAhBJ,UAgBI,CAAA,CHbN,OGaM,YAAA,CAAA,IAAA,CHOA,KGPA,CHOA,IGPA,CAHF,QAGE,CHIF,aGJE,CAAA,CHOA,IGPA,aAAA,OAAA,CAAA,CHbN,OGaM,YAAA,CAAA,IAAA,CHOA,KGPA,CHOA,IGPA,CAHF,QAGE,CHIF,aGJE,CAAA,CHOA,IGPA,aACE,QAAA,OAGF,CApBJ,UAoBI,CAAA,CHjBN,OGiBM,YAAA,CAAA,IAAA,CHGA,KGHA,CHGA,IGHA,CAPF,QAOE,CHAF,aGAE,CAAA,CHGA,IGHA,CAPF,OAOE,YAAA,CAAA,CHGA,IGHA,aAAA,OAAA,CAAA,CHjBN,OGiBM,YAAA,CAAA,IAAA,CHGA,KGHA,CHGA,IGHA,CAPF,QAOE,CHAF,aGAE,CAAA,CHGA,IGHA,CAPF,OAOE,YAAA,CAAA,CHGA,IGHA,aACE,QAAA,OIjBR,EACE,WAAA,WAaF,eAEE,IAAA,QAAA,QAAA,CXdA,eWcA,CAAA,CAAA,KAAA,cACE,WAAA,MAIF,IAAA,QAAA,QAAA,CXnBA,eWmBA,CAAA,CPFI,IOEJ,CAAA,CPFI,KOGF,WAAA,IAKF,CAAA,YAAA,IAAA,GAAA,GAAA,GAAA,GAAA,CAAA,WAAA,CLdF,SKcE,CPRI,IOQJ,CJlBE,QIkBF,CAAA,CAAA,KAAA,cACE,WAAA,MC/BJ,EAAA,CAAA,UAAA,EAAA,CAAA,UAAA,EAAA,CAAA,UAGI,gBAAA,KAGJ,EAAA,CAAA,QACI,gBAAA,QAGJ,EAAA,CAAA,YACI,gBAAA,YAIJ,EAAA,CAAA,mBAAA,CAAA,EAAA,SACI,QAAA,IAAA,QAAA,SAAA,CAAA,aAAA,KAGJ,EAAA,CAAA,YACI,gBAAA,YAGJ,EAAA,CAAA,YACI,gBAAA,YAGJ,EAAA,CAAA,YACI,gBAAA,YAGJ,EAAA,CAAA,KACI,gBAAA,KAGJ,EAAA,CAAA,OACI,gBAAA,OAGJ,EAAA,CAAA,OACI,gBAAA,OC3BJ,EAAA,IAAA,CAAA,iBAAA,CAAA,iBACE,EAGA,EAAA,IAAA,CAJF,iBAIE,CAJF,UAIE,GACE,YAAA,IACA,UAAA,KAGF,EAAA,IAAA,CATF,iBASE,CATF,UASE,EAAA,OACE,QAAA,GACA,QAAA,MACA,MAAA,KAIJ,CTPM,ISON,CAAA,EAAA,IAAA,CAhBA,kBAkBE,WAAA,KACA,cAAA,KAIA,EAAA,CAvBF,SAuBE,GACE,WAAA,OAEA,EAAA,CA1BJ,SA0BI,EAAA,eACE,WAAA,EAIJ,EAAA,CA/BF,SA+BE,GACE,YAAA,IAMF,EAAA,CAtCF,iBAsCE,GAAA,EAAA,CAtCF,iBAsCE,GAEE,WAAA,IAEA,EAAA,CA1CJ,iBA0CI,EAAA,eAAA,EAAA,CA1CJ,iBA0CI,EAAA,eACE,WAAA,EAIJ,EAAA,CA/CF,iBA+CE,GACE,MAAA,KACA,MAAA,KACA,WAAA,MACA,MAAA,KACA,aAAA,IAGF,EAAA,CAvDF,iBAuDE,GACE,YAAA,KAIA,EAAA,CA5DJ,gBA4DI,CAAA,OAAA,GACE,MAAA,KAGF,EAAA,CAhEJ,gBAgEI,CAJA,OAIA,GACE,YAAA,KAKF,EAAA,CAtEJ,gBAsEI,CAAA,KAAA,GACE,MAAA,KAGF,EAAA,CA1EJ,gBA0EI,CAJA,KAIA,GACE,YAAA,KAKN,EAAA,CAhFA,iBAgFA,EAAA,eACE,MAAA,KAGF,CApFA,gBAoFA,CAAA,EACE,MAAA,KAIF,EAAA,CAzFA,iBAyFA,GAAA,GACE,MAAA,IAGF,EAAA,CA7FA,iBA6FA,GAAA,GACE,YAAA,KAGF,EAAA,CAjGA,iBAiGA,GAAA,GACE,YAAA,KAIF,OAAA,OAAA,IAAA,CAAA,SAAA,EAAA,OACE,EAAA,CAvGF,iBAuGE,GACE,MAAA,KACA,YAAA,EACA,WAAA,KAGF,EAAA,CA7GF,iBA6GE,GAAA,EAAA,CA7GF,gBA6GE,CAjDE,OAiDF,GAAA,EAAA,CA7GF,gBA6GE,CAvCE,KAuCF,GAGE,WAAA,KACA,YAAA,IACA,UAAA,KAAA,KAAA,EAAA,MVvHA,CATJ,KASI,CAAA,GAIE,UAAA,KAAA,IAAA,EAAA,KACA,MAAA,YACA,aAR2B,IAE7B,CATJ,KASI,CAAA,GAIE,UAAA,KAAA,eAAA,EAAA,KACA,MAAA,YACA,aAR2B,IAE7B,CATJ,KASI,CAAA,GAIE,UAAA,KAAA,IAAA,EAAA,KACA,MAAA,YACA,aAR2B,IAE7B,CATJ,KASI,CAAA,GAIE,UAAA,KAAA,IAAA,EAAA,KACA,MAAA,YACA,aAR2B,IAE7B,CATJ,KASI,CAAA,GAIE,UAAA,KAAA,eAAA,EAAA,KACA,MAAA,YACA,aAR2B,IWW/B,CHaA,YGbA,GACE,WAAA,KAOA,CHKF,YGLE,GAAA,CAAA,kBACE,UAAA,KACA,YAAA,IACA,WAAA,OAKN,CVXM,IUWN,CAAA,IAAA,GAAA,IAEE,WAAA,KACA,cAAA,KAIF,EAAA,CAAA,GACE,aAAA,MC3CF,CAAA,OACE,QAAA,aACA,OAAA,KACA,aAAA,IACA,aAAA,KACA,YAAA,KACA,cAAA,OAEA,CARF,MAQE,CAAA,UACE,oBAAA,MACA,aAAA,IAGF,CAbF,MAaE,CAAA,IACE,QAAA,IAAA,MAAA,IAAA,mBACA,OAAA,MAGF,CAlBF,MAkBE,CAAA,MACE,iBAAA,IAAA,yBAAA,EAAA,MACA,OAAA,MAKJ,KAAA,CAAA,UACE,2BAAA,KCtBF,CZAA,OYAA,IAAA,GAAA,GAAA,GAAA,GAAA,GAAA,WACE,EACA,UAAA,MAGF,CZLA,QYME,YAAA,IACA,YAAA,IAAA,iBACA,YAAA,IACA,WAAA,EACA,cAAA,EAGF,OAAA,CAAA,CZbA,QYcE,UAAA,OACA,MAAA,IAAA,oBACA,YAAA,OACA,WAAA,MACA,cAAA,KAGA,OAAA,CAAA,CZrBF,OYqBE,CAAA,EACE,WAAA,KAIJ,CLEE,WKFF,CAAA,OAAA,CAAA,CZ1BA,QY4BE,WAAA,KAGF,QAAA,OAAA,CAAA,CZ/BA,QYgCE,UAAA,MACA,WAAA,IAGF,QAAA,QAAA,OAAA,CAAA,CZpCA,QYqCE,UAAA,MACA,WAAA,IAIF,OAAA,CAAA,CZ1CA,QY2CE,UAAA,OACA,WAAA,MAGA,OAAA,CAAA,CZ/CF,OY+CE,CAAA,EACE,WAAA,KAIJ,CTvDE,USuDF,CAAA,CZpDA,QYqDE,UAAA,QAIF,IAAA,QAAA,QAAA,CAAA,CZzDA,OYyDA,CAAA,IAAA,QAAA,QAAA,CAAA,CZzDA,QY0DE,WAAA,KAIF,OAAA,OAAA,IAAA,CAAA,SAAA,EAAA,OACE,OAAA,CAAA,CZ/DF,QYgEM,UAAA,MACA,YAAA,OACA,WAAA,IAEJ,QAAA,OAAA,CAAA,CZpEF,QYqEM,UAAA,MACA,YAAA,OAEJ,QAAA,QAAA,OAAA,CAAA,CZxEF,QYyEM,UAAA,OACA,YAAA,KAIN,CZ9EA,OY8EA,CAAA,SAAA,CAAA,CRhEI,KQiEF,QAAA,KClFF,EACE,MAAA,IAAA,mBACA,gBAAA,KAEA,CAAA,OAAA,CAAA,OAEE,gBAAA,KAKJ,CAAA,CAAA,iBACE,YAAA,IAMA,CNaA,YMbA,CAAA,CAAA,SACE,MAAA,IAAA,mBACA,YAAA,IAEF,CNSA,YMTA,CAAA,CAAA,SACE,MAAA,IAAA,uBACA,YAAA,IAEF,CNKA,YMLA,CAAA,CARA,QAQA,OAAA,CNKA,YMLA,CAAA,CARA,QAQA,OAAA,EAAA,CNKA,YMLA,CAAA,CARA,QAQA,OAAA,CNKA,YMLA,CAAA,CARA,QAQA,OAAA,EAEE,MAAA,IAAA,0BACA,iBAAA,IAAA,0BACA,YAAA,IAEF,CNDA,YMCA,CAAA,CAVA,QAUA,OAAA,CNDA,YMCA,CAAA,CAVA,QAUA,OAAA,EAAA,CNDA,YMCA,CAAA,CAVA,QAUA,OAAA,CNDA,YMCA,CAAA,CAVA,QAUA,OAAA,EAEE,MAAA,IAAA,8BACA,iBAAA,IAAA,8BACA,YAAA,ICpCF,CP+BA,YO/BA,MACE,eAAA,EACA,gBAAA,SAGF,CP0BA,YO1BA,WACE,IAAA,IACA,UAAA,IAEA,CPsBF,YOtBE,GAAA,IACE,UAAA,MACA,aAAA,KAIJ,CPgBA,YOhBA,WACE,IAAA,IAME,CPSJ,YOTI,GAAA,CAAA,MACE,YAAA,OAKA,CPGN,YOHM,EAAA,CAAA,EACE,WAFoB,KACtB,CPGN,YOHM,EAAA,CAAA,EACE,WAFoB,OACtB,CPGN,YOHM,EAAA,CAAA,EACE,WAFoB,MACtB,CPGN,YOHM,EAAA,CAAA,EACE,WAFoB,QAQtB,CPJN,YOIM,EAAA,CAAA,EACE,eAFoB,IACtB,CPJN,YOIM,EAAA,CAAA,EACE,eAFoB,OACtB,CPJN,YOIM,EAAA,CAAA,EACE,eAFoB,OASpB,CPZR,YOYQ,EAAA,CAAA,GAEI,YAAA,KAFJ,CPZR,YOYQ,EAAA,CAAA,GAMI,YAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,YAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,YAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAEI,aAAA,KAFJ,CPZR,YOYQ,EAAA,CAAA,GAMI,aAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,aAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,aAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAEI,WAAA,KAFJ,CPZR,YOYQ,EAAA,CAAA,GAMI,WAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,WAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,WAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAEI,cAAA,KAFJ,CPZR,YOYQ,EAAA,CAAA,GAMI,cAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,cAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,cAAA,IAAA,MAAA,IAAA,mBA3BR,CPSJ,YOTI,GAAA,CAAA,MACE,YAAA,OAKA,CPGN,YOHM,EAAA,CAAA,EACE,WAFoB,KACtB,CPGN,YOHM,EAAA,CAAA,EACE,WAFoB,OACtB,CPGN,YOHM,EAAA,CAAA,EACE,WAFoB,MACtB,CPGN,YOHM,EAAA,CAAA,EACE,WAFoB,QAQtB,CPJN,YOIM,EAAA,CAAA,EACE,eAFoB,IACtB,CPJN,YOIM,EAAA,CAAA,EACE,eAFoB,OACtB,CPJN,YOIM,EAAA,CAAA,EACE,eAFoB,OASpB,CPZR,YOYQ,EAAA,CAAA,GAEI,YAAA,KAFJ,CPZR,YOYQ,EAAA,CAAA,GAMI,YAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,YAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,YAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAEI,aAAA,KAFJ,CPZR,YOYQ,EAAA,CAAA,GAMI,aAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,aAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,aAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAEI,WAAA,KAFJ,CPZR,YOYQ,EAAA,CAAA,GAMI,WAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,WAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,WAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAEI,cAAA,KAFJ,CPZR,YOYQ,EAAA,CAAA,GAMI,cAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,cAAA,IAAA,MAAA,IAAA,mBANJ,CPZR,YOYQ,EAAA,CAAA,GAMI,cAAA,IAAA,MAAA,IAAA,mBAUZ,CP5BA,YO4BA,EAAA,CAhBQ,EAgBR,CAhBQ,GAgBR,CP5BA,YO4BA,EAAA,CAhBQ,EAgBR,CAhBQ,GAkBN,aAAA,KACA,cAAA,KAIA,CPnCF,YOmCE,EAAA,CAAA,gBAAA,GACE,aAAA,YACA,aAAA,IAKF,CP1CF,YO0CE,CAAA,OAAA,MACE,WAAA,OACA,YAAA,KACA,aAAA,KAON,CAAA,YACE,WAAA,KACA,WAAA,KAGF,CALA,WAKA,CAAA,cAAA,MACE,YAAA,KACA,aAAA,KAOE,KAAA,CAAA,cAAA,GAAA,GACE,WAAA,KACA,YAAA,IAGF,KAAA,CALA,cAKA,GAAA,GACE,WAAA,KACA,eAAA,ICrGJ,CAAA,WAAA,CAAA,CfAF,QeCI,QAAA,MACA,WAAA,OAGF,CALA,WAKA,CAAA,CfLF,QeKE,CAAA,MAAA,CALA,YAKA,CAAA,IAAA,CAAA,CfLF,QeKE,CAAA,MAEE,UAAA,MAGF,CAVA,WAUA,CAAA,CfVF,QeUE,CAAA,SAAA,CAVA,YAUA,CALA,IAKA,CAAA,CfVF,QeUE,CAAA,SAEE,QAAA,MACA,YAAA,IACA,MAAA,IAAA,gBACA,UAAA,OACA,YAAA,UACA,WAAA,SAGF,CApBA,WAoBA,CAAA,CfAI,IeAJ,eACE,WAAA,IAGF,CAxBA,WAwBA,CAAA,CAAA,OAAA,CAxBA,WAwBA,CAAA,CAAA,OAEE,WAAA,IACA,WAAA,OAGF,CA9BA,YA8BA,CANA,MAMA,eACE,WAAA,IAGF,CAlCA,WAkCA,CAAA,CAVA,OAUA,CAAA,YACE,UAAA,KAGF,CAtCA,YAsCA,CAAA,KACE,QAAA,MACA,WAAA,IACA,WAAA,OAGF,CA5CA,YA4CA,CApBA,OAoBA,CAvCA,MAwCE,UAAA,IAGF,CAhDA,YAgDA,CAxBA,OAwBA,CAxBA,OAyBE,UAAA,KACA,WAAA,MAGF,CArDA,YAqDA,CAAA,YACE,UAAA,IAGF,CAzDA,YAyDA,CAAA,cACE,WAAA,IAGF,CA7DA,YA6DA,CAAA,gBACE,IAAA,IAGF,CAjEA,YAiEA,CAAA,SAAA,CAjEA,YAiEA,CAAA,QACE,WAAA,IAIA,CAtEF,YAsEE,CATF,QASE,CAAA,CAjEF,MAiEE,CAtEF,YAsEE,CALF,QAKE,CAAA,CAjEF,MAiEE,CAtEF,YAsEE,CALF,OAKE,CAAA,CAjEF,MAkEI,UAAA,QACA,YAAA,IACA,YAAA,QACA,QAAA,OAGF,CA7EF,YA6EE,CAhBF,QAgBE,CAAA,CAxEF,KAwEE,OAAA,CA7EF,YA6EE,CAZF,QAYE,CAAA,CAxEF,KAwEE,OAAA,CA7EF,YA6EE,CAZF,OAYE,CAAA,CAxEF,KAwEE,OACE,QAAA,mBAGF,CAjFF,YAiFE,CApBF,QAoBE,CAAA,CA5EF,KA4EE,CAAA,Cf7DE,Ke6DF,CAjFF,YAiFE,CAhBF,QAgBE,CAAA,CA5EF,KA4EE,CAAA,Cf7DE,Ke6DF,CAjFF,YAiFE,CAhBF,OAgBE,CAAA,CA5EF,KA4EE,CAAA,Cf7DE,Ke8DA,QAAA,OAKF,CAvFF,YAuFE,CAAA,SAAA,CAAA,UAIA,CA3FF,YA2FE,CAJA,SAIA,CAAA,QAHE,WAAA,MC1FN,CT8BE,YS9BF,CD2DE,cC1DA,YAAA,IAAA,iBACA,QAAA,MACA,WAAA,IAEA,CTyBA,YSzBA,CDsDA,cCtDA,EACE,MAAA,IAAA,2BACA,WAAA,IAAA,2BACA,UAAA,MACA,YAAA,eACA,KACA,KADA,KAAA,mBAEA,IACA,SAAA,SACA,QAAA,MACA,YAAA,MAEA,CTaF,YSbE,CD0CF,cC1CE,EAAA,CDVF,MCWI,WAAA,OAGF,CTSF,YSTE,CDsCF,cCtCE,EAAA,CZXA,WYYE,aAAA,SAGF,CTKF,YSLE,CDkCF,cClCE,CAAA,OAEE,MAAA,SACA,QAAA,GACA,SAAA,SACA,IAAA,IACA,WAAA,MACA,MAAA,EACA,OAAA,EACA,WAAA,KAAA,MAAA,YACA,cAAA,KAAA,MAAA,YACA,YAAA,KAAA,MAAA,IAAA,2BAGF,CTTF,YSSE,CDoBF,cCpBE,CAAA,OAKE,CTdJ,YScI,CDeJ,cCfI,CAAA,OAAA,EAJA,MAAA,IAAA,iCACA,WAAA,IAAA,iCAOA,CTlBJ,YSkBI,CDWJ,cCXI,CAAA,OAAA,CDzCJ,MC0CM,YAAA,IAGF,CTtBJ,YSsBI,CDOJ,cCPI,CAAA,MAAA,OACE,YAAA,KAAA,MAAA,IAAA,iCAKN,CT5BA,YS4BA,CDCA,cCDA,GACI,gBAAA,aACA,EACA,WAAA,EAGJ,CTlCA,YSkCA,CDLA,cCKA,GACI,WAAA,IAIN,OAAA,OAAA,IAAA,CAAA,MAAA,CAAA,EAAA,OACE,CTxCA,YSwCA,CDXA,cCWA,EAEE,UAAA,KACA,YAAA,QC1EJ,CAAA,aACE,QAAA,aACA,SAAA,SAGF,CALA,YAKA,CAAA,MACE,QAAA,SAIF,CAVA,YAUA,CAAA,MAAA,CAAA,oBAAA,QACE,UAAA,QACA,QAAA,MACA,WAAA,QACA,eAAA,MAGF,CAjBA,YAiBA,CAAA,MAAA,CAPA,qBAOA,IACE,QAAA,KAGF,CAXA,qBAYE,QAAA,aACA,OAAA,QACA,UAAA,IAGF,CAjBA,oBAiBA,SACE,QAAA,GAGF,CAAA,uBACE,QAAA,MACA,WAAA,OACA,WAAA,IAAA,kCApCc,UAsCd,WACA,IAAA,KACA,MAAA,YACA,UAAA,KAAA,KAAA,EAAA,MACA,OAAA,IAAA,MAAA,IAAA,sBAGA,MAAA,IAAA,mBACA,YAAA,IACA,UAAA,IAAA,MCzCF,CAAA,OAAA,CAAA,SACE,SAAA,SACA,IAAA,KACA,MAAA,EAGF,CAAA,QACE,MAAA,KACA,YAAA,KACA,aAAA,IAIF,CAAA,UACE,YAAA,MACA,WAAA,KACA,YAAA,EACA,MAAA,KACA,YAAA,IAGF,CARA,UAQA,EACE,aAAA,MACA,cAAA,KACA,MAAA,MAKA,aAAA,KACA,MAAA,QACA,UAAA,IACA,WAAA,OAEF,CArBA,UAqBA,CAAA,OACE,QAAA,GACA,QAAA,aAEF,CAzBA,UAyBA,CAAA,iBACE,aAAA,MAEF,CA5BA,UA4BA,CAAA,YACE,cAAA,KAGF,CAhCA,UAgCA,CAAA,OACE,WAAA,IAAA,wBAGF,CAAA,UACE,WAAA,IAGF,CAAA,aACE,YAAA,IACA,UAAA,IACA,WAAA,KAGF,CAAA,gBACE,YAAA,MACA,UAAA,IACA,WAAA,KAGF,CAAA,WACE,YAAA,MAEF,EAAA,CAAA,CAHA,WAIE,YAAA,OAEF,CANA,WAMA,EACE,YAAA,IAGF,CA1BA,UA0BA,CAAA,IAAA,CAtBA,aAsBA,CAAA,IAAA,CAhBA,gBAgBA,CAAA,IAMA,CAhCA,UAgCA,CAAA,QAAA,CA5BA,aA4BA,CAAA,QAAA,CAtBA,gBAsBA,CAAA,QAHE,YAAA,IACA,aAAA,EAQF,CAtCA,UAsCA,CAZA,IAYA,GAAA,CAlCA,aAkCA,CAZA,IAYA,GAAA,CA5BA,gBA4BA,CAZA,IAYA,GAAA,CAtCA,UAsCA,CANA,QAMA,GAAA,CAlCA,aAkCA,CANA,QAMA,GAAA,CA5BA,gBA4BA,CANA,QAMA,GAME,aAAA,MACA,WAAA,OAGF,CAhDA,UAgDA,CAtBA,GAsBA,CAAA,CAtBA,IAsBA,CA5CA,aA4CA,CAtBA,GAsBA,CAAA,CAtBA,IAsBA,CAtCA,gBAsCA,CAtBA,GAsBA,CAAA,CAtBA,IAsBA,CAhDA,UAgDA,CAhBA,OAgBA,CAAA,CAhBA,QAgBA,CA5CA,aA4CA,CAhBA,OAgBA,CAAA,CAhBA,QAgBA,CAtCA,gBAsCA,CAhBA,OAgBA,CAAA,CAhBA,QAsBG,YAAA,EACA,aAAA,EAGH,CA1DA,UA0DA,CA1CA,WA2CE,UAAA,IAGF,CA9DA,UA8DA,CAAA,YAAA,CA1DA,aA0DA,CAAA,YAAA,CA9DA,UA8DA,CAAA,WAAA,OACE,cAAA,IACA,aAAA,IAEF,CAlDA,WAkDA,CAAA,WAAA,OAAA,CAlDA,WAkDA,CAAA,MAAA,CAAA,YACE,YAAA,IAGF,CAlEA,aAkEA,CAtDA,WAyDA,CA/DA,gBA+DA,CAzDA,WAuDE,UAAA,IAMF,CAAA,YACE,WAAA,MCnIF,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,cAII,SAAA,SAGJ,CAPA,UAOA,CAPA,cAOA,MAAA,CAAA,UAAA,MAAA,CAAA,UAAA,CAPA,UAOA,CAAA,MAAA,CAPA,UAOA,CAAA,aAII,SAAA,SAAoB,IAAA,EAAQ,KAAA,EAAS,MAAA,KAAa,OAAA,KAItD,CAfA,UAeA,IAAA,GAAA,CAAA,UAEI,MAAA,KAKJ,CZSE,YYTF,IAAA,CZSE,YYTF,IAGE,WAAA,IAAA,gBAGF,CAAA,OAAA,CAAA,IACE,WAAA,KAIA,CAAA,kBAAA,QACE,WAAA,KACA,OAAA,QAKJ,CAAA,qBACE,MAAA,KAAA,EACA,YAAA,IAAA,kBACA,gBAAA,OACA,QAAA,KACA,IAAA,KAKF,CAlDA,SAkDA,CAAA,GAAA,KAAA,CAAA,WACE,OAAA,QAGF,GAAA,CAJA,UAKE,OAAA,IAAA,MAAA,KACA,WAAA,IAAA,IAAA,IAAA,KACA,OAAA,SAGF,CAAA,oBACE,MAAA,KACA,SAAA,SACA,QAAA,KACA,WAAA,QAKF,CAAA,MACI,MAAA,KAGJ,CAlEA,aAmEI,OAAA,QC5EJ,OACE,MAAA,KACA,SAAA,SAGA,YAAA,EACA,aAAA,EAGF,WACE,YAAA,KACA,aAAA,KACA,WAAA,KAEA,WAAA,IAAA,CtBiBF,YsBhBI,YAAA,IAGF,WAAA,ChBLE,WgBKF,WAAA,ChBCE,KgBCA,YAAA,IAIF,WAAA,ChBXE,UgBWF,OAAA,WAAA,ChBLE,IgBKF,aAAA,OAEE,QAAA,QAIF,WAAA,CpBLI,IoBKJ,eACE,QAAA,OAKJ,MAAA,ClBiBA,WkBhBE,YAAA,KACA,aAAA,KAGA,MAAA,ClBYF,WkBZE,CAAA,KACE,aAAA,EAIJ,OAAA,CAAA,UAAA,CAAA,EAAA,OACE,ClBMF,YkBLI,WAAA,MC/CJ,CAAA,KACE,QAAA,aACA,EAAA,KACA,MAAA,KACA,UAAA,IAGF,CAPA,IAOA,CAAA,CrBHA,QqBIE,QAAA,MACA,WAAA,OAGF,QAAA,OAAA,CAZA,IAYA,CAAA,CrBRA,OqBQA,OACE,QAAA,GAGF,CAhBA,IAgBA,CAAA,CrBZA,OqBYA,CAAA,CNPE,MMQA,YAAA,IACA,UAAA,MACA,YAAA,MAGF,CAtBA,KAsBA,CNME,OMLA,WAAA,OACA,WAAA,MAGF,CA3BA,KA2BA,CNCE,MMDF,CAAA,KACE,WAAA,KAGF,CA/BA,KA+BA,CNHE,MMGF,CP2CI,OO1CF,WAAA,OAGF,CAnCA,KAmCA,CNPE,MMOF,CAAA,MACE,WAAA,MAGF,CAvCA,KAuCA,CAAA,MAAA,CAAA,CrBnCA,QqBoCE,WAAA,OACA,YAAA,IACA,UAAA,IACA,YAAA,IAGF,CA9CA,KA8CA,CAPA,MAOA,CAAA,CAPA,OAQE,WAAA,IAGF,CAlDA,KAkDA,CrB9CA,OqB8CA,CAAA,CAXA,OAYE,WAAA,KAGF,CAtDA,KAsDA,CrBlDA,OqBkDA,CAAA,CAAA,KACE,WAAA,KAGF,CA1DA,KA0DA,CAJA,IAIA,CA/BA,KAgCE,WAAA,KACA,YAAA,IACA,YAAA,KAGF,CAhEA,KAgEA,CAVA,IAUA,CPUI,OOTF,WAAA,OAGF,CApEA,KAoEA,CAdA,IAcA,CAjCA,MAkCE,WAAA,MAGF,CAxEA,KAwEA,CAAA,IACE,YAAA,ICnEF,GAAA,CAAA,yBACE,EACA,SAAA,KACA,OAAA,IAAA,MAAA,QAIF,KAAA,IAAA,CAAA,IAAA,CAAA,0BACE,mBACA,KACA,YAAA,OAGF,IAAA,CAAA,kBAAA,GAAA,CAAA,kBAEE,MAAA,KACA,WAAA,QACA,YAAA,KACA,YAAA,IAAA,kBACA,WAAA,KACA,YAAA,IACA,aAAA,OACA,WAAA,OACA,UAAA,OACA,YAAA,IACA,SAAA,EACA,QAAA,KAEA,IAAA,CAAA,iBAAA,CxBJF,YwBIE,GAAA,CAAA,iBAAA,CxBJF,YAvBE,YAAA,eACA,QAAA,MwB+BA,IAAA,CAAA,iBAAA,YAAA,IAAA,CAAA,kBAAA,YAAA,GAAA,CAAA,iBAAA,YAAA,GAAA,CAAA,kBAAA,YAEE,WAAA,QAKA,IAAA,CAAA,kBAAA,CAAA,KAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,QAAA,CAAA,OAAA,GAAA,CAAA,kBAAA,CAAA,KAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,QAAA,CAAA,OAIE,MAAA,QAGF,IAAA,CAAA,kBAAA,CAPA,KAOA,CAAA,YAAA,GAAA,CAAA,kBAAA,CAPA,KAOA,CAAA,YACE,MAAA,KAGF,IAAA,CAAA,kBAAA,CAXA,KAWA,CAAA,UAAA,GAAA,CAAA,kBAAA,CAXA,KAWA,CAAA,UACE,QAAA,GAGF,IAAA,CAAA,kBAAA,CAfA,KAeA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAAA,OAAA,CAAA,SAAA,GAAA,CAAA,kBAAA,CAfA,KAeA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAAA,OAAA,CAAA,SAOE,MAAA,QAGF,IAAA,CAAA,kBAAA,CAzBA,KAyBA,IAAA,CAAA,SAAA,CAAA,UAAA,CAAA,OAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,GAAA,CAAA,kBAAA,CAzBA,KAyBA,IAAA,CAAA,SAAA,CAAA,UAAA,CAAA,OAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAOE,MAAA,KAGF,IAAA,CAAA,kBAAA,CAnCA,KAmCA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,KAAA,GAAA,CAAA,kBAAA,CAnCA,KAmCA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,KAGE,MAAA,KACA,WAAA,KAGF,IAAA,CAAA,kBAAA,CA1CA,KA0CA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,GAAA,CAAA,kBAAA,CA1CA,KA0CA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAGE,MAAA,QAGF,IAAA,CAAA,kBAAA,CAhDA,KAgDA,CAAA,SAAA,IAAA,CAAA,kBAAA,CAhDA,KAgDA,CAAA,WAAA,GAAA,CAAA,kBAAA,CAhDA,KAgDA,CAAA,SAAA,GAAA,CAAA,kBAAA,CAhDA,KAgDA,CAAA,WAEE,MAAA,KAGF,IAAA,CAAA,kBAAA,CArDA,KAqDA,CAAA,UAAA,IAAA,CAAA,kBAAA,CArDA,KAqDA,CAAA,SAAA,GAAA,CAAA,kBAAA,CArDA,KAqDA,CAAA,UAAA,GAAA,CAAA,kBAAA,CArDA,KAqDA,CAAA,SAEE,MAAA,KAIF,IAAA,CAAA,kBAAA,CA3DA,KA2DA,CANA,UAMA,IAAA,CAAA,kBAAA,CA3DA,KA2DA,CAAA,KAAA,GAAA,CAAA,kBAAA,CA3DA,KA2DA,CANA,UAMA,GAAA,CAAA,kBAAA,CA3DA,KA2DA,CAAA,KAEE,YAAA,IAGF,IAAA,CAAA,kBAAA,CAhEA,KAgEA,CAAA,OAAA,GAAA,CAAA,kBAAA,CAhEA,KAgEA,CAAA,OACE,WAAA,OAGF,IAAA,CAAA,kBAAA,CApEA,KAoEA,CAjCA,OAiCA,GAAA,CAAA,kBAAA,CApEA,KAoEA,CAjCA,OAkCE,OAAA,KAMJ,IAAA,CAAA,iBAAA,CAAA,aAAA,GAAA,CAAA,iBAAA,CAAA,aACE,SAAA,SACA,aAAA,MACA,cAAA,WACA,SAAA,KAEA,IAAA,CAAA,iBAAA,CANF,YAME,CAAA,KAAA,GAAA,CAAA,iBAAA,CANF,YAME,CAAA,KACE,SAAA,SACA,YAAA,QAGF,IAAA,CAAA,iBAAA,CAXF,aAWE,CAAA,kBAAA,GAAA,CAAA,iBAAA,CAXF,aAWE,CAAA,kBACE,SAAA,SACA,eAAA,KACA,IAAA,EACA,UAAA,KACA,KAAA,OACA,MAAA,IACA,eAAA,KACA,aAAA,IAAA,MAAA,KACA,YAAA,KAGF,IAAA,CAAA,iBAAA,CAvBF,aAuBE,CAZA,iBAYA,CAAA,KAAA,GAAA,CAAA,iBAAA,CAvBF,aAuBE,CAZA,iBAYA,CAAA,KACE,QAAA,MACA,kBAAA,WAGF,IAAA,CAAA,iBAAA,CA5BF,aA4BE,CAjBA,iBAiBA,CAAA,IAAA,QAAA,GAAA,CAAA,iBAAA,CA5BF,aA4BE,CAjBA,iBAiBA,CAAA,IAAA,QACE,QAAA,QAAA,YACA,MAAA,KACA,QAAA,MACA,cAAA,KACA,WAAA,MAOJ,IAAA,CAAA,kBAAA,CAAA,eAAA,GAAA,CAAA,kBAAA,CAAA,eACE,SAAA,SACA,WAAA,IACA,KAAA,EACA,MAAA,EACA,QAAA,QAAA,EACA,UAAA,QACA,WAAA,UACA,eAAA,KACA,YAAA,QACA,YAAA,IASF,KAAA,CX3JF,UW2JE,GAAA,CAAA,kBACE,OAAA,IAAA,MAAA,QAKF,KAAA,CXjKF,UWiKE,IAAA,CAAA,kBAAA,KAAA,CXjKF,UWiKE,GAAA,CAAA,kBAEE,MAAA,KACA,WAAA,QAEA,KAAA,CXtKJ,UWsKI,IAAA,CAAA,iBAAA,YAAA,KAAA,CXtKJ,UWsKI,IAAA,CAAA,kBAAA,YAAA,KAAA,CXtKJ,UWsKI,GAAA,CAAA,iBAAA,YAAA,KAAA,CXtKJ,UWsKI,GAAA,CAAA,kBAAA,YAEE,WAAA,QAIF,KAAA,CX5KJ,UW4KI,IAAA,CAAA,kBAAA,CAvJA,MAuJA,KAAA,CX5KJ,UW4KI,GAAA,CAAA,kBAAA,CAvJA,MAwJE,SAAA,SACA,QAAA,EAEA,KAAA,CXhLN,UWgLM,IAAA,CAAA,kBAAA,CA3JF,KA2JE,IAAA,CA3JF,QA2JE,CA3JF,OA2JE,CA3JF,QA2JE,CA3JF,OA2JE,KAAA,CXhLN,UWgLM,GAAA,CAAA,kBAAA,CA3JF,KA2JE,IAAA,CA3JF,QA2JE,CA3JF,OA2JE,CA3JF,QA2JE,CA3JF,OA+JI,MAAA,QAGF,KAAA,CXvLN,UWuLM,IAAA,CAAA,kBAAA,CAlKF,KAkKE,CA3JF,YA2JE,KAAA,CXvLN,UWuLM,GAAA,CAAA,kBAAA,CAlKF,KAkKE,CA3JF,YA4JI,MAAA,KACA,QAAA,EAGF,KAAA,CX5LN,UW4LM,IAAA,CAAA,kBAAA,CAvKF,KAuKE,CA5JF,UA4JE,KAAA,CX5LN,UW4LM,GAAA,CAAA,kBAAA,CAvKF,KAuKE,CA5JF,UA6JI,QAAA,GAGF,KAAA,CXhMN,UWgMM,IAAA,CAAA,kBAAA,CA3KF,KA2KE,IAAA,CA5JF,SA4JE,CA5JF,IA4JE,CA5JF,QA4JE,CA5JF,OA4JE,CA5JF,SA4JE,CA5JF,OA4JE,CA5JF,SA4JE,KAAA,CXhMN,UWgMM,GAAA,CAAA,kBAAA,CA3KF,KA2KE,IAAA,CA5JF,SA4JE,CA5JF,IA4JE,CA5JF,QA4JE,CA5JF,OA4JE,CA5JF,SA4JE,CA5JF,OA4JE,CA5JF,SAmKI,MAAA,QAGF,KAAA,CX1MN,UW0MM,IAAA,CAAA,kBAAA,CArLF,KAqLE,IAAA,CA5JF,SA4JE,CA5JF,UA4JE,CA5JF,OA4JE,CA5JF,KA4JE,CA5JF,QA4JE,CA5JF,MA4JE,CA5JF,UA4JE,KAAA,CX1MN,UW0MM,GAAA,CAAA,kBAAA,CArLF,KAqLE,IAAA,CA5JF,SA4JE,CA5JF,UA4JE,CA5JF,OA4JE,CA5JF,KA4JE,CA5JF,QA4JE,CA5JF,MA4JE,CA5JF,UAmKI,MAAA,QAGF,KAAA,CXpNN,UWoNM,IAAA,CAAA,kBAAA,CA/LF,KA+LE,IAAA,CA5JF,SA4JE,CA5JF,OA4JE,CA5JF,KA4JE,KAAA,CXpNN,UWoNM,GAAA,CAAA,kBAAA,CA/LF,KA+LE,IAAA,CA5JF,SA4JE,CA5JF,OA4JE,CA5JF,KA+JI,MAAA,KAGF,KAAA,CX1NN,UW0NM,IAAA,CAAA,kBAAA,CArMF,KAqME,IAAA,CA3JF,OA2JE,CA3JF,WA2JE,CA3JF,SA2JE,KAAA,CX1NN,UW0NM,GAAA,CAAA,kBAAA,CArMF,KAqME,IAAA,CA3JF,OA2JE,CA3JF,WA2JE,CA3JF,SA8JI,MAAA,QAGF,KAAA,CXhON,UWgOM,IAAA,CAAA,kBAAA,CA3MF,KA2ME,CA3JF,SA2JE,KAAA,CXhON,UWgOM,IAAA,CAAA,kBAAA,CA3MF,KA2ME,CA3JF,WA2JE,KAAA,CXhON,UWgOM,GAAA,CAAA,kBAAA,CA3MF,KA2ME,CA3JF,SA2JE,KAAA,CXhON,UWgOM,GAAA,CAAA,kBAAA,CA3MF,KA2ME,CA3JF,WA6JI,MAAA,QAGF,KAAA,CXrON,UWqOM,IAAA,CAAA,kBAAA,CAhNF,KAgNE,CA3JF,UA2JE,KAAA,CXrON,UWqOM,IAAA,CAAA,kBAAA,CAhNF,KAgNE,CArJF,KAqJE,KAAA,CXrON,UWqOM,GAAA,CAAA,kBAAA,CAhNF,KAgNE,CA3JF,UA2JE,KAAA,CXrON,UWqOM,GAAA,CAAA,kBAAA,CAhNF,KAgNE,CArJF,KAuJI,YAAA,IAGF,KAAA,CX1ON,UW0OM,IAAA,CAAA,kBAAA,CArNF,KAqNE,CArJF,OAqJE,KAAA,CX1ON,UW0OM,GAAA,CAAA,kBAAA,CArNF,KAqNE,CArJF,OAsJI,WAAA,OAGF,KAAA,CX9ON,UW8OM,IAAA,CAAA,kBAAA,CAzNF,KAyNE,CAtLF,OAsLE,KAAA,CX9ON,UW8OM,GAAA,CAAA,kBAAA,CAzNF,KAyNE,CAtLF,OAuLI,OAAA,KAMN,KAAA,CXrPF,UWqPE,CA7GA,eA8GE,WAAA,UACA,cAAA,IAAA,OAAA,IAAA,CAAA,CAAA,EAAA,CAAA,KACA,WAAA,IAAA,OAAA,IAAA,CAAA,CAAA,EAAA,CAAA,KACA,QAAA,EAIJ,OAAA,MAGI,IAAA,CAAA,kBAAA,CAxHF,eAwHE,GAAA,CAAA,kBAAA,CAxHF,eAyHI,aAAA,OCzRN,CAAA,YACE,WAAA,KACA,WAAA,OAGF,CALA,YAKA,aAAA,CAAA,UAAA,CAAA,qBACE,EACA,YAAA,IAGF,CAAA,aAAA,cAAA,IAGE,WAAA,KAIF,CAAA,WAAA,CAAA,SAAA,CAAA,MACE,YAAA,kBACA,WAAA,iBAKF,CvBsDA,MuBtDA,SAAA,CAAA,UAAA,SAAA,CAAA,UAEI,MAAA,iBAEJ,SAAA,UAAA,SAAA,UAEI,QAAA,OCxBJ,QAAA,QAAA,GAAA,WAAA,WAAA,GAAA,CxBIE,cwBJF,CrBNE,gBqBMF,ClBwCE,ckBxCF,CxBiBM,KwBPJ,SAAA,SAGF,CAAA,cACE,SAAA,SACA,QAAA,aACA,IAAA,KACA,KAAA,KACA,UAAA,IAEA,QAAA,IAAA,mBAAA,EAAA,GACA,WAAA,QAAA,IACA,WAAA,YAGF,EAAA,CAAA,CAZA,cAaE,KAAA,OAGF,CAhBA,aAgBA,CAAA,EACE,aAAA,KACA,cAAA,KAKF,CAAA,QAAA,CAAA,CAvBA,cAuBA,CAAA,OAAA,CAAA,CAvBA,cAuBA,CAAA,KAAA,CAAA,CAvBA,cAuBA,CAAA,OAAA,CAAA,CAvBA,cAuBA,CAAA,UAAA,CAAA,CAvBA,cAuBA,CAAA,UAAA,CAAA,CAvBA,cAuBA,CAAA,SAAA,CAAA,CAvBA,cA8BE,IAAA,MAMF,ClB9BE,ekB8BF,CAAA,CxBhCM,IwBgCN,CAAA,CApCA,cAoCA,ClB9BE,YkB8BF,CAAA,CxBhCM,IwBgCN,CAAA,CApCA,cAoCA,ClB9BE,YkB8BF,CAAA,CzB9CI,ayB8CJ,CAAA,CApCA,cAoCA,ClB9BE,YkB8BF,CAAA,CxBhCM,IwBgCN,CAAA,CApCA,cAoCA,ClB9BE,YkB8BF,CAAA,CzB9CI,ayB8CJ,CAAA,CApCA,cAoCA,ClB9BE,YkB8BF,CAAA,CzB9CI,ayB8CJ,CAAA,CxBnCI,YwBmCJ,CAAA,CxBhCM,IwBgCN,CAAA,CApCA,cAoCA,ClB9BE,YkB8BF,CAAA,CzB9CI,ayB8CJ,CAAA,CxBlBE,UwBkBF,CAAA,CxBhCM,IwBgCN,CAAA,CApCA,cAoCA,ClB9BE,WkB8BF,CAAA,CxBhCM,IwBgCN,CAAA,CApCA,cA4CE,KAAA,OAKA,CAAA,UAAA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClB3CA,YkB2CA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,CzB3DE,ayB2DF,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClBtBA,akBsBA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClB3CA,ekB2CA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClB3CA,ekB2CA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClB3CA,WkB2CA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClB3CA,YkB2CA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClB3CA,gBkB2CA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClB3CA,gBkB2CA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClB3CA,YkB2CA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,ClBrCF,KkBqCE,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,CAAA,IAAA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,EAAA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAiDE,EAAA,CAAA,CxB7CI,IwB6CJ,cAAA,CAAA,CAjDF,cAkDI,QAAA,KAGF,CAJA,UAIA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClB/CA,YkB+CA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,CzB/DE,ayB+DF,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClB1BA,akB0BA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClB/CA,ekB+CA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClB/CA,ekB+CA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClB/CA,WkB+CA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClB/CA,YkB+CA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClB/CA,gBkB+CA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClB/CA,gBkB+CA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClB/CA,YkB+CA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,ClBzCF,KkByCE,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,CAJA,IAIA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,EAAA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAqDE,EAAA,CAAA,CxBpDE,YwBoDF,CAAA,CxBjDI,IwBiDJ,cAAA,CAAA,CArDF,cAsDI,QAAA,KAOJ,CjBjDE,WiBiDF,KAAA,CA7DA,aA6DA,QAAA,CA7DA,cA8DE,QAAA,GAGF,CjBrDE,WiBqDF,KAAA,CAjEA,aAiEA,QAAA,CAjEA,aAiEA,OACE,QAAA,EAGF,CArEA,aAqEA,KAAA,CAAA,gBACE,QAAA,EAGF,CAAA,gBACE,SAAA,SACA,IAAA,KACA,KAAA,YACA,MAAA,IACA,WAAA,IAAA,sBACA,OAAA,IAAA,MAAA,IAAA,qBACA,QAAA,KAKF,QACE,kBAAA,KAEA,UAAA,YAAA,IAAA,EAGF,WAHE,YAIE,GAAK,iBAAA,IAAA,wBACL,GACE,iBAAA,QACA,QAAA,GChHN,EAAA,CAAA,MACE,YAAA,IAGF,CAAA,IACE,WAAA,MAEA,CAHF,IAGE,CAAA,QACE,QAAA,aACA,eAAA,IACA,MAAA,GACA,aAAA,EAGF,CAVF,IAUE,CAPA,OAOA,CAAA,CAAA,SACE,QAAA,aACA,MAAA,IACA,WAAA,EAMJ,CAAA,QACE,WAAA,KACA,YAAA,KACA,aAAA,KACA,UAAA,KACA,WAAA,OAIF,CAAA,YACE,WAAA,MAEA,CAHF,WAGE,aACE,WAAA,EAGF,CAPF,WAOE,CAAA,CzBlBI,KyBmBF,WAAA,IAGF,CAXF,YAWE,CAAA,iBACE,aAAA,WAGF,CAfF,YAeE,CAAA,iBACE,UAAA,IACA,WAAA,OACA,YAAA,IAMJ,CAAA,0BACE,wBACA,OAAA,CAAA,CAAA,OAAA,GAAA,CAAA,OAAA,CAAA,CAAA,OAAA,GAOF,cACE,EACA,OAAA,KAIF,CAAA,OACE,WAAA,QACA,MAAA,KACA,OAAA,IAAA,MAAA,sBACA,YACA,IAAA,IAAA,EACA,eAAA,KACA,UAAA,KACA,YAAA,EACA,WAAA,IAAA,IAAA,KACA,QAAA,aACA,aAAA,IAIF,CAAA,KAAA,CAAA,SAEI,YAAA,OACA,aAAA,OACA,aAAA,OAEA,CANJ,KAMI,IAAA,CANJ,KAMI,IAAA,CANJ,SAMI,IAAA,CANJ,SAMI,IACE,aAAA,OAKN,CAAA,YACE,WAAA,OACA,YAAA,IAKF,CAAA,WACE,UAAA,OACA,eAAA,OAIF,CAAA,SACE,WAAA,OAEA,CAHF,SAGE,CAHF,SAQA,CnBhGE,gBmBgGF,CARA,SAIM,YAAA,IAON,OAAA,CnBnGE,amBmGF,CAXA,SAYE,YAAA,IAGF,CzBzGM,KyB0GJ,YAAA,KAGF,CAAA,OACE,QAAA,eAIF,CAAA,MACE,WAAA,OAGF,CAAA,MACI,aAAA,KACA,cAAA,KACA,cAAA,IAGJ,CAAA,UACI,WAAA,QAMJ,CAAA,WAAa,YAAA,UAAA,CAAA,eAAA,CAAA,KAAA,CAAA,MAEb,CAFA,WAEA,CAAA,EAAgB,UAAA,IAAgB,eAAA,UAA2B,eAAA,KAClD,YAAA,OAAqB,aAAA,MAE9B,CALA,WAKA,CAAA,EAAgB,eAAA,MAAsB,eAAA,UAC7B,YAAA,OAAqB,aAAA,OC3J9B,OAAA,MACE,CAAA,QAAA,CAAA,aAAA,CAAA,QAAA,CAAA,WAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAAA,YAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,mBAME,QAAA,KAGF,CATA,SASA,CATA,SASA,CATA,SASA,CnBgBA,YmBfE,IAAA,gBACA,MAAA,KACA,OAAA,aACA,SACA,EAGF,CAAA,aAAA,CxBEA,QwBFA,CxB4BF,WwB5BE,CxB4BF,YwB5BE,C3BdE,c2BeA,aAAA,MAGF,C1BxBF,Q0ByBI,YAAA,MAGF,C5BFF,Y4BGI,OAAA,MACA,WAAA,MAGF,aACE,OCjCJ,C3BDA,Q2BCA,CAAA,YACE,MAAA,MACA,eAAA,OACA,C3BJF,Q2BIE,CAHF,YAGE,CAAA,WACE,YAAA,IAAA,qBACA,KAAA,KAEF,C3BRF,Q2BQE,CAPF,YAOE,CF+CF,0BE9CI,WAAA,ICXJ,CFKE,QELF,CAAA,cACE,UAAA,MACA,SAAA,SACA,MAAA,EACA,OAAA,EACA,cAAA,KAGF,CFHE,QEGF,CARA,cAQA,CAAA,IAAA,CAAA,gBAAA,CFHE,QEGF,CARA,cAQA,CAAA,IAAA,CAAA,gBAAA,MAAA,CARA,cAQA,CAAA,wBAGE,ICTA,CAAA,UAAA,CAAA,aACE,OAAA,KAGF,CAJA,UAIA,CAAA,yBACE,SAAA,MACA,IAAA,IACA,OAAA,YACA,IACA,KAAA,IAAA,IAAA,CAAA,CAAA,MAAA,EAAA,OAAA,EAAA,GACA,MAAA,KACA,UAAA,MACA,OAAA,IAAA,MAAA,IAAA,mBACA,WAAA,IAAA,kBAAA,EAAA,SACA,QAAA,KACA,QAAA,KACA,eAAA,OAGF,CAnBA,UAmBA,CAfA,yBAeA,QACE,MAAA,IACA,YAAA,KACA,aAAA,KACA,YAAA,WAGF,CA1BA,UA0BA,CAAA,wBACE,QAAA,KACA,gBAAA,cACA,YAAA,QACA,IAAA,KACA,cAAA,IACA,OAAA,KAGF,CAnCA,UAmCA,CAAA,UACE,KAAA,EAAA,EAIF,CAxCA,UAwCA,CAAA,mBCxCA,KAAA,QACA,QAAA,KACA,gBAAA,OACA,YAAA,eACA,EAAA,KACA,IAAA,KACA,WAAA,KACA,MAAA,IAAA,qBACA,iBAAA,IAAA,qBACA,aAAA,IACA,aAAA,IAAA,uBACA,aAAA,oBAhBc,EAkBd,YAAA,OACA,SAAA,OACA,cAAA,SACA,OAAA,QAGA,YAAA,KAEA,CDrBA,UCqBA,CDmBA,kBCnBA,MAAA,KAAA,CAAA,UACE,MAAA,IAAA,2BACA,iBAAA,IAAA,2BAGF,CD1BA,UC0BA,CDcA,kBCdA,eACE,QAAA,IAAA,MAAA,IAAA,qBACA,eAAA,KAGF,CD/BA,UC+BA,CDSA,kBCTA,CAVA,SAWE,QAAA,GACA,OAAA,YAGF,CDpCA,UCoCA,CDIA,kBCJA,CL6FF,OK5FI,QAAA,KAGF,CDxCA,UCwCA,CDAA,kBCAA,CAAA,KACE,MAAA,IAAA,2BACA,iBAAA,IAAA,2BDEF,CA5CA,UA4CA,CAAA,gBACE,cAAA,KAGF,CAhDA,UAgDA,CAAA,cAAA,CAAA,OACE,gBAAA,UACA,WAAA,IAAA,0BAIF,CAtDA,UAsDA,CANA,cAOE,aAAA,KACA,WAAA,EACA,WAAA,KACA,KAAA,EAAA,EACA,WAAA,IAAA,oBAAA,EAAA,OACA,OAAA,IAAA,MAAA,IAAA,mBAAA,EAAA,MAGF,CA/DA,UA+DA,CAfA,aAeA,OACE,QAAA,KAGF,CAnEA,UAmEA,CAAA,qBACE,gBAAA,KAGF,CAvEA,UAuEA,CAAA,oBACE,QAAA,KAIF,CA5EA,UA4EA,CAAA,UACE,UAAA,IACA,YAAA,IAGF,CAjFA,UAiFA,CAAA,WACE,YAAA,IAGF,CArFA,UAqFA,CAAA,cACE,YAAA,IAEF,CAxFA,UAwFA,CAAA,YACE,YAAA,IAGF,CA5FA,UA4FA,CAAA,YACE,QAAA,KACA,aAAA,KACA,YAAA,IAGF,CAlGA,UAkGA,CAAA,6BACE,WAAA,KAGF,CAtGA,UAsGA,CAAA,6BACE,WAAA,IAAA,0BAGF,CA1GA,UA0GA,CAAA,wBACE,SAAA,MACA,IAAA,EACA,WAAA,IAAA,yBAAA,EAAA,OACA,MAAA,MACA,OAAA,KACA,KAAA,EACA,QAAA,KAGF,OAAA,OAAA,IAAA,CAAA,SAAA,EAAA,OACE,CArHF,UAqHE,CAjHF,yBAkHI,OAAA,MAKN,MACE,2BAAA,MACA,0BAAA,KAAA,GAAA,EAAA,GAAA,EAAA,CAAA,EAAA,KAGF,KAAA,ClB3GA,UkB4GE,2BAAA,MACA,0BAAA,KAAA,GAAA,EAAA,GAAA,EAAA,CAAA,EAAA,KEtIF,CxBgCE,YwBhCF,CAAA,wBAAA,CAAA,UACE,OAAA,oBACA,EACA,aAAA,IAIF,CAAA,uBAAA,KAAA,CAAA,C/BiBM,K+BhBJ,QAAA,OAIF,CxBoBE,YwBpBF,CAZA,wBAYA,CAAA,YACE,UAAA,IAAA,6BACA,EAAA,KAAA,KAGF,CAjBA,UAiBA,CAAA,kBAEE,QAAA,KAKF,CxBQE,YwBRF,CAxBA,wBAwBA,CAAA,YACE,UAAA,KAMF,CxBCE,YwBDF,CAAA,OACI,SAAA,MAIJ,CApCA,wBAoCA,CApCA,UAoCA,KAAA,CApCA,wBAoCA,CApCA,UAoCA,IAEE,UAAA,OACA,YAAA,IACA,YAAA,IAAA,kBAIF,CA5CA,wBA4CA,IAAA,CAAA,kBAAA,CA5CA,wBA4CA,GAAA,CAAA,kBAEE,MAAA,KACA,WAAA,QAKA,CApDF,SAoDE,CAAA,SAAA,CAAA,iBACE,WAAA,IAAA,0BACA,OAAA,IAAA,MAAA,UAAA,GAAA,KAAA,CAAA,IAAA,0BAAA,GAAA,CAAA,MACA,QAAA,MACA,MAAA,mBACA,EAAA,KAEF,CA3DF,SA2DE,CAPA,SAOA,WACE,EAAA,KACA,QAAA,MACA,OAAA,IAAA,MAAA,UAAA,GAAA,KAAA,CAAA,IAAA,0BAAA,GAAA,CAAA,MAEF,CAhEF,SAgEE,CAZA,SAYA,IAAA,CAhEF,SAgEE,CAZA,SAYA,gBACE,EAAA,KACA,OAAA,IAAA,MAAA,UAAA,GAAA,KAAA,CAAA,IAAA,0BAAA,GAAA,CAAA,MACA,iBAAA,IAAA,cAGJ,CAtEA,SAsEA,CAlBE,QAkBF,CAAA,CjCjDA,QiCkDE,WAAA,EAKF,EAAA,CAAA,uCACE,UACA,EAKA,KAAA,CpB1DF,UoB0DE,CAnFF,wBAmFE,IAAA,CAAA,kBAAA,KAAA,CpB1DF,UoB0DE,CAnFF,wBAmFE,GAAA,CAAA,kBAEE,MAAA,KACA,WAAA,QClFJ,CzB4BE,YyB5BF,CAAA,OAAA,KAAA,CAAA,eACE,YAAA,IACA,WAAA,gBACA,KAGF,CzBsBE,YyBtBF,CANA,OAMA,KAAA,CANA,cAMA,CAAA,CAAA,sBACE,WAAA,IAGF,CzBkBE,YyBlBF,CAVA,OAUA,CAAA,kBACE,WAAA,IACA,WAAA,aACA,KAGF,CzBYE,YyBZF,CAhBA,OAgBA,EAAA,CAAA,oBACE,WAAA,KAGF,CzBQE,YyBRF,CApBA,OAoBA,EAAA,CAAA,iBACE,WAAA,KAGF,CzBIE,YyBJF,CAxBA,OAwBA,GAAA,GACE,WAAA,eACA,KAAA,IAGF,CzBDE,YyBCF,CA7BA,OA6BA,GAAA,GACE,WAAA,OAGF,CzBLE,YyBKF,CAjCA,OAiCA,GAAA,EAAA,OACE,WAAA,KAGF,CzBTE,YyBSF,CArCA,OAqCA,GAAA,CzBTE,YyBSF,CArCA,OAqCA,GAEE,WAAA,gBAGF,CzBdE,YyBcF,CA1CA,OA0CA,CAAA,QACE,WAAA,QAGF,CzBlBE,YyBkBF,CA9CA,OA8CA,CAJA,QAIA,EACE,gBAAA,KAGF,CzBtBE,YyBsBF,CAlDA,OAkDA,CAAA,OACE,UAAA,IACA,WAAA,MAKF,KAAA,CAAA,QACE,QAAA,YACA,eAAA,OAGF,KAAA,CAAA,QAAA,CAAA,OACE,iBAAA,QAGF,KAAA,CAAA,eAAA,CAJA,OAKE,MAAA,KAGF,KAAA,CAAA,UAAA,CARA,OASE,MAAA,KAGF,KAAA,CAJA,UAIA,CAZA,MAYA,QACE,QAAA,IAGF,KAAA,CAAA,SACE,UAAA,WAGF,KAAA,CApBA,QAoBA,CAJA,SAKE,iBAAA,KAGF,KAAA,CApBA,eAoBA,CARA,SASE,MAAA,KAGF,KAAA,CApBA,UAoBA,CAZA,SAaE,MAAA,QAGF,CArCA,QAqCA,IAAA,CArCA,OAqCA,CAAA,CAAA,aAAA,IAEE,UAAA,KAKF,ChC9CA,gBgC8CA,CAAA,CAAA,KAAA,cACE,WAAA,MAGF,CzB7EE,YyB6EF,CAAA,gBACE,QAAA,KAGF,CzBjFE,YyBiFF,CAAA,eF7GE,KAAA,QACA,QAAA,KACA,gBAAA,OACA,YAAA,eACA,EAAA,KACA,IAAA,KACA,WAAA,KACA,MAAA,IAAA,qBACA,iBAAA,IAAA,qBACA,aAAA,IACA,aAAA,IAAA,uBACA,aAAA,oBAhBc,EAkBd,YAAA,OACA,SAAA,OACA,cAAA,SACA,OAAA,QAGA,YAAA,KAEA,CvBOA,YuBPA,CEwFF,cFxFE,MAAA,KAAA,CAAA,UACE,MAAA,IAAA,2BACA,iBAAA,IAAA,2BAGF,CvBEA,YuBFA,CEmFF,cFnFE,eACE,QAAA,IAAA,MAAA,IAAA,qBACA,eAAA,KAGF,CvBHA,YuBGA,CE8EF,cF9EE,CAVA,SAWE,QAAA,GACA,OAAA,YAGF,CvBRA,YuBQA,CEyEF,cFzEE,CL6FF,OK5FI,QAAA,KAGF,CvBZA,YuBYA,CEqEF,cFrEE,CAAA,KACE,MAAA,IAAA,2BACA,iBAAA,IAAA,2BEyEJ,CAVA,eAUA,CAAA,eAAA,CAAA,gBAAA,CAAA,eAEE,QAAA,KCxHF,CAAA,uBAAA,IACE,YAAA,IAAA,kBAGF,CAAA,SACE,YAAA,OACA,WAAA,OACA,cAAA,OAGF,CAAA,aAAA,CANA,gBAOE,EAGF,CAAA,oBACE,YAAA,IAAA,aACA,UAAA,aACA,EAAA,MAGF,CANA,oBAOE,OAAA,QACA,QAAA,aACA,eAAA,OAEA,YAAA,KAEA,YAAA,OACA,SAAA,OACA,cAAA,SACA,aAAA,IACA,aAAA,MACA,YAAA,kBACA,IAGF,CAtBA,oBAuBE,MAAA,QACA,iBAAA,gBAAA,OAAA,CAAA,MACA,aAAA,QAGF,CA5BA,mBA4BA,OACE,MAAA,QACA,iBAAA,gBAAA,IAAA,CAAA,SAGF,CAjCA,mBAiCA,OAAA,CAjCA,mBAiCA,QAEE,MAAA,QACA,iBAAA,gBAAA,OAAA,CAAA,SACA,aAAA,QAGF,CAlDA,SAkDA,CAAA,gBACE,cAAA,IAGF,CAAA,WACE,YAAA,UACA,YAAA,IACA,YAAA,IACA,cAAA,IAGF,CAPA,WAOA,CAAA,IACE,QAAA,aACA,eAAA,IACA,aAAA,IAGF,CAbA,WAaA,CAAA,OACE,QAAA,aACA,eAAA,ICvEF,CAAA,qBACE,SAAA,MACA,QAAA,IACA,OAAA,IACA,MAAA,IACA,MAAA,MACA,OAAA,MAGF,OAAA,OAAA,IAAA,CAAA,SAAA,EAAA,OACE,CAVF,qBAYI,OAAA,gBvC0BJ,MACE,aAAA,KAAA,IAAA,EAAA,UAAA,IAAA,EAAA,SAAA,EAAA,KAAA,EAAA,WAEF,MACE,iBAAA,GAAA,KAAA,EAAA,MAAA,IAAA,KAAA,EAAA,KAAA,EAAA,MAEF,MACE,kBAAA,WAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAEF,MACE,cAAA,GAAA,KAAA,EAAA,MAAA,IAAA,KAAA,EAAA,KAAA,EAAA,MyC9CA,MACE,aAAA,MAEA,KAAA,KAAA,CzBiBJ,WyBDI,cAAA,MAAA,sBAAA,MAAA,qBAAA,KAAA,mBAAA,IAAA,iBAAA,gBAAA,KAAA,qBAAA,QAAA,qBAAA,QAAA,qBAAA,IAAA,qBAAA,oBAAA,IAAA,0BAAA,kBAAA,IAAA,sBAAA,sBAAA,IAAA,kBAAA,kBAAA,IAAA,0BAAA,gCAAA,IAAA,0BAAA,gCAAA,MAAA,kCAAA,IAAA,oBAAA,6BAAA,IAAA,0BAAA,6BAAA,MAAA,+BAAA,IAAA,oBAAA,wBAAA,IAAA,sBAAA,wBAAA,IAAA,kBAAA,wBAAA,IAAA,0BAAA,wBAAA,IAAA,kBAAA,wBAAA,IAAA,0BAAA,wBAAA,IAAA,kBAAA,mBAAA,KAAA,oBAAA,IAAA,0BAAA,gBAAA,YAAA,wBAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,IAAA,2BAAA,IAAA,qBAAA,2BAAA,IAAA,qBAAA,iCAAA,IAAA,2BAAA,iCAAA,IAAA,2BAAA,mBAAA,IAAA,iBAAA,mBAAA,YAAA,0BAAA,IAAA,0BAAA,0BAAA,IAAA,4BAAA,uBAAA,IAAA,mBAAA,uBAAA,YAAA,8BAAA,IAAA,uBAAA,8BAAA,IAAA,0BAAA,oBAAA,IAAA,mBAAA,oBAAA,IAAA,0BAAA,sBAAA,IAAA,iBAAA,6BAAA,QAAA,6BAAA,QAAA,6BAAA,QAAA,6BAAA,QAAA,yBAAA,IAAA,sBAAA,sBAAA,IAAA,sBAAA,oBAAA,MAAA,yBAAA,IAAA,mBAAA,qBAAA,QAAA,qBAAA,QAAA,uBAAA,KAAA,2BAAA,IAAA,0BAAA,2BAAA,IAAA,qBAAA,uBAAA,IAAA,sBAAA,yBAAA,IAAA,oBAAA,uBAAA,IAAA,kBAAA,6BAAA,IAAA,6BAAA,6BAAA,IAAA,6BAAA,mBAAA,QAAA,0BAAA,QAAA,mCAAA,IAAA,yBAAA,gCAAA,IAAA,sBAAA,mCAAA,IAAA,yBAAA,gCAAA,IAAA,sBAAA,gCAAA,IAAA,yBAAA,6BAAA,IAAA,sBAAA,8BAAA,IAAA,yBAAA,2BAAA,IAAA,sBAAA,+BAAA,IAAA,yBAAA,4BAAA,IAAA,sBAAA,oCAAA,IAAA,yBAAA,iCAAA,IAAA,sBAAA,oCAAA,IAAA,yBAAA,iCAAA,IAAA,sBAAA,8BAAA,IAAA,yBAAA,2BAAA,IAAA,sBAAA,8BAAA,IAAA,yBAAA,2BAAA,IAAA,sBAAA,gCAAA,IAAA,yBAAA,6BAAA,IAAA,sBAAA,gCAAA,IAAA,yBAAA,6BAAA,IAAA,sBAAA,6BAAA,IAAA,yBAAA,0BAAA,IAAA,sBAAA,iCAAA,IAAA,yBAAA,8BAAA,IAAA,sBAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAA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", "names": [] diff --git a/course/_static/pretext/css/theme.css.map b/course/_static/pretext/css/theme.css.map index 076d70e..ae3867d 100755 --- a/course/_static/pretext/css/theme.css.map +++ b/course/_static/pretext/css/theme.css.map @@ -1,6 +1,6 @@ { "version": 3, - "sources": ["c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/theme-boulder.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\fonts\\_fonts-google.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_spacing.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_list-styles.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_description-lists.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\helpers\\_cols.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_lists.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_fillin.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_headings.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_links.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_tables.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_front-matter.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_summary-links.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_footnotes.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_index.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_media.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_figures.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_poem.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_codelike.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_prism.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_math.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_permalinks.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_misc-content.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_printing.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_worksheet.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_google-search.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_pretext-search.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\helpers\\_buttons-default.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\interactives\\_runestone.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\interactives\\_webwork.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\interactives\\_sagecell.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\interactives\\_calculators.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\salem\\_other-widen.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\helpers\\_expandable.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_body.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\denver\\_parts-paper.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_banner.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_navbar.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\extras\\_navbar-btn-borders.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_toc-basics.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_toc-default.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\extras\\_toc-hidden-scrollbar.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_footer.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\salem\\_rs-widen.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\extras\\_toc-expand-chevrons.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/_customization.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_asides-basic.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_asides-floating.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\greeley\\_chunks-greeley.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_exercises.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_solutions.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_sidebyside.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\helpers\\_inline-heading-mixin.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_discussion-inline.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_knowls.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\helpers\\_sidebar-mixin.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\colors\\_color-vars.scss", "c:\\Users\\andyj\\.ptx\\2.32.0\\core\\css\\targets\\html\\boulder/..\\..\\..\\colors\\_color-helpers.scss"], + "sources": ["c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/theme-boulder.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\fonts\\_fonts-google.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_spacing.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_list-styles.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_description-lists.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\helpers\\_cols.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_lists.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_fillin.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_headings.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_links.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_tables.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_front-matter.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_summary-links.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_footnotes.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_index.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_media.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_figures.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_poem.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_codelike.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_prism.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_math.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_permalinks.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\elements\\_misc-content.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_printing.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_worksheet.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_google-search.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\_pretext-search.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\helpers\\_buttons-default.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\interactives\\_runestone.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\interactives\\_webwork.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\interactives\\_sagecell.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\interactives\\_calculators.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\salem\\_other-widen.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\helpers\\_expandable.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_body.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\denver\\_parts-paper.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_banner.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_navbar.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\extras\\_navbar-btn-borders.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_toc-basics.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_toc-default.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\extras\\_toc-hidden-scrollbar.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\_footer.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\salem\\_rs-widen.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\page-parts\\extras\\_toc-expand-chevrons.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/_customization.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_asides-basic.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_asides-floating.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\greeley\\_chunks-greeley.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_exercises.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_solutions.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_sidebyside.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\helpers\\_inline-heading-mixin.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_discussion-inline.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\_knowls.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\components\\chunks\\helpers\\_sidebar-mixin.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\colors\\_color-vars.scss", "c:\\Users\\Andy\\.ptx\\2.33.2\\core\\css\\targets\\html\\boulder/..\\..\\..\\colors\\_color-helpers.scss"], "sourcesContent": ["$primary-color: #386F94;\n$primary-color-dark: #5192BD;\n$provide-dark-mode: yes;\n/*! Theme: boulder */\n// Theme designed for short articles (i.e., research papers) or course documents.\n// Minimal navigation bar; there is likely only one html page per document.\n\n// Current maintainer: Oscar Levin\n\n// Variables used by theme. CSSBuilder overrides these by prepending\n// different definitions for these variables to this file before the theme\n// is compiled.\n$primary-color: hsl(270, 40%, 15%) !default;\n$primary-color-dark: hsl(270, 50%, 50%) !default;\n$background-color-dark: hsl(270, 10%, 5%) !default;\n\n@use \"sass:map\";\n\n\n// set some default sizing variables - this will also set up\n// defaults for expandable mixin\n@use '../salem/sizing-globals' with (\n $content-width: 600px,\n $content-side-padding: 20px\n);\n\n// Basic components: \n@use 'components/pretext'; \n\n@use '../salem/other-widen';\n\n@use '../denver/parts-paper';\n//@use 'shell';\n@use 'customization';\n@use '../greeley/chunks-greeley';\n\n//@use 'heading-tweaks';\n\n// fonts and colors\n// $body-font: 'Open Sans' !default;\n// $heading-font: 'Roboto' !default;\n@use 'fonts/fonts-google'; // with ($body: $body-font, $heading: $heading-font);\n\n@use \"colors/color-helpers\" as colorHelpers;\n@use \"colors/palette-single-bold\" as palette-single with (\n $primary-color: $primary-color,\n);\n\n\n// primary/secondary color defined as determined by palette-chunks from\n// color-scheme, primary-color, secondary-color\n$primary-color: map.get(palette-single.$colors, 'primary-color');\n//$secondary-color: map.get(palette-dual.$colors, 'secondary-color');\n\n@use 'colors/palette-dark' as palette-dark with (\n $primary-color: $primary-color-dark,\n $background-color: $background-color-dark,\n);\n\n\n$light-colors: map.merge(palette-single.$colors, (\n \"toclevel1-background\": var(--content-background),\n \"toclevel2-background\": var(--content-background),\n \"toclevel3-background\": var(--content-background),\n));\n\n\n$dark-colors: map.merge(palette-dark.$colors, (\n \"toclevel1-background\": var(--content-background),\n \"toclevel2-background\": var(--content-background),\n \"toclevel3-background\": var(--content-background),\n));\n\n@include colorHelpers.set-root-colors($light-colors, $dark-colors);\n", "@use \"sass:map\";\n@use \"sass:string\";\n@use \"sass:list\";\n\n// Fonts to use\n$body: 'Open Sans, Helvetica Neue, Helvetica, Arial, sans-serif' !default;\n$heading: 'PT Serif, Times New Roman, Times, serif' !default;\n$monospace: 'Inconsolata, Consolas, Monaco, monospace;' !default;\n$print: 'PT Serif, Times New Roman, Times, serif' !default;\n\n@function is-variable-font($font-name) {\n $static-fonts: ('PT Serif'); // list of known static fonts used by themes\n @if list.index($font-name, $static-fonts) {\n @return false;\n }\n @return true;\n}\n\n@function generate-import($font-name) {\n @if is-variable-font($font-name) {\n @return 'https://fonts.googleapis.com/css2?family=' + $font-name + ':ital,wght@0,400..700;1,400..700&display=swap';\n }\n @else {\n @return 'https://fonts.googleapis.com/css2?family=' + $font-name + ':ital,wght@0,400;0,700;1,400;1,700&display=swap';\n }\n}\n\n// For now, only try to fetch the first name in the list and assume\n// the rest are system defined fallbacks.\n// lists are 1-indexed\n$body-font: list.nth(string.split($body, ','), 1);\n// @debug \"----------------\" $body-font;\n@import url( generate-import($body-font) );\n\n$heading-font: list.nth(string.split($heading, ','), 1);\n// generate-import($heading-font);\n@import url( generate-import($heading-font) );\n\n$monospace-font: list.nth(string.split($monospace, ','), 1);\n// generate-import($monospace-font);\n@import url( generate-import($monospace-font) );\n\n:root {\n --font-body: #{$body};\n}\n:root {\n --font-headings: #{$heading};\n}\n:root {\n --font-monospace: #{$monospace};\n}\n:root {\n --font-print: #{$print};\n}\n\n// 9/5/24 ... TODO controlled list of fonts ... wait and explore later\n// // Available fonts\n// $serif-options: ('Alegreya', 'Merriweather', 'Noto Serif', 'PT Serif', 'Source Serif 4');\n// $sans-options: ('Alegreya Sans', 'Barlow', 'Lato', 'Open Sans', 'Roboto', 'Source Sans 3');\n// $code-options: ('Inconsolata');\n\n// // Backup lists\n// $sans-backups: ', Helvetica Neue, Helvetica, Arial, sans-serif';\n// $serif-backups: ', Times New Roman, Times, serif';\n\n// // ---------------------------------------------------------\n\n\n// @function add-fonts($list, $backups, $fonts: ()) {\n// @each $font in $list {\n// $fonts: map.set($fonts, $font, (\n// url: '\"https://fonts.googleapis.com/css2?family=#{$font}:wdth,wght@75..100,300..800&display=swap\"',\n// fontlist: $font + $backups,\n// ));\n// }\n// @return $fonts;\n// }\n\n// $fonts: add-fonts($sans-options, $sans-backups);\n// $fonts: add-fonts($serif-options, $sans-backups, $fonts);\n\n// $bodyfont: map.get($fonts, $body);\n// @if not $bodyfont {\n// @error \"Unknown body font: #{$body}\";\n// } @else {\n// @import url(#{map.get($bodyfont, \"url\")});\n// :root {\n// --font-body: #{map.get($bodyfont, \"fontlist\")};\n// }\n// }\n\n// $headingfont: map.get($fonts, $heading);\n// @if not $headingfont {\n// @error \"Unknown heading font: #{$heading}\";\n// } @else {\n// @import url(#{map.get($headingfont, \"url\")});\n// :root {\n// --font-headings: #{map.get($headingfont, \"fontlist\")};\n// }\n// }\n", "// Basic spacing for content\n\n// Breakpoint at which the navbar moves to the bottom of the screen\n$navbar-breakpoint: 800px !default;\n\n// all styling assumes border-box layout measurement\n* {\n box-sizing: border-box;\n}\n\n//----------------------------------------------------------\n// Inter item vertical spacing\n//\n// Set some baseline minimal inter-item vertical spacings\n//\n// Individual items can override this with their own margin. The\n// user of @layer here forces these rules to all have less precedence\n// than any rules not in a layer.\n// Most spacing should be done with margin-top.\n\n@layer spacing {\n // inter-item spacing high level containers\n :is(section, article, .knowl__content) > *:not(:first-child) {\n margin-top: 1.5em;\n }\n\n // but tighten up spacing slightly for adjacent paragraphs in a section\n :is(section, article, .knowl__content) > .para + .para {\n margin-top: 1em;\n }\n\n // lower-level container elements that are expected to contain sequences of items\n // tighter spacing here to avoid visually breaking up the minor container\n .ptx-content :is(ul, td, li, dd, .blockquote, .sbspanel, .para.logical) > *:not(:first-child) {\n margin-top: 0.5em;\n }\n}", "// Types of ol/ul - used by web and ebooks\n// Any spacing should be in _lists.scss, not here\n\nol.no-marker,\nul.no-marker,\nli.no-marker {\n list-style-type: none;\n}\n\nol.decimal {\n list-style-type: decimal;\n}\n\nol.lower-alpha {\n list-style-type: lower-alpha;\n}\n\n// Match LaTeX style for second level (i.e. level=\"1\") lists\nol.lower-alpha-level-1 > li::marker {\n content: \"(\"counter(list-item,lower-alpha)\") \";\n}\n\nol.upper-alpha {\n list-style-type: upper-alpha;\n}\n\nol.lower-roman {\n list-style-type: lower-roman;\n}\n\nol.upper-roman {\n list-style-type: upper-roman;\n}\n\nul.disc {\n list-style-type: disc;\n}\n\nul.square {\n list-style-type: square;\n}\n\nul.circle {\n list-style-type: circle;\n}\n", "/* dl is used for glossaries and descriptions lists.\n Glossaries are simple: bold word by itself on a line.\n Definition indented on the next line.\n Vertical space before the next term.\n\n Description lists are more complicated. The wider version\n (refering to the horizontal indentation of the definition;\n this is the default)\n has the (wrapped) term inline with the definition.\n\n The narrow version is complicated because the term is inline\n with its definition if it fits, otherwise it is on the line above.\n That means the vertical space between entries can't be handled by\n a top margin on the dt. Instead we have an ::after on the dd .\n */\n\ndl:is(.description-list, .glossary) {\n margin: 0;\n //overflow: hidden; // Removed to show permalinks\n\n dt {\n font-weight: bold;\n max-width: 55ex;\n }\n\n dd::after {\n content: \"\";\n display: block;\n clear: both;\n }\n}\n\n.para > dl:is(.description-list) {\n // add some space when inside a .para\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n\ndl.glossary {\n dt {\n margin-top: 1.25em;\n\n &:first-of-type {\n margin-top: 0;\n }\n }\n\n dd {\n margin-left: 5ex;\n }\n}\n\ndl.description-list {\n\n dt,\n dd {\n margin-top: 1em;\n\n &:first-of-type {\n margin-top: 0;\n }\n }\n\n dt {\n float: left;\n clear: both;\n text-align: right;\n width: 18ex;\n margin-right: 1ex;\n }\n\n dd {\n margin-left: 22ex;\n }\n\n &.narrow {\n dt {\n width: 11ex;\n }\n\n dd {\n margin-left: 15ex;\n }\n }\n\n &.wide {\n dt {\n width: 25ex;\n }\n\n dd {\n margin-left: 29ex;\n }\n }\n}\n\ndl.description-list dt:first-of-type {\n clear: none;\n}\n\n.description-list + * {\n clear: both;\n}\n\n/* where do we have nested dl? */\ndl.description-list dl dt {\n width: 8ex;\n}\n\ndl.description-list dd dd {\n margin-left: 18ex;\n}\n\ndl.description-list dl dd {\n margin-left: 12ex;\n}\n\n\n@media screen and (max-width: 480px) {\n dl.description-list dt {\n float: none;\n margin-left: 0;\n text-align: left;\n }\n\n dl.description-list dd,\n dl.description-list.narrow dd,\n dl.description-list.wide dd {\n margin-top: 0.5em;\n margin-left: 3em;\n max-width: calc(100% - 3em);\n }\n}\n", "\n// columns are arranged in row-major order to match print output in LaTeX\n:is(.cols2, .cols3, .cols4, .cols5, .cols6) {\n display: flex;\n flex-wrap: wrap;\n justify-content: start;\n}\n\n// see lists and exercises for sample use\n@mixin allow-cols($el, $col-gap: 2em) {\n @for $i from 2 through 6 {\n .cols#{$i} > #{$el} {\n // columns are a suggestion enforced by a minimum size\n // content that needs to be wider can reduce number of columns\n // in its row\n min-width: calc(100% / $i - #{$col-gap});\n width: min-content;\n margin-right: $col-gap;\n }\n }\n}\n\n", "// Entry point for ol/ul/dl web styling\n\n@use \"list-styles\";\n@use \"description-lists\";\n@use '../helpers/cols';\n\n// generate multi column rules for lists\n@include cols.allow-cols('li');\n\n// use .ptx-content to avoid styling lists in toc/header/etc...\n.ptx-content {\n ol,\n ul {\n\n ol,\n ul {\n // margin-top: 0.5em;\n }\n }\n\n li {\n margin-top: 0.5em;\n // margin-bottom: 0;\n\n // & > .para:first-child {\n // margin-top: 0;\n // }\n\n .li--heading-title {\n font-size: 100%;\n font-weight: normal;\n font-style: italic;\n }\n }\n} // .ptx-content\n\n.para > :is(ol, ul) {\n // add some space when inside a .para\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n\n// provide space for custom markers\nol > li {\n padding-left: 0.25em;\n}\n", "\n.fillin {\n display: inline-block;\n border: none;\n border-width: 1px;\n margin-right: 0.1em;\n margin-left: 0.1em;\n margin-bottom: -0.25em;\n\n &.underline {\n border-bottom-style: solid;\n border-width: 1px;\n }\n\n &.box {\n outline: 1px solid var(--body-text-color);\n height: 1.3em;\n }\n\n &.shade {\n background-color: var(--fillin-background-color, #eee);\n height: 1.3em;\n }\n}\n\n\n:root.dark-mode {\n --fillin-background-color: #444;\n}\n", "// headings for standard page elements - sections/articles/etc...\n// more specialized headings (exercises) should be defined in the specific component\n// complex stylizing (like boxes) should be done by \"chunks\"\n\n// reset size/margin for headings\n.heading:is(h1, h2, h3, h4, h5, h6) {\n margin: 0;\n font-size: unset;\n}\n\n.heading {\n line-height: 1.1;\n font-family: var(--font-headings);\n font-weight: 700;\n margin-top: 0;\n margin-bottom: 0;\n}\n\nsection > .heading {\n font-size: 1.75em;\n color: var(--body-title-color);\n line-height: 1.25em;\n margin-top: 2.5em;\n margin-bottom: 0.5em;\n\n // pull in any following items that default to a larger top margin\n & + * {\n margin-top: 0.5em;\n }\n}\n\n.ptx-content > section > .heading {\n //first heading on page\n margin-top: 0.5em;\n}\n\nsection section > .heading {\n font-size: 1.5em;\n margin-top: 2em;\n}\n\nsection section section > .heading {\n font-size: 1.40em;\n margin-top: 2em;\n}\n\n\narticle > .heading {\n font-size: 1.25em;\n margin-top: 1.5em;\n\n // pull in any following items that default to a larger top margin\n & + * {\n margin-top: 0.5em;\n }\n}\n\n.paragraphs > .heading {\n font-size: 1.125em;\n}\n\n// heading followed by no content and then a subsection that starts with heading\n:is(section, article) > .heading + :is(section, article) > .heading {\n margin-top: 0.5em;\n}\n\n// smaller headings on phone screens\n@media screen and (max-width: 480px) {\n section > .heading {\n font-size: 1.5em;\n line-height: 1.33em;\n margin-top: 1em;\n }\n section section > .heading {\n font-size: 1.3em;\n line-height: 1.15em;\n }\n section section section > .heading {\n font-size: 1.15em;\n line-height: 1em;\n }\n}\n\n.heading.hide-type > .type {\n display: none;\n}\n", "\n// Reset for all links\na {\n color: var(--link-text-color);\n text-decoration: none;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n}\n\n\na[href^=\"mailto:\"] {\n white-space: pre;\n}\n\n\n// Body links. .ptx-content to avoid hitting navbar, toc, etc...\n.ptx-content {\n a.internal {\n color: var(--link-text-color);\n font-weight: bold;\n }\n a.external {\n color: var(--link-alt-text-color);\n font-weight: bold;\n }\n a.internal:hover, a.internal:hover *,\n a.internal:focus, a.internal:focus * {\n color: var(--link-active-text-color);\n background-color: var(--link-active-background);\n font-weight: bold;\n }\n a.external:hover, a.external:hover *,\n a.external:focus, a.external:focus * {\n color: var(--link-alt-active-text-color);\n background-color: var(--link-alt-active-background);\n font-weight: bold;\n }\n}\n", "// limit rules targeting basic elements to just content area\n.ptx-content {\n table {\n border-spacing: 0;\n border-collapse: collapse;\n }\n\n td {\n padding: 2px 5px;\n font-size: 90%;\n\n img {\n max-width: 200px;\n margin-right: 30px;\n }\n }\n\n th {\n padding: 2px 5px;\n }\n\n // generate alignment/border mixin classes for both th and td\n @each $cell-type in (th, td) {\n #{$cell-type} {\n .lines {\n white-space: nowrap;\n }\n\n // horizontal alignment options\n @each $class, $align in (l: left, c: center, r: right, j: justify) {\n &.#{$class} {\n text-align: $align;\n }\n }\n\n // vertical alignment options\n @each $class, $align in (t: top, b: bottom, m: middle) {\n &.#{$class} {\n vertical-align: $align;\n }\n }\n\n // border options\n @each $side, $side-symbol in (left: l, right: r, top: t, bottom: b) {\n @for $i from 0 through 3 {\n &.#{$side-symbol}#{$i} {\n @if $i ==0 {\n border-#{$side}: none;\n }\n\n @else {\n border-#{$side}: #{$i}px solid var(--body-text-color);\n }\n }\n }\n }\n }\n }\n\n\n // when cells do not have a border on left and right, add padding\n th.r0.l0,\n td.r0.l0 {\n padding-left: 0.8em;\n padding-right: 0.8em;\n }\n\n tr.header-vertical {\n th {\n writing-mode: vertical-rl;\n padding-left: 2em;\n }\n }\n\n .center {\n table {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n }\n }\n}\n\n// Rules with non-generic targeting\n\n.tabular-box {\n margin-top: 0.5em; //minimum space above to separate from figcaption\n overflow-x: auto;\n}\n\n.tabular-box.natural-width table {\n margin-left: auto;\n margin-right: auto;\n}\n\n// More specific types of tables\n\ntable.notation-list {\n tr {\n th {\n text-align: left;\n margin-left: 1em;\n }\n\n td {\n text-align: left;\n vertical-align: top;\n }\n }\n}\n\n\n\n", "// Styles for the items that are (at least generally) a part of the front matter\n// There are some pretty generic class names. Those get wrapped with a class\n// limiting their scope to the expected page\n\n.frontmatter {\n & > .heading {\n display: block;\n text-align: center;\n }\n\n & > .heading .title,\n .book > .heading .title {\n font-size: 1.3em;\n }\n\n & > .heading .subtitle,\n .book > .heading .subtitle {\n display: block;\n font-weight: normal;\n color: var(--byline-color);\n font-size: 0.875em;\n line-height: 1.42857em;\n margin-top: 0.35714em;\n }\n\n & > .para:first-of-type {\n margin-top: 4em;\n }\n\n & > .author,\n & > .credit {\n margin-top: 2em;\n text-align: center;\n }\n\n .author:first-of-type {\n margin-top: 4em;\n }\n\n & > .author .author-name {\n font-size: 120%;\n }\n\n .date {\n display: block;\n margin-top: 2em;\n text-align: center;\n }\n\n .credit .title {\n font-size: 1em;\n }\n\n .credit .author {\n font-size: 0.9em;\n margin-top: 0.75em;\n }\n\n .author-info {\n font-size: 90%;\n }\n\n .summary-links {\n margin-top: 4em;\n }\n\n .abstract {\n margin: 4em 2em;\n }\n\n .keywords, .support {\n margin-top: 2em;\n }\n\n .abstract, .keywords, .support {\n & > .title {\n font-size: 1.125em;\n font-weight: 600;\n line-height: 1.125em;\n display: inline;\n }\n\n & > .title::after {\n content: \".\\2009\\2009\\2009\";\n }\n\n & > .title + .para {\n display: inline;\n }\n }\n\n .colophon {\n .copyright {\n margin-top: 2.5em;\n }\n\n .license {\n margin-top: 2.5em;\n }\n }\n}\n", "\n/* Start of division toc links */\n// .ptx-content to override _links rules\n.ptx-content .summary-links {\n font-family: var(--font-headings);\n display: block;\n margin-top: 1em;\n\n a {\n color: var(--summary-link-text-color);\n background: var(--summary-link-background);\n font-size: 1.5em;\n line-height: 1.25em;\n padding: 10px 20px;\n padding-right: 60px;\n border-radius: 3px;\n position: relative;\n display: block;\n font-weight: unset;\n\n .title{\n font-style: normal;\n }\n\n .codenumber {\n margin-right: 0.41667em;\n }\n\n &::after {\n // triangles\n right: 0.83333em;\n content: \"\";\n position: absolute;\n top: 50%;\n margin-top: -0.4em;\n width: 0;\n height: 0;\n border-top: 0.4em solid transparent;\n border-bottom: 0.4em solid transparent;\n border-left: 0.4em solid var(--summary-link-text-color);\n }\n\n &:hover {\n color: var(--summary-link-hover-text-color);\n background: var(--summary-link-hover-background);\n\n // need to override work done in _links\n * {\n color: var(--summary-link-hover-text-color);\n background: var(--summary-link-hover-background);\n }\n .title {\n font-weight: normal;\n }\n\n &::after {\n border-left: 0.4em solid var(--summary-link-hover-text-color);\n } \n } \n }\n\n ul {\n list-style-type: none;\n padding: 0;\n margin-top: 0;\n }\n\n li {\n margin-top: 5px;\n }\n}\n\n@media screen and (width <= 480px) {\n .ptx-content .summary-links a {\n //shrink on mobile\n font-size: 100%;\n line-height: 1.25em;\n }\n}\n", "$border-radius: 0px !default;\n\n.ptx-footnote {\n display: inline-block;\n position: relative;\n}\n\n.ptx-footnote[open] {\n display: contents;\n}\n\n\n.ptx-footnote[open] .ptx-footnote__number::before {\n font-size: smaller;\n content: \"[x]\";\n visibility: visible;\n vertical-align: super;\n}\n\n.ptx-footnote[open] .ptx-footnote__number sup {\n display: none;\n}\n\n.ptx-footnote__number {\n display: inline-block;\n cursor: pointer;\n min-width: 1em; //hopefully enough space...\n}\n\n.ptx-footnote__number::marker {\n content: \"\";\n}\n\n.ptx-footnote__contents {\n display: block;\n font-style: italic;\n background: var(--knowl-background);\n border-radius: $border-radius;\n padding: 8px;\n margin: 4px auto;\n width: fit-content;\n max-width: calc(100% - 60px);\n border: 2px solid var(--knowl-border-color);\n //reset color/weight/size in case used in block that changed them\n // e.g. theorem title in denver\n color: var(--body-text-color);\n font-weight: normal;\n font-size: var(1rem);\n}\n", "\n\n/* the index at the back of the book */\n// TODO - refactor\n\n\n.navbar .indexnav {\n position: absolute;\n top: 46px;\n right: 0;\n}\n\n.mininav {\n float: left;\n padding-top: 0.7ex;\n padding-left: 1ex;\n}\n\n\n.indexjump {\n margin-left: 1.5ex;\n margin-top: 0.2ex;\n padding-top: 0;\n float: left;\n line-height: 0.95;\n}\n\n.indexjump a {\n padding-left: 2.5px;\n padding-right: 0.5px;\n width: 2.5ex;\n/*\n* * omitted, because we put a space in the source\n* padding-right: 3px;\n* */\n margin-right: -1px;\n color: inherit;\n font-size: 80%;\n text-align: center;\n}\n.indexjump a::after{\n content: \"\";\n display: inline-block;\n}\n.indexjump a:nth-of-type(14){\n padding-left: 1.8ex;\n}\n.indexjump a:last-child {\n padding-right: 10px;\n}\n\n.indexjump a:hover {\n background: var(--activated-content-bg);\n}\n\n.indexitem {\n margin-top: 4px;\n}\n\n.subindexitem {\n margin-left: 2em;\n font-size: 95%;\n margin-top: -1px;\n}\n\n.subsubindexitem {\n margin-left: 3.5em;\n font-size: 95%;\n margin-top: -1px;\n}\n\n.indexknowl {\n margin-left: 0.11em;\n}\nem + .indexknowl {\n margin-left: -0.25em;\n}\n.indexknowl a {\n margin-left: 2em;\n}\n\n.indexitem .see,\n.subindexitem .see,\n.subsubindexitem .see {\n margin-left: 1em;\n margin-right: 0;\n}\n.indexitem .seealso,\n.subindexitem .seealso,\n.subsubindexitem .seealso {\n margin-left: 1em;\n margin-right: 0;\n}\n.indexitem .see em,\n.subindexitem .see em,\n.subsubindexitem .see em,\n.indexitem .seealso em,\n.subindexitem .seealso em,\n.subsubindexitem .seealso em {\n margin-right: 0.25em;\n font-style: italic;\n}\n/* note that multiple things after \"see\" are in separate spans */\n.indexitem .see + .see,\n.subindexitem .see + .see,\n.subsubindexitem .see + .see,\n.indexitem .seealso + .seealso,\n.subindexitem .seealso + .seealso,\n.subsubindexitem .seealso + .seealso {\n margin-left: 0;\n margin-right: 0;\n}\n\n.indexitem .indexknowl {\n font-size: 90%;\n}\n\n.indexitem [data-knowl], .subindexitem [data-knowl], .indexitem [data-knowl]:hover {\n padding-right: 2px;\n padding-left: 2px;\n}\n.indexknowl [data-knowl]:hover, .indexknowl .active[data-knowl] {\n margin-left: 2em;\n}\n\n.subindexitem .indexknowl {\n font-size: 95%;\n}\n.subsubindexitem .indexknowl {\n font-size: 95%;\n}\n\n.indexletter {\n margin-top: 1.5em;\n}\n", "// ---------------------------------------------\n// containers for images, audio, video, and asymptote\n.image-box,\n.audio-box,\n.video-box,\n.asymptote-box {\n position: relative;\n}\n\n.image-box .asymptote-box iframe.asymptote,\niframe.asymptote,\n.video-box .video,\n.video-box .video-poster {\n position: absolute; top: 0; left: 0; width: 100%; height: 100%;\n}\n\n// images in containers should grow to fit space\n.image-box img,\nimg.contained {\n width: 100%;\n}\n\n// ---------------------------------------------\n// images\n.ptx-content img, .ptx-content svg {\n // for body images in dark mode, we want to be able to force a light colored background\n // as most transparent images will assume that the background is white\n background: var(--ptx-image-bg);\n}\n// but mermaid svg should always have a transparent background\n.mermaid > svg {\n background: none;\n}\n\n.image-description {\n summary {\n list-style: none; // no marker\n cursor: pointer;\n }\n}\n\n// download links after an image\n.image-archive {\n margin: 0.75em auto 0;\n font-family: var(--font-monospace);\n justify-content: center;\n display: flex;\n gap: 0.5em;\n}\n\n// TODO - refactor mag_popup JS and CSS\n// was .ptx-content .image-box > img:not(.draw_on_me):not(.mag_popup)\n.image-box > img:not(.mag_popup) {\n cursor: zoom-in;\n}\n\nimg.mag_popup {\n border: 1px solid #666;\n box-shadow: 4px 6px 4px #999;\n cursor: zoom-out;\n}\n\n.mag_popup_container {\n width:100%;\n position:absolute;\n z-index:1001;\n overflow-x: visible;\n}\n\n// ---------------------------------------------\n// other\n.audio {\n width: 100%;\n}\n\n.video-poster {\n cursor: pointer;\n}\n", "figure {\n clear: both;\n position: relative;\n\n // override browser margins\n margin-left: 0;\n margin-right: 0;\n}\n\nfigcaption {\n margin-left: auto;\n margin-right: auto;\n margin-top: 0.5em;\n\n code.code-inline {\n white-space: pre;\n }\n \n .codenumber,\n .type {\n font-weight: 700;\n }\n\n // add n-dashes\n .codenumber::after,\n .type:last-of-type::after {\n content: \"\\2002\";\n }\n\n // make sure first para comes right after title\n .para:first-of-type {\n display: inline;\n }\n}\n\n// tables are inset\nfigure.table-like {\n margin-left: 30px;\n margin-right: 30px;\n\n // but lists can go full right\n .list {\n margin-right: 0;\n }\n}\n\n@media (max-width <= 943px){\n .figure-like {\n overflow-x: auto;\n }\n}\n", "/* style for poems */\n.poem {\n display: table;\n margin: 0 auto;\n width: auto;\n max-width: 90%;\n}\n\n.poem > .heading {\n display: block;\n text-align: center;\n}\n\nsection article.poem > .heading::after {\n content: \"\";\n}\n\n.poem > .heading > .title {\n font-weight: bold;\n font-size: 1.2em;\n line-height: 1.2em;\n}\n\n.poem .author {\n font-style: italic;\n margin-top: 0.75em;\n}\n\n.poem .author.left {\n text-align: left;\n}\n\n.poem .author.center {\n text-align: center;\n}\n\n.poem .author.right {\n text-align: right;\n}\n\n.poem .stanza > .heading {\n text-align: center;\n font-weight: bold;\n font-size: 1em;\n line-height: 1em;\n}\n\n.poem .stanza + .stanza {\n margin-top: 1em;\n}\n\n.poem .heading + .stanza {\n margin-top: 0.2em;\n}\n\n.poem .heading + .line {\n margin-top: 0.2em;\n}\n\n.poem .line.left {\n text-align: left;\n margin-left: 4em;\n text-indent: -4em;\n}\n\n.poem .line.center {\n text-align: center;\n}\n\n.poem .line.right {\n text-align: right;\n}\n\n.poem .tab {\n margin-left: 2em;\n}\n", "@mixin code-text {\n font-family: var(--font-monospace);\n background: var(--code-background);\n font-size: .93rem;\n line-height: 1.2;\n}\n\n@mixin code-inline-spacing {\n line-height: normal; //prevent extra \"padding\" based on line-height\n padding: 0.0625em .15em;\n}\n\n// wide programs need to be scrollable\n.code-box {\n overflow-x: auto;\n}\n\n.code-display {\n overflow-x: auto; //scroll if overflowing\n font-family: var(--font-monospace);\n}\n\n.console,\n.program {\n border: 1px solid var(--page-border-color);\n padding: 5px 15px;\n overflow-x: auto;\n margin: 0;\n @include code-text();\n}\n\n.code-inline {\n font-family: var(--font-monospace);\n white-space: pre;\n color: var(--body-text-color);\n background: var(--code-inline-background);\n border: 1px solid color-mix(in oklab, var(--code-inline-background) 50%, #888);\n border-radius: 0.2em;\n display: inline-block;\n overflow-x: auto;\n max-width: 100%;\n vertical-align: middle;\n @include code-inline-spacing();\n}\n\n\n.prompt.unselectable {\n user-select: none;\n}\n\n// code blocks are preformatted text that is not a program\n.code-block {\n border-left: 1px solid #aaa;\n padding: 0 15px 5px;\n overflow-x: auto;\n background: var(--code-background);\n margin-top: 0;\n margin-bottom: 0;\n @include code-text();\n}\n\n.code-block::before {\n content:' ';\n font-size: 50%;\n border-top: 1px solid #aaa;\n display: block;\n margin-right: auto;\n margin-left: -15px;\n width: 3.0em;\n}\n\n// special handling for code-display as it appears inside .paras\n// and may need space around it\n.code-display {\n margin: 0.5em 0;\n}\n// if inside clipboardable, move margin to that container and turn some into padding\n// to help make sure clipboard icon is contained inside the code-display in dark mode\n.clipboardable:has(.code-display) {\n margin: 0.25em 0;\n\n .code-display {\n margin: 0;\n padding: 0.25em 0;\n }\n}\n\n\n.clipboardable {\n position: relative; // To anchor the code-copy button\n display: flow-root;\n\n .code-copy {\n position: absolute;\n right: 0;\n top: 0;\n opacity: 0.25;\n border-width: 0;\n background: none;\n cursor: pointer;\n z-index: 1;\n white-space-collapse: collapse;\n padding: 1px;\n scale: 0.85;\n\n &:hover {\n opacity: 0.7;\n }\n\n .checkmark {\n display: none;\n }\n\n &.copied {\n opacity: 1;\n color: mediumseagreen;\n cursor: not-allowed;\n pointer-events: none;\n\n .copyicon {\n display: none;\n }\n\n .checkmark {\n display: inline;\n }\n }\n }\n}\n\n@media print {\n .code-copy {\n display: none;\n }\n}\n", "@use '../chunks/codelike';\n\n// Prism stylesheets built locally as default ones don't support light/dark switching\n// this is a merged version of the default and dark themes\n\n// Default prism styling\n// Blocks\npre[class*=\"language-\"] {\n margin: 0;\n overflow: auto;\n border: 1px solid #e1e1e1;\n}\n\n// Inline code\n:not(pre) > code[class*=\"language-\"] {\n padding: .1em;\n border-radius: .3em;\n white-space: normal;\n}\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n color: black;\n background: #fdfdfd;\n text-shadow: none;\n font-family: var(--font-monospace);\n text-align: left;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n word-wrap: normal;\n line-height: 1.2;\n tab-size: 4;\n hyphens: none;\n\n &.code-inline {\n // unclobber some inline code styles\n @include codelike.code-inline-spacing();\n }\n\n &::selection,\n & ::selection {\n background: #b3d4fc;\n }\n\n .token {\n \n &:is(.comment,\n .prolog,\n .doctype,\n .cdata) {\n color: #2a9716;\n }\n \n &.punctuation {\n color: #000;\n }\n \n &.namespace {\n opacity: .9;\n }\n \n &:is(.property,\n .tag,\n .boolean,\n .number,\n .constant,\n .symbol,\n .deleted) {\n color: rgb(41, 120, 15);\n }\n \n &:is(.selector,\n .attr-name,\n .string,\n .char,\n .builtin,\n .regex,\n .inserted) {\n color: #a11;\n }\n \n &:is(.operator,\n .entity,\n .url) {\n color: #000;\n background: none;\n }\n \n &:is(.atrule,\n .attr-value,\n .keyword) {\n color: #0679B7;\n }\n \n &.function,\n &.class-name {\n color: #30a;\n }\n \n &.important,\n &.variable {\n color: rgb(0, 0, 0);\n }\n \n \n &.important,\n &.bold {\n font-weight: bold;\n }\n \n &.italic {\n font-style: italic;\n }\n \n &.entity {\n cursor: help;\n }\n }\n \n // -------------------------------------------\n // Line numbers\n &.line-numbers {\n position: relative;\n padding-left: 3.8em;\n counter-reset: linenumber;\n overflow: auto;\n \n > code {\n position: relative;\n white-space: inherit\n }\n \n .line-numbers-rows {\n position: absolute;\n pointer-events: none;\n top: 0;\n font-size: 100%;\n left: -3.8em;\n width: 3em;\n letter-spacing: -1px;\n border-right: 1px solid #999;\n user-select: none\n }\n \n .line-numbers-rows > span {\n display: block;\n counter-increment: linenumber\n }\n \n .line-numbers-rows > span::before {\n content: counter(linenumber);\n color: #999;\n display: block;\n padding-right: .8em;\n text-align: right\n }\n }\n \n \n // -------------------------------------------\n // Line highlighting\n .line-highlight {\n position: absolute;\n margin-top: 4px; // tune to match padding of containing pre\n left: 0;\n right: 0;\n padding: inherit 0;\n font-size: inherit;\n background: hsla(24, 20%, 50%, 8%);\n pointer-events: none;\n line-height: inherit;\n white-space: pre\n }\n}\n\n// -------------------------------------------\n// Dark mode\n:root.dark-mode {\n \n /* Code blocks */\n pre[class*=\"language-\"] {\n border: 1px solid #3d3d3d;\n }\n \n \n // Darker styling to match Runesone's code mirror theme\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n color: white;\n background: hsl(0, 0%, 8%);\n \n &::selection,\n & ::selection {\n background: hsl(200, 4%, 16%);\n }\n \n /* Make the tokens sit above the line highlight so the colours don't look faded. */\n .token {\n position: relative;\n z-index: 1;\n \n &:is(.comment,\n .prolog,\n .doctype,\n .cdata) {\n color: #68a950;\n }\n \n &.punctuation {\n color: white;\n opacity: 1;\n }\n \n &.namespace {\n opacity: .9;\n }\n \n &:is(.property,\n .tag,\n .boolean,\n .number,\n .constant,\n .symbol,\n .deleted) {\n color: #abc792;\n }\n \n &:is(.selector,\n .attr-name,\n .string,\n .char,\n .builtin,\n .regex,\n .inserted) {\n color: #ca9147;\n }\n \n &:is(.operator,\n .entity,\n .url) {\n color: white;\n }\n \n &:is(.atrule,\n .attr-value,\n .keyword) {\n color: #2d94fb;\n }\n \n &.function,\n &.class-name {\n color: #e3e1c2;\n }\n \n &.important,\n &.bold {\n font-weight: bold;\n }\n \n &.italic {\n font-style: italic;\n }\n \n &.entity {\n cursor: help;\n }\n \n }\n }\n \n .line-highlight {\n background: hsla(0, 0%, 33%, 10%);\n border-bottom: 1px dashed hsl(0, 0%, 33%);\n border-top: 1px dashed hsl(0, 0%, 33%);\n z-index: 0;\n }\n}\n\n@media print {\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n .line-highlight {\n color-adjust: exact\n }\n }\n}\n", "// TODO - refactor\n\n.displaymath {\n overflow-x: auto;\n overflow-y: hidden;\n}\n\n.displaymath mjx-container[jax=\"CHTML\"][display=\"true\"] {\n margin: 0 0 0 0; // container is going to apply margin, so remove it from mjx-container\n padding-top: 2px; // Chrome sometimes clips the top 1-2 pixels of math after it has been scaled - provide room for that content\n}\n\n.process-math mjx-container svg {\n // remove the background that is normally applied to svg's by PreTeXt CSS\n // we use .process-math instead of .displaymath to get inline math as well.\n background: none;\n}\n\n// ?\n[data-knowl] > mjx-mrow .TEX-I {\n font-family: MJXZERO !important;\n font-style: normal !important;\n}\n\n/* remove this when MathJax fixes the bug that was setting the width to 0 */\n/* as in $x=0$. becomes $x=0\\text{.}$ */\n.knowl mjx-mtext > mjx-utext,\nmjx-mtext > mjx-utext {\n width: revert !important;\n}\nmjx-msup mjx-utext,\nmjx-msub mjx-utext {\n display: inline;\n}\n", "// TODO - refactor\n$opacity: 0.0 !default;\n\n/*\nSo that we can position things (like .autopermalink) absolutely wrt these items.\nAny element whose permalink should be positioned directly to the left of it\nshould be in this list.\n*/\nsection,\narticle,\nli,\nblockquote,\nfigcaption,\ndt,\n.exercisegroup,\n.discussion-like,\n.solution-like,\n.para {\n position: relative;\n}\n\n.autopermalink {\n position: absolute;\n display: inline-block;\n top: 0.5ex;\n left: -2em;\n font-size: 85%;\n // variable allows theme to set different opacities for dark/light\n opacity: var(--permalink-opacity, $opacity);\n transition: opacity 0.2s;\n margin-top: 0 !important;\n}\n\nli > .autopermalink {\n left: -3.5em;\n}\n\n.autopermalink > * {\n padding-left: 0.2em;\n padding-right: 0.2em;\n}\n\n\n// Move permalink for division titles etc a little bit lower\n.appendix > .autopermalink,\n.chapter > .autopermalink,\n.index > .autopermalink,\n.section > .autopermalink,\n.subsection > .autopermalink,\n.references > .autopermalink,\n.exercises > .autopermalink {\n top: 1.5ex;\n}\n\n// In some styles, the autopermalink for paras land right on the border line.\n// This is an attempt to fix that. TODO: find a more robust solution, maybe\n// using a variable for the left offset of paras inside blocks.\n.assemblage-like > .para > .autopermalink,\n.example-like > .para > .autopermalink,\n.example-like > .exercise-like > .autopermalink,\n.project-like > .para > .autopermalink,\n.project-like > .exercise-like > .autopermalink,\n.project-like > .exercise-like > .introduction > .para > .autopermalink,\n.project-like > .exercise-like > .conclusion > .para > .autopermalink,\n.remark-like > .para > .autopermalink {\n left: -2.9em;\n}\n\n\n.axiom-like, .example-like, .exercise-like, .solution-like, .assemblage-like, .definition-like, .remark-like, .project-like, .openproblem-like, .computation-like, .theorem-like, .proof, .case, li, dd {\n > .para:first-of-type > .autopermalink {\n display:none;\n }\n\n > .introduction > .para:first-of-type > .autopermalink {\n display:none;\n }\n}\n\n\n// Hover effects\n\n.ptx-content:has(.autopermalink:hover) .autopermalink {\n opacity: 0.2;\n}\n\n.ptx-content:has(.autopermalink:hover) .autopermalink:hover {\n opacity: 1;\n}\n\n.autopermalink:has(a:focus-visible) {\n opacity: 1;\n}\n\n.permalink-alert {\n position: absolute;\n top: -3em;\n left: 5em;\n padding: 1.5em 2em;\n background: var(--content-background);\n border: 3px solid var(--page-border-color);\n z-index: 2001;\n}\n\n\n/* when jumping to a permalink, push down so sticky navbar does not cover */\n:target {\n scroll-margin-top: 45px;\n // the \"pink flash\" when navigating to a target\n animation: target-fade 10s 1;\n}\n\n@keyframes target-fade {\n 0% { background-color: var(--activated-content-bg) }\n 100% {\n background-color: inherit;\n opacity: 1;\n }\n}\n", "\n// Miscellaneous stylized content blocks that are not complex enough\n// to warrant their own file\n\nem.alert {\n font-weight: bold;\n}\n\n.bib {\n margin-top: 0.25em;\n\n .bibitem {\n display: inline-block;\n vertical-align: top;\n width: 7%;\n margin-right: 0;\n }\n \n .bibitem + .bibentry {\n display: inline-block;\n width: 90%;\n margin-top: 0;\n }\n}\n\n\n\n.caption {\n margin-top: 10px;\n margin-left: auto;\n margin-right: auto;\n font-size: 100%;\n text-align: center;\n}\n\n\n.contributor {\n margin-top: 1.5ex;\n\n &:first-child {\n margin-top: 0em;\n }\n\n & + .para {\n margin-top: 3ex;\n }\n\n .contributor-name {\n font-variant: small-caps;\n }\n\n .contributor-info {\n font-size: 88%;\n font-style: italic;\n margin-left: 3ex;\n }\n}\n\n\n// Icon font settings\n.material-symbols-outlined {\n font-variation-settings:\n 'FILL' 0,\n 'wght' 400,\n 'GRAD' 0,\n 'opsz' 24\n}\n\n\niframe {\n margin: 0;\n border: none;\n}\n\n\n.kbdkey {\n background: #f1f1f1;\n color: #333;\n border: 1px solid #dddddd;\n border-radius: 3px;\n padding: 1px 2px 0 2px;\n vertical-align: 0.1em;\n font-size: 110%;\n line-height: 1;\n box-shadow: 2px 2px grey;\n display: inline-block;\n margin-right: 3px;\n}\n\n\n.unit,\n.quantity {\n white-space: nowrap;\n word-spacing: -0.25ex;\n margin-right: 0.125em;\n\n sub, sup {\n word-spacing: normal;\n }\n}\n\n\n.terminology {\n font-style: italic;\n font-weight: bold;\n}\n\n\n\n.times-sign {\n font-size: larger;\n vertical-align: -0.15ex;\n}\n\n\n.emphasis {\n font-style: italic;\n\n .emphasis {\n font-weight: bold;\n }\n}\n\n.definition-like .emphasis {\n font-weight: 700;\n}\narticle.theorem-like .emphasis {\n font-weight: 700;\n}\n\n.para {\n line-height: 1.35;\n}\n\n.hidden {\n display: none !important;\n}\n\n/* genus and species in italics */\n.taxon {\n font-style: italic;\n}\n\n.quote {\n padding-left: 40px;\n padding-right: 10px;\n margin-bottom: 1em;\n}\n\n.booktitle {\n font-style: oblique;\n}\n\n/* Adapted from William Hammond (attributed to David Carlisle) */\n/* \"mathjax-users\" Google Group, 2015-12-27 */\n\n.latex-logo {font-family: \"PT Serif\", \"Times New Roman\", Times, serif;}\n\n.latex-logo .A {font-size: 75%; text-transform: uppercase; vertical-align: .5ex;\n margin-left: -.48em; margin-right: -.2em;}\n\n.latex-logo .E {vertical-align:-.5ex; text-transform: uppercase;\n margin-left: -.18em; margin-right: -.12em; }\n", "// Basic rules for printing a standard PreTeXt page\n\n// Get rid of UI elements.\n// Leave margin fiddling for system print dialog.\n\n// Worksheet and handout printing is handled in print-worksheet.scss\n\n@media print {\n .pretext .ptx-masthead,\n .pretext .ptx-navbar,\n body.pretext > a.assistive,\n .pretext .ptx-page > .ptx-sidebar,\n .pretext .ptx-page-footer,\n .pretext .ptx-main > div.ptx-content-footer {\n display:none;\n }\n\n .ptx-page, .ptx-main, .ptx-main .ptx-content {\n all: unset !important;\n width: 100%;\n border: none;\n padding: 0;\n margin: 0;\n }\n\n .ptx-sagecell, .tabular, .table-like, .figure-like, .exercise-like {\n break-inside: avoid;\n }\n\n .heading {\n break-after: avoid;\n }\n\n .code-inline {\n border: unset;\n background: unset;\n }\n\n @page {\n margin: 0.75in 0.75in 0.75in 0.75in;\n }\n}\n", "// TODO refactor\n\n// Rules in this file apply to both screen and print\n// Print specific rules should go in a file in targets/print-worksheet stylesheet\n@use 'components/helpers/buttons-default' as buttons;\n\n.heading .print-links {\n float: right;\n vertical-align: bottom;\n .print-link {\n font-family: var(--font-body);\n padding: 0.1em 0.2em;\n }\n .material-symbols-outlined {\n margin-top:5pt;\n }\n}\n\n", "// TODO - refactor\n// Make conditional on use of google search???\n\n.pretext .searchwrapper {\n max-width: 900px;\n position: absolute;\n right: 0;\n bottom: 0;\n margin-bottom: 39px;\n}\n\n.pretext .searchwrapper .cse .gsc-control-cse,\n.pretext .searchwrapper .cse .gsc-control-cse input,\n.searchwrapper .gsc-control-cse {\n padding: 5px;\n}\n\n// .pretext .searchwrapper .cse .gsc-search-button input.gsc-search-button-v2,\n// .searchwrapper input.gsc-search-button-v2 {\n// padding: 2px 2px;\n// }\n\n// .pretext .searchwrapper form.gsc-search-box {\n// margin: 0;\n// }\n\n// .pretext .searchwrapper table.gsc-search-box {\n// margin: 0;\n// }\n\n// .pretext .searchwrapper .gsc-search-box-tools .gsc-search-box .gsc-input {\n// padding: 0;\n// }\n\n// .pretext .searchwrapper .gsib_a {\n// padding: 0 0 0 5px;\n// }\n\n// .pretext .searchwrapper .gsc-input-box {\n// height: 3.0ex;\n// }\n\n// .pretext .searchwrapper form.gsc-search-box {\n// font-size: 12px;\n// }\n", "\n@use 'components/helpers/buttons-default' as buttons;\n\n.searchbox {\n\n .searchwidget {\n height: 100%;\n }\n \n .searchresultsplaceholder {\n position: fixed;\n top: 5vh;\n bottom: 5vh;\n padding: 1em;\n left: max(10vw, calc(100vw - 800px) / 2);\n width: 80vw;\n max-width: 800px;\n border: 2px solid var(--body-text-color);\n background: var(--knowl-background, #eaf0f6);\n z-index: 5000;\n display: flex;\n flex-direction: column;\n }\n\n .searchresultsplaceholder article {\n width: 60%;\n margin-left: auto;\n margin-right: auto;\n font-family: sans-serif;\n }\n\n .search-results-controls {\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n gap: 10px;\n margin-bottom: 1em;\n height: 35px;\n }\n\n .ptxsearch {\n flex: 1 1;\n }\n \n\n .closesearchresults {\n @include buttons.ptx-button;\n }\n\n .detailed_result {\n margin-bottom: 10px;\n }\n\n .searchresults a:hover {\n text-decoration: underline;\n background: var(--link-active-background);\n }\n\n\n .searchresults {\n padding-left: 10px;\n margin-top: 0;\n overflow-y: auto;\n flex: 1 1;\n background: var(--content-background, white);\n border: 1px solid var(--page-border-color, #ccc);\n }\n\n .searchresults:empty {\n display: none;\n }\n \n .search-result-bullet {\n list-style-type: none;\n }\n\n .search-result-score {\n display: none;\n }\n\n //result qualities\n .no_result {\n font-size: 90%;\n font-weight: 200;\n }\n\n .low_result {\n font-weight: 200;\n }\n\n .medium_result {\n font-weight: 500;\n }\n .high_result {\n font-weight: 700;\n }\n\n .searchempty {\n display: none;\n padding-left: 10px;\n padding-top: 5px;\n }\n\n .search-results-unshown-count {\n margin-top: 0.6em;\n }\n\n .search-result-clip-highlight {\n background: var(--searchresultshighlight);\n }\n\n .searchresultsbackground {\n position: fixed;\n top: 0;\n background: var(--searchresultsbackground, white);\n width: 100vw;\n height: 100%;\n left: 0;\n z-index: 4999;\n }\n\n @media screen and (max-width: 800px) {\n .searchresultsplaceholder {\n bottom: 10vh;\n }\n }\n}\n\n:root {\n --searchresultsbackground: #fff8;\n --searchresultshighlight: rgba(255, 255, 0, 50%);\n}\n\n:root.dark-mode {\n --searchresultsbackground: #0008;\n --searchresultshighlight: rgba(255, 255, 0, 15%);\n}\n", "$border-radius: 0 !default;\n\n@mixin ptx-button(\n $border-radius: $border-radius\n) {\n font: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0 10px;\n gap: 10px;\n min-height: 34px;\n color: var(--button-text-color);\n background-color: var(--button-background);\n border-width: 1px;\n border-color: var(--button-border-color);\n border-style: solid;\n border-radius: $border-radius;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n\n // Disable accidental text-selection\n user-select: none;\n\n &:hover:not(.disabled) {\n color: var(--button-hover-text-color);\n background-color: var(--button-hover-background);\n }\n\n &:focus-visible {\n outline: 2px solid var(--button-text-color);\n outline-offset: -2px;\n }\n\n &.disabled {\n opacity: .4;\n cursor: not-allowed;\n }\n\n &.hidden {\n display: none;\n }\n\n &.open {\n color: var(--button-hover-text-color);\n background-color: var(--button-hover-background);\n }\n}\n\n@mixin ptx-dropdown-button {\n position: relative;\n\n .dropdown-content {\n display: none;\n position: absolute;\n background-color: var(--dropdown-background);\n min-width: 160px;\n z-index: 100;\n border: 1px solid var(--dropdown-border-color);\n right: 0;\n top: 35px;\n text-align: start;\n padding: 0;\n\n a {\n display: block;\n text-decoration: none;\n color: var(--dropdown-text-color);\n padding: 2px 8px;\n\n &:is(:hover, :focus-visible) {\n background-color: var(--dropdown-hover-background);\n color: var(--dropdown-hover-text-color);\n }\n }\n\n hr {\n color: var(--dropdown-border-color);\n margin: 4px 0;\n }\n }\n\n &:is(:hover, :focus-visible, :focus-within) {\n overflow: visible;\n\n .dropdown-content {\n display: block;\n }\n }\n}\n", "// extra specific to override Runestone margin\n.ptx-content .ptx-runestone-container .runestone {\n margin: unset;\n border-radius: 0;\n border-width: 1px;\n}\n\n// avoid label splitting into multiple lines\n.multiplechoice_section label > .para {\n display: inline;\n}\n\n// extra specific to override Runestone margin\n.ptx-content .ptx-runestone-container .ac_question { \n max-width: var(--base-content-width);\n margin: 0 auto 10px;\n}\n\n.runestone .runestone_caption {\n // caption is always just something like \"ActiveCode\" in PTX\n display: none;\n}\n\n\n/* to undo Runestone's draganddrop.css */\n.ptx-content .ptx-runestone-container .rsdraggable {\n font-size: 100%;\n}\n\n// Unsure if still needed\n/* hack for runestone */\n/* to undo Runestone's presentermode.css */\n.ptx-content .bottom {\n position: unset;\n}\n\n// override Runestone's pre formatting with these extra specific rules\n.ptx-runestone-container .runestone code,\n.ptx-runestone-container .runestone pre {\n font-size: .93rem;\n line-height: 1.2;\n font-family: var(--font-monospace);\n}\n\n// override Runestone's pre formatting with these extra specific rules\n.ptx-runestone-container code[class*=\"language-\"],\n.ptx-runestone-container pre[class*=\"language-\"] {\n color: black;\n background: #fdfdfd;\n}\n\n//Fixup datafile captions\n.runestone.datafile {\n .datafile_caption {\n background: var(--code-inline-background);\n border: 1px solid color-mix(in oklab, var(--code-inline-background) 50%, #888);\n display: block;\n width: fit-content;\n margin: 0 auto;\n }\n img {\n margin: 0 auto;\n display: block;\n border: 1px solid color-mix(in oklab, var(--code-inline-background) 50%, #888);\n }\n pre, textarea {\n margin: 0 auto;\n border: 1px solid color-mix(in oklab, var(--code-inline-background) 50%, #888);\n background-color: var(--page-color);\n }\n}\n.runestone.datafile + .program {\n margin-top: 0;\n}\n\n// RS does not care what kind of element is used\n// PTX chooses to use a ul, so we will fix margins for it here instead of RS\nul[data-component=\"timedAssessment\"] {\n margin: 0;\n padding: 0;\n}\n\n:root.dark-mode {\n // Darker styling to match Runesone's code mirror theme\n .ptx-runestone-container code[class*=\"language-\"],\n .ptx-runestone-container pre[class*=\"language-\"] {\n color: white;\n background: hsl(0, 0%, 8%);\n }\n}\n", "// TODO - needs refactoring and dark mode update\n\n@use 'components/helpers/buttons-default' as buttons;\n\n/* WW problems */\n.ptx-content .wwprob table.attemptResults {\n margin-left: 2em;\n background: #efefef;\n padding: 0.2em;\n}\n\n.ptx-content .wwprob table.attemptResults + .attemptResultsSummary {\n margin-top: 1em;\n}\n\n.ptx-content .wwprob .problem-main-form {\n margin-top: 1em;\n background: #eeeeff;\n padding: 0.5em;\n}\n\n.ptx-content .wwprob td.ResultsWithoutError {\n background: #9f9;\n}\n\n.ptx-content .wwprob td.ResultsWithError {\n background: #f99;\n}\n\n.ptx-content .wwprob tr th {\n text-align: center;\n padding: 0.2em 1em 0.2em 1em;\n}\n\n.ptx-content .wwprob tr td {\n text-align: center;\n}\n\n.ptx-content .wwprob tr td:empty {\n background: #fff;\n}\n\n.ptx-content .wwprob ol,\n.ptx-content .wwprob ul {\n margin-top: 0.75em !important;\n}\n\n.ptx-content .wwprob .problem {\n background: #fdfdfd;\n}\n\n.ptx-content .wwprob .problem a {\n text-decoration: none;\n}\n\n.ptx-content .wwprob #footer {\n font-size: 70%;\n text-align: right;\n}\n\n/* interactive WeBWorK */\n\nlabel.webwork {\n display: inline-flex;\n flex-direction: column;\n}\n\nlabel.correct .status {\n background-color: #a0f0a0;\n}\n\nlabel.partly-correct .status {\n color: #ffcc66;\n}\n\nlabel.incorrect .status {\n color: #b00;\n}\n\nlabel.incorrect .status::before {\n content: \" \";\n}\n\nlabel.feedback {\n word-wrap: break-word;\n}\n\nlabel.correct .feedback {\n background-color: #00ffcc;\n}\n\nlabel.partly-correct .feedback {\n color: #ffcc66;\n}\n\nlabel.incorrect .feedback {\n color: #e07070;\n}\n\n.webwork img,\n.webwork + .knowl-output img {\n max-width: 100%;\n}\n\n// Make the default margin for items inside the exercise-wrapper similar to\n// default for items in a section\n.exercise-wrapper > *:not(:first-child) {\n margin-top: 1.5em;\n}\n\n.ptx-content .problem-buttons {\n display: flex;\n}\n\n.ptx-content .webwork-button {\n @include buttons.ptx-button;\n}\n\n//.hidden-content used to be used for knowls and got repurposed for hiding webwork contents\n// now just used by webwork\n.problem-buttons.hidden-content,\n.problem-contents.hidden-content {\n display: none;\n}\n", "// TODO - refactor\n\n.sagecell_sessionOutput pre {\n font-family: var(--font-monospace);\n}\n\n.sagecell {\n white-space: normal;\n margin-top: 1.25em;\n margin-bottom: 1.25em;\n}\n\n.sage-interact.sagecell {\n margin: 0;\n}\n\n.sagecell_evalButton {\n font-family: var(--font-body);\n font-size: 16px;\n padding: 0 0.65em;\n}\n\n.sagecell_evalButton {\n cursor: pointer;\n display: inline-block;\n vertical-align: middle;\n /* Disable accidental text-selection */\n user-select: none;\n /* Truncate overflowing text with ellipsis */\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-width: 1px;\n border-style: solid;\n font-weight: bold;\n border-radius: 3px;\n}\n\n.sagecell_evalButton {\n color: #383838;\n background-image: linear-gradient(#f7f7f7, #bbbbbb);\n border-color: #c4c4c4;\n}\n\n.sagecell_evalButton:hover {\n color: #181868;\n background-image: linear-gradient(#bbbbbb, #f7f7f7);\n}\n\n.sagecell_evalButton:focus,\n.sagecell_evalButton:active {\n color: #20160b;\n background-image: linear-gradient(#ff6852, #ffd7d1);\n border-color: #ff2822;\n}\n\n.sagecell .sagecell_editor {\n margin-bottom: 8px;\n}\n\n.sageanswer {\n font-family: monospace;\n white-space: pre;\n margin-left: 3em;\n margin-bottom: 2em;\n}\n\n.sageanswer .key {\n display: inline-block;\n vertical-align: top;\n margin-right: 1em;\n}\n\n.sageanswer .output {\n display: inline-block;\n vertical-align: top;\n}\n", "// GeoGebra calculator\n\n$navbar-breakpoint: 856px !default;\n\n.calculator-container {\n position: fixed;\n z-index: 100;\n bottom: 5px;\n right: 5px;\n width: 253px;\n height: 460px;\n}\n\n@media screen and (max-width: $navbar-breakpoint) {\n .calculator-container {\n //assumes navbar moves to bottom of screen\n bottom: 50px !important;\n }\n}\n", "// --------------------------------------------------------------------------\n// Flexible / centered widening of other components\n\n// options should already be set in a previous @use\n@use 'components/helpers/expandable';\n\n$top-level-containers: \".chapter, .section, .subsection, .subsubsection\" !default;\n\n:is(#{$top-level-containers}) > .tabular-box,\n:is(#{$top-level-containers}) > .table > .tabular-box {\n @include expandable.expandable;\n}\n\n// get rid of indentation for tablular figures, interferes with centering wide elements\nfigure.table-like {\n margin-left: 0px;\n margin-right: 0px;\n}\n", "// Styling for elements in ptx-main that are allowed to expand past normal width\n// of ptx-content.\n\n// Assumes that $content-padding is set to the padding of ptx-content\n// and that element normally takes up 100% of parent width. (Like display-math)\n\n// for responsive elements\n$width-hard-cap: 900px !default;\n$base-content-width: 600px !default;\n$content-padding: 48px !default;\n$always-expand: false !default; // whether to always expand to the max width\n$centered: false !default; // whether to center the content if not max width\n$content-with-padding-width: $base-content-width + 2 * $content-padding;\n\n// for scrollable\n$overflow-y-scroll: hidden !default;\n\n\n// An element that has some minimum authored width which may be larger\n// than the available width. We want it to scroll horizontally.\n@mixin scrollable(\n $overflow-y-scroll: $overflow-y-scroll\n) {\n overflow-x: auto;\n $overflow-y: $overflow-y-scroll;\n}\n\n// An element with no minimum width that we want to allow to expand\n// to whatever width is available to maximize the display area.\n@mixin responsive(\n $base-content-width: $base-content-width,\n $width-hard-cap: $width-hard-cap,\n $content-padding: $content-padding,\n $always-expand: $always-expand,\n $centered: $centered\n) {\n @container ptx-main (width > #{$base-content-width + 2 * $content-padding}) {\n --max-width: calc(min((100cqw - 2 * #{$content-padding}), #{$width-hard-cap}));\n min-width: 100%;\n clear: right; // clear any floats\n @if $always-expand {\n width: var(--max-width);\n } @else {\n width: fit-content; //grow if space needed\n }\n max-width: var(--max-width);\n @if $centered {\n margin-left: calc(-0.5 * (100cqw - #{$content-with-padding-width}));\n }\n }\n}\n\n// An element that has some minimum authored width which we want to allow to expand\n// to whatever width is available to maximize visible content.\n// Content that is still not visible will be scrollable.\n@mixin expandable(\n $base-content-width: $base-content-width,\n $width-hard-cap: $width-hard-cap,\n $content-padding: $content-padding,\n $always-expand: $always-expand,\n $centered: $centered,\n $overflow-y-scroll: $overflow-y-scroll\n) {\n @include scrollable(\n $overflow-y-scroll: $overflow-y-scroll\n );\n @include responsive(\n $base-content-width: $base-content-width,\n $width-hard-cap: $width-hard-cap,\n $content-padding: $content-padding,\n $always-expand: $always-expand,\n $centered: $centered\n );\n}\n", "// Body level styling\n$max-width: 1200px !default; // 0 == no max width\n\n$content-width: 600px !default; // without padding\n$content-side-padding: 48px !default;\n$centered-content: false !default;\n\n$footer-button-border-radius: 0 !default;\n\n$content-with-padding-width: $content-width + 2 * $content-side-padding;\n\n@use 'components/helpers/buttons-default' as buttons;\n\n// set content width up as a CSS variables so other files can ask\n// \"how wide is standard content?\"\n:root {\n --base-content-width: #{$content-width};\n --content-padding: #{$content-side-padding};\n}\n\n// hits regular pages and generated iframe pages\nbody {\n margin: 0;\n min-height: 100vh;\n\n display: flex;\n flex-direction: column;\n align-items: stretch;\n\n &.pretext {\n color: var(--body-text-color);\n font-family: var(--font-body);\n }\n}\n\n.ptx-page {\n position: relative;\n display: flex;\n flex-grow: 1; // fill space in body\n width: 100%;\n}\n\n.ptx-main {\n flex-grow: 1;\n position: relative;\n max-width: 100%;\n container-name: ptx-main; // for container queries elsewhere\n container-type: inline-size; // for container queries elsewhere\n}\n\n// Base width/padding\n// ptx-main ensures iframe pages don't get these\n.ptx-main .ptx-content {\n max-width: $content-with-padding-width; // bad for worksheets\n padding: 24px $content-side-padding 60px;\n\n @if $centered-content {\n margin-left: auto;\n margin-right: auto;\n }\n}\n.worksheet .ptx-main .ptx-content {\n max-width: 960px;\n}\n\n@if $max-width > 0 {\n .ptx-page {\n max-width: $max-width;\n margin-left: auto;\n margin-right: auto;\n }\n}\n\nbody.pretext,\nbody.standalone {\n margin: 0;\n padding: 0;\n font-size: 16px;\n background: var(--page-color, white);\n}\n\n\nbody.pretext > a.assistive {\n padding:6px;\n position: absolute;\n top:-40px; // hide off screen until keyboard focus\n left: 0px;\n color:white;\n border-right:1px solid white;\n border-bottom:1px solid white;\n border-bottom-right-radius:8px;\n background:#BF1722; // always have correct contrast\n z-index: 10000;\n\n &:focus {\n top:0px; // move into view when keyboard focus\n outline:0;\n transition: top .1s ease-in, background .5s linear;\n }\n}\n\n\n.ptx-content-footer {\n display: flex;\n justify-content: space-around;\n max-width: $content-with-padding-width;\n\n padding-top: 2em;\n padding-bottom: 2em;\n padding-left: $content-side-padding;\n padding-right: $content-side-padding;\n\n @if $centered-content {\n margin-left: auto;\n margin-right: auto;\n }\n\n .button {\n @include buttons.ptx-button(\n $border-radius: $footer-button-border-radius\n );\n .icon {\n margin: 0 -7px; // current icons have lots of whitespace\n }\n }\n}\n", "//Some basic variables\n$centered-content: true !default;\n$scrolling-toc: true !default;\n$nav-height: 36px !default;\n$navbar-breakpoint: 800px !default;\n\n//The following variables represent the *max* width of everything. When the screen shrinks, we will reduce some of these.\n\n// The sidebar contains the TOC. It is left of the page, with a right-margin to separate it.\n$sidebar-width: 240px !default;\n$sidebar-right-margin: 80px !default;\n$sidebar-total-width: $sidebar-width + $sidebar-right-margin;\n\n// ptx-content contains the main content. It is contained in ptx-main\n$content-width: 600px !default;\n$content-side-padding: 120px !default;\n$content-side-padding-tight: 20px !default;\n\n$sidebar-breakpoint: $content-width + $sidebar-total-width + 24px; // a little extra for padding\n\n// ptx-main contains the ptx-content and footer. It has a width equal to the content plus the content's margins.\n// There is a right margin that counters the size of the sidebar+sidebarmargin.\n$main-width: $content-width + (2 * $content-side-padding);\n$main-right-margin: $sidebar-total-width;\n\n// ptx-page contains the sidebar and ptx-main. It's width is the sum of main, main-right-margin, and sidebar-total-width.\n$page-width: $sidebar-total-width + $main-width + $main-right-margin;\n\n@use 'components/page-parts/body' with (\n $max-width: $page-width,\n $content-width: $content-width,\n $content-side-padding: $content-side-padding,\n $centered-content: $centered-content,\n);\n\n@use 'components/page-parts/banner' with (\n $max-width: $main-width,\n $navbar-breakpoint: $navbar-breakpoint,\n);\n\n@use 'components/page-parts/navbar' with (\n $max-width: $main-width,\n $nav-height: $nav-height,\n $navbar-breakpoint: $navbar-breakpoint,\n);\n\n@use 'components/page-parts/toc-default' with (\n $scrolling: $scrolling-toc,\n $sidebar-width: $sidebar-width,\n $sidebar-breakpoint: $sidebar-breakpoint,\n $navbar-breakpoint: $navbar-breakpoint,\n);\n\n@use 'components/page-parts/extras/toc-hidden-scrollbar';\n\n//@use 'summary-links';\n@use 'components/page-parts/footer' with (\n $navbar-breakpoint: $navbar-breakpoint,\n);\n\n@use '../salem/rs-widen';\n\n// now handle smaller screens for rs elements\n@media (width < 850px) {\n @include rs-widen.smaller-screen-widening;\n}\n\n\n.ptx-main {\n margin-right: $sidebar-total-width;\n}\n\n.ptx-sidebar.hidden + .ptx-main {\n margin-left: $sidebar-total-width;\n}\n\n\n// .ptx-main is the center column - apply page shadow to it\n.ptx-main {\n // The color of the shadow is mostly gray, but with a slight tint of the primary color\n box-shadow: 5px 10px 40px -10px var(--primary-color-gray-80);\n}\n@media (prefers-color-scheme: dark) {\n .ptx-main {\n // Dark mode shadow is just black\n box-shadow: 5px 10px 40px -10px black;\n }\n}\n\n\n\n// visually shift the sidebar off the page\n.ptx-sidebar {\n //transform: translateX(-$sidebar-right-margin);\n margin-right: $sidebar-right-margin;\n}\n\n.ptx-navbar {\n border: none;\n\n // move contents button out of navbar-contents and align with sidebar\n .toc-toggle {\n transform: translateX(-$sidebar-total-width);\n position: absolute;\n left: 0;\n justify-content: left;\n }\n}\n\n.ptx-toc {\n border: none;\n position: sticky;\n top: $nav-height;\n}\n\n// Make expanded parts of TOC look more like subsections\n.toc-item.visible {\n font-size: .95em;\n padding-left: 8px;\n}\n\n.ptx-page {\n margin-top: 36px;\n margin-bottom: 36px;\n}\n\n// Sidebar hits the left side of page - need to lock it in place\n$sidebar-lock-breakpoint: $main-width + 2 * $sidebar-total-width;\n// @debug \"$sidebar-lock-breakpoint: #{$sidebar-lock-breakpoint}\";\n@media screen and (width <= $sidebar-lock-breakpoint) {\n .ptx-page {\n margin-left: 0;\n max-width: 100%;\n }\n .ptx-main {\n margin-right: calc(100% - $main-width - $sidebar-total-width);\n max-width: $main-width;\n }\n .ptx-sidebar.hidden + .ptx-main {\n margin-right: auto;\n margin-left: auto;\n }\n .ptx-navbar .ptx-navbar-contents {\n margin-left: $sidebar-total-width;\n }\n}\n\n// When the the main content is almost to the edge of the screen, we remove the drop-shadow\n// and change the layout strategy to center the content in what space is available\n// Sidebar no only consumes minimum required space as whitespace on left/right of main should be equal\n$page-border-breakpoint: $main-width + $sidebar-width + 2 * $sidebar-right-margin;\n// @debug \"page-border-breakpoint: #{$page-border-breakpoint}\";\n@media screen and (width <= $page-border-breakpoint) {\n // main is centered in page\n .ptx-main {\n box-shadow: unset;\n margin-right: auto;\n\n // shrink content padding\n .ptx-content {\n padding-left: $content-side-padding-tight;\n padding-right: $content-side-padding-tight;\n max-width: calc($content-width + 2 * $content-side-padding-tight);\n }\n }\n\n .ptx-sidebar {\n margin-right: 0;\n }\n\n // align toc-toggle with right edge of sidebar\n .ptx-navbar .ptx-navbar-contents {\n margin-left: $sidebar-width;\n }\n .ptx-navbar .toc-toggle {\n transform: translateX(-$sidebar-width);\n justify-content: center;\n }\n\n // Reset margins for page now that we don't show box-shadow\n .ptx-page {\n margin-top: unset;\n margin-bottom: unset;\n }\n\n // And lower TOC accordingly\n .ptx-toc {\n padding-top: 36px;\n\n }\n\n}\n\n\n// Now it is time to hide the sidebar unless requested\n$sidebar-hide-breakpoint: $content-width + 2 * $content-side-padding-tight + $sidebar-width;\n// @debug \"sidebar-hide-breakpoint: #{$sidebar-hide-breakpoint}\";\n@media screen and (width <= $sidebar-hide-breakpoint) {\n .ptx-sidebar {\n display: none;\n }\n}\n\n//Adjust again when navbar moves to bottom.\n@media screen and (max-width: $navbar-breakpoint) {\n // Undo modifications to toc-toggle and margin that held space for it\n .ptx-navbar .ptx-navbar-contents {\n margin-left: 0;\n }\n .ptx-navbar .toc-toggle {\n transform: none;\n position: relative;\n justify-content: center;\n }\n\n .ptx-content-footer {\n padding-left: $content-side-padding-tight;\n padding-right: $content-side-padding-tight;\n }\n}\n\n\n// TOC hover spans entire width of TOC item\n.toc-item:is(:hover, :focus) {\n color: var(--tocitem-highlight-text-color);\n background-color: var(--tocitem-highlight-background);\n border-color: var(--tocitem-highlight-border-color);\n}\n", "$max-width: 1200px !default; // 0 == no max width\n$navbar-breakpoint: 800px !default;\n$centered-content: false !default;\n\n.ptx-masthead {\n position: relative;\n background: var(--banner-background);\n width: 100%;\n display:flex;\n justify-content: center;\n\n .ptx-banner {\n border-top: 1px solid transparent;\n overflow: hidden;\n padding: 10px 10px;\n border-bottom: none;\n display:flex;\n width: 100%;\n align-items: center;\n @if $max-width > 0 {\n max-width: $max-width;\n }\n @if $centered-content {\n justify-content: center;\n }\n }\n\n a {\n color: var(--doc-title-color, #2a5ea4);\n }\n\n a:active {\n color: var(--link-active-text-color);\n }\n\n .title-container {\n font-family: var(--font-headings);\n font-size: 2em;\n padding-left: 9.68px;\n overflow: hidden;\n flex: 1;\n\n .heading {\n font-weight: 700;\n font-size: 100%;\n line-height: 1.25em;\n }\n\n .title:has(+ .subtitle)::after {\n content: \":\";\n }\n\n .subtitle {\n font-weight: normal;\n }\n }\n\n .logo-link {\n height: 5em;\n display: flex;\n\n img {\n max-height: 100%; //fix rendering bug on safari with large images\n }\n img[src$=\".svg\"] {\n height: 100%; //svg's in safari don't get a correct width with max-height\n // don't use this for all images as we wouldn't want to stretch raster images\n }\n }\n\n // // Insert a placeholder icon if the logo-link is empty\n // .logo-link:empty::before {\n // display: flex;\n // font-family: var(--font-body);\n // font-size: 4rem;\n // margin-top: -0.7rem;\n // content: \"\\2211\"; //sigma symbol\n // color: var(--page-border-color)\n // }\n\n .byline {\n color: var(--byline-color);\n font-weight: normal;\n margin: 0;\n font-size: 62.5%;\n min-height: inherit;\n }\n}\n\n@media screen and (max-width: $navbar-breakpoint) {\n .ptx-masthead {\n border-bottom: 1px solid var(--page-border-color);\n\n .ptx-banner {\n padding: 10px 28px;\n display: flex;\n justify-content: center;\n }\n\n .logo-link::before {\n font-size: 1rem;\n margin-top: 0;\n }\n\n .title-container {\n width: fit-content;\n flex: unset;\n .heading {\n line-height: 1em;\n\n .subtitle {\n /* Force the subtitle onto a separate line */\n display: block;\n font-size: 80%;\n line-height: 1em;\n }\n }\n }\n\n .byline {\n font-size: 50%;\n }\n }\n}\n\n\n@media screen and (width <= 480px) {\n .ptx-masthead {\n\n .title-container {\n padding: 0;\n text-align: center;\n font-size: 1em;\n }\n\n .logo-link {\n display: none;\n }\n\n .byline {\n display: none;\n }\n }\n}\n", "$max-width: 1200px !default; // 0 == no max width\n// applied to the contents of the navbar\n\n$nav-height: 36px !default;\n$border-width: 1px !default;\n$navbar-breakpoint: 800px !default;\n$center-content: true !default;\n\n@use 'components/helpers/buttons-default' as buttons;\n\n@use 'components/page-parts/extras/navbar-btn-borders';\n\n.ptx-navbar {\n position: sticky;\n top: 0;\n height: $nav-height;\n width: 100%;\n background: var(--navbar-background);\n border: 0;\n border-top: 1px solid var(--page-border-color);\n border-bottom: 1px solid var(--page-border-color);\n margin: 0;\n z-index: 500;\n overflow: visible;\n display: flex;\n\n .ptx-navbar-contents {\n position: relative;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n max-width: $max-width;\n @if $center-content {\n margin: 0 auto;\n }\n }\n\n .button {\n @include buttons.ptx-button;\n\n & {\n height: 100%; //always fill container\n // Disable normal borders - top/bottom provided by container\n // Use extras/_navbar-btn-borders.scss for side borders if desired\n border-width: 0;\n\n }\n }\n\n .toc-toggle {\n width: 240px;\n gap: 0.4em;\n margin-left: 0; //assumes is first button\n }\n\n :is(.treebuttons, .nav-runestone-controls, .nav-other-controls) {\n display: flex;\n }\n\n .treebuttons {\n flex: 1 1 210px;\n justify-content: end;\n }\n\n .nav-runestone-controls {\n flex: 1 1 70px;\n justify-content: end;\n }\n\n .pretext .navbar .dropdown {\n height: 34px;\n }\n\n .embed-popup {\n padding: 10px;\n background-color: var(--navbar-background);\n position: absolute;\n margin-top: $nav-height;\n border: 1px solid var(--page-border-color);\n border-radius: 3px;\n box-shadow: 0 0 5px var(--primary-color-gray-80);\n .embed-code-container {\n width: \"100%\";\n padding:5px;\n .embed-code-textbox {\n width: 100%;\n padding: 10px;\n height: 5em;\n }\n }\n }\n\n .treebuttons > * {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 75px;\n }\n\n .treebuttons .icon {\n margin: 0 -7px; // chevrons have lots of horizontal padding\n }\n\n :is(.index-button) .icon {\n display: none;\n }\n\n :is(.runestone-profile, .activecode-toggle, .searchbutton, .calculator-toggle, .light-dark-button, .embed-button) .name {\n display: none;\n }\n\n .index-button {\n min-width: 70px;\n }\n\n}\n\n// Button in the navbar, but needs to be less specific so not nested in previous\n.runestone-profile {\n @include buttons.ptx-dropdown-button;\n}\n\n@if $max-width > 0 {\n @media screen and (min-width: $max-width) {\n body.pretext .ptx-navbar {\n //forces navbar to line up cleanly with sidebar\n // need padding because there is no container around the items in navbar\n // padding: 0 calc((100% - $max-width) / 2);\n // border-left-width: 1px;\n\n // //tug contents of first button to left\n // & .ptx-navbar-contents > *:first-child {\n // justify-content: start;\n // }\n }\n }\n}\n\n@media screen and (max-width: $navbar-breakpoint) {\n @include navbar-btn-borders.navbar-btn-borders();\n\n .ptx-navbar {\n position: fixed;\n top: auto;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1100;\n background: var(--button-border-color);\n max-width: 100vw;\n\n .ptx-navbar-contents {\n max-width: 100vw;\n }\n\n .nav-runestone-controls {\n flex: 0;\n }\n\n .toc-toggle {\n flex: 2 1 100px;\n }\n\n .treebuttons {\n flex: 3 1 150px;\n /* 3:2 ratio with toc-toggle */\n }\n\n .treebuttons > * {\n flex: 1 1;\n min-width: 35px\n }\n\n .index-button {\n display: none;\n }\n\n .embed-popup {\n margin-top: unset;\n bottom: $nav-height;\n }\n\n .dropdown-content {\n top: unset;\n bottom: $nav-height;\n }\n\n :is(.toc-toggle, .previous-button, .up-button, .next-button, .calculator-toggle, .index-button, .embed-button) .name {\n display: none;\n }\n }\n}\n", "\n$border-width: 1px !default;\n\n@mixin navbar-btn-borders {\n .ptx-navbar {\n .button {\n border-left-width: $border-width;\n border-right-width: $border-width;\n border-color: var(--page-border-color);\n }\n \n & > *:not(:first-child) {\n //hide double borders\n margin-left: -1 * $border-width;\n }\n }\n}\n", "// shared toc styling used by _toc-default, etc...\n\n$sidebar-width: 240px !default;\n$nav-height: 36px !default;\n\n\n\n.ptx-sidebar {\n align-self: flex-start; // needed for sticky inside a flex\n\n &.visible {\n display: block;\n }\n\n &.hidden {\n display: none;\n height: 0;\n }\n}\n\n.ptx-toc {\n --codenumber-pad-left: 0.3rem;\n --codenumber-pad-right: 0.5rem;\n\n --toc-indent-first: calc(1.0rem + var(--codenumber-pad-left) + var(--codenumber-pad-right));\n --toc-indent-second: calc(1.7rem + var(--codenumber-pad-left) + var(--codenumber-pad-right));\n --toc-indent-third: calc(2.2rem + var(--codenumber-pad-left) + var(--codenumber-pad-right));\n\n background: var(--toc-background);\n\n margin: 0;\n font-size: 0.9rem;\n\n /* -------------------toc-items-------------------- */\n // will be less indentation, add some padding\n &:is(.depth1, .parts.depth2) {\n --codenumber-pad-right: 0.5rem;\n }\n\n .toc-item-list {\n margin: 0;\n padding: 0;\n list-style: none;\n background: var(--tocitem-background);\n\n .active {\n list-style: none; // clobber runestone css\n }\n }\n\n .toc-item {\n background-color: var(--tocitem-background);\n color: var(--toc-text-color);\n border-color: var(--toc-border-color);\n\n a {\n color: inherit;\n }\n\n // only highlight lowest level active item\n // need !important to override later depth based css\n &.active:not(:has(.toc-item.active)) {\n color: var(--tocitem-active-text-color) !important;\n background-color: var(--tocitem-active-background) !important;\n border-color: var(--tocitem-active-border-color) !important;\n }\n\n // hoving over a toc item\n & > .toc-title-box > a:is(:hover, :focus) {\n color: var(--tocitem-highlight-text-color);\n background-color: var(--tocitem-highlight-background);\n border-color: var(--tocitem-highlight-border-color);\n }\n }\n\n /* -------------------title-box------------------- */\n\n .toc-title-box {\n display: flex;\n }\n\n .toc-title-box > .internal {\n position: relative;\n display: flex;\n flex-grow: 1;\n padding: 0.2em;\n font-weight: 500;\n }\n\n /* at second level, switch fonts */\n .toc-item-list .toc-item-list .toc-title-box > .internal {\n font-weight: normal;\n }\n\n /* -------------------codenumbers-------------------- */\n .codenumber {\n min-width: var(--toc-indent-first);\n padding-left: var(--codenumber-pad-left);\n padding-right: var(--codenumber-pad-right);\n display: inline-block;\n text-align: left;\n flex-grow: 0;\n }\n}\n\n\n\n// --------------------------------------------------------------------------\n// Conditional styling based on depth\n\n.ptx-toc .toc-item {\n color: var(--toclevel1-text-color);\n background-color: var(--toclevel1-background);\n}\n\n.ptx-toc .toc-item .toc-item {\n color: var(--toclevel2-text-color);\n background-color: var(--toclevel2-background);\n}\n.ptx-toc .toc-item .toc-item .toc-item {\n color: var(--toclevel3-text-color);\n background-color: var(--toclevel3-background);\n}\n\n\n/* second level of numbering */\n/* anything 1+ levels deeper than a chapter in a book */\n.book .ptx-toc .toc-chapter .toc-item-list .codenumber,\n/* anything 1+ levels deeper than a section in an article */\n.article .ptx-toc .toc-section .toc-item-list .codenumber,\n/* anything 1+ levels deeper than backmatter */\n.ptx-toc .toc-backmatter .toc-item-list .codenumber {\n font-size: 80%;\n padding-top: 0.16em;\n min-width: var(--toc-indent-second);\n}\n\n/* third level of numbering */\n/* anything 2+ levels deeper than a chapter in a book */\n.book .ptx-toc .toc-chapter .toc-item-list .toc-item-list .codenumber,\n/* anything 2+ levels deeper than a section in an article */\n.article .ptx-toc .toc-section .toc-item-list .toc-item-list .codenumber,\n/* anything 2+ levels deeper than backmatter */\n.ptx-toc .toc-backmatter .toc-item-list .toc-item-list .codenumber {\n min-width: var(--toc-indent-third);\n visibility: hidden;\n}\n\n/* reveal hidden numbers on interaction */\n.ptx-toc .toc-item-list .toc-item-list .toc-item-list a:is(:hover, :focus) > .codenumber {\n visibility: visible;\n}\n\n/* Any toc item without a codenumber needs indentation\nCan't select absence of a preceeding, so indent all titles\nand then clear indent if there is a codenumber */\n.ptx-toc .toc-item .toc-title-box .title {\n margin-left: var(--toc-indent-first);\n}\n\n/* second level as defined by codenumber selectors */\n.book .ptx-toc .toc-chapter .toc-item-list .title,\n.article .ptx-toc .toc-section .toc-item-list .title,\n.ptx-toc .toc-backmatter .toc-item-list .title {\n margin-left: var(--toc-indent-second);\n}\n\n/* third level as defined by codenumber selectors */\n.book .ptx-toc .toc-chapter .toc-item-list .toc-item-list .title,\n.article .ptx-toc .toc-section .toc-item-list .toc-item-list .title,\n.ptx-toc .toc-backmatter .toc-item-list .toc-item-list .title {\n margin-left: var(--toc-indent-third);\n}\n\n/* unless there is a codenumber */\n.ptx-toc .toc-item > .toc-title-box .codenumber + .title {\n margin-left: 0 !important;\n}\n\n// --------------------------------------------------------------------------\n// Conditional styling based on depth\n\n\n.ptx-toc .toc-chapter .toc-item-list .title,\n.ptx-toc .toc-section .toc-item-list .title,\n/* 2 levels deep in back matter */\n.ptx-toc .toc-backmatter .toc-item-list .toc-item-list .title {\n font-size: 90%;\n}\n\n.ptx-toc .toc-chapter .toc-item-list .toc-item-list .title,\n.ptx-toc .toc-section .toc-item-list .toc-item-list .title,\n/* 3 levels deep in back matter */\n.ptx-toc .toc-backmatter .toc-item-list .toc-item-list .toc-item-list .title {\n font-style: italic;\n}\n\n/* -------------------depth controls-------------------- */\n.ptx-toc.depth0 ul.structural {\n display: none;\n}\n\n.ptx-toc.depth1 ul.structural ul.structural {\n display: none;\n}\n\n.ptx-toc.depth2 ul.structural ul.structural ul.structural {\n display: none;\n}\n\n.ptx-toc.depth3 ul.structural ul.structural ul.structural ul.structural {\n display: none;\n}\n\n.ptx-toc.depth4 ul.structural ul.structural ul.structural ul.structural ul.structural {\n display: none;\n}\n\n/* if depth is shallow, identify best available toc item */\n.ptx-toc.depth1 ul.structural .toc-item.contains-active {\n background-color: var(--tocitem-active-backgrounde);\n color: var(--tocitem-active-text-color);\n}\n\n.ptx-toc.depth2 ul.structural ul.structural .toc-item.contains-active {\n background-color: var(--tocitem-active-background);\n color: var(--tocitem-active-text-color);\n}\n\n\n// --------------------------------------------------------------------------\n// Focused toc\n\n/* Hide all but active area of book */\n.ptx-toc.focused {\n\n ul.structural:not(.contains-active) > .toc-item {\n display: none;\n\n &.visible {\n display: block;\n }\n }\n\n ul.structural .toc-item.active > ul.structural > .toc-item {\n display: block;\n\n &.hidden {\n display: none;\n }\n }\n\n .toc-expander {\n border: 0;\n padding: 2px 5px;\n background: inherit;\n color: inherit;\n display: flex;\n align-items: center;\n\n .icon {\n font-size: 1.25em;\n line-height: 18px;\n font-variation-settings: 'wght' 200;\n }\n\n &:is(:hover) {\n background-color: var(--tocitem-highlight-background);\n color: var(--tocitem-highlight-text-color);\n\n .icon {\n fill: var(--tocitem-highlight-text-color);\n }\n }\n }\n\n /* ---------------icon customization----------------- */\n .toc-item > .toc-title-box > .toc-expander > .icon:before {\n content: \"add\";\n }\n\n .toc-item.expanded > .toc-title-box > .toc-expander > .icon:before {\n content: \"remove\";\n }\n}\n", "$scrolling: true !default;\n$sidebar-width: 240px !default;\n$nav-height: 36px !default;\n$sidebar-breakpoint: 856px !default;\n$navbar-breakpoint: 800px !default;\n\n@use 'toc-basics' with (\n $sidebar-width: $sidebar-width,\n $nav-height: $nav-height\n);\n\n.ptx-sidebar {\n flex: 0 0 $sidebar-width;\n @if $scrolling {\n position: sticky;\n top: $nav-height;\n overflow-y: hidden;\n }\n}\n\n.ptx-toc {\n @if $scrolling {\n position: sticky;\n top: $nav-height;\n overflow-y: auto;\n overflow-x: hidden;\n height: calc(100vh - $nav-height);\n margin-top: -1px; // partially hide top border of first toc item\n\n // border under the last item before the pretext icon\n & > .toc-item-list:first-child > .toc-item:last-child {\n border-bottom: 3px solid var(--toc-border-color);\n }\n }\n @else {\n // not scrolling\n scrollbar-width: none;\n padding: 10px 0;\n box-sizing: border-box;\n border-right: 1px solid var(--toc-border-color);\n }\n}\n\n// Hide once we get too narrow\n@media screen and (max-width: $sidebar-breakpoint) {\n .ptx-sidebar {\n display: none;\n position: sticky;\n top: $nav-height;\n background: var(--content-background);\n min-height: 30vh;\n border-right: 2px solid var(--toc-border-color);\n border-bottom: 2px solid var(--toc-border-color);\n width: $sidebar-width;\n }\n\n @if not $scrolling {\n .ptx-sidebar {\n overflow-y: scroll;\n }\n }\n}\n\n// flip sidebar to bottom one navbar moves\n@media screen and (max-width: min($sidebar-breakpoint, $navbar-breakpoint)) {\n .ptx-sidebar {\n position: fixed;\n z-index: 1000;\n top: unset;\n height: auto;\n max-height: 80vh;\n max-width: 80vw;\n bottom: $nav-height;\n border-right: 2px solid var(--toc-border-color);\n border-top: 2px solid var(--toc-border-color);\n }\n .ptx-toc {\n border-top: 2px solid var(--toc-border-color);\n border-bottom: 0;\n max-height: 80vh;\n }\n}\n", "// blend in with page until hover\n.ptx-toc {\n scrollbar-color: var(--content-background) var(--content-background);\n\n // reveal scroll on hover\n &:hover {\n scrollbar-color: var(--page-border-color) var(--content-background);\n }\n}\n", "$max-width: 0 !default; // 0 == no max width\n$navbar-breakpoint: 856px !default;\n$nav-height: 36px !default;\n\n@use 'components/helpers/buttons-default' as buttons;\n\n.ptx-page-footer {\n background: var(--footer-background);\n padding-top: 0;\n border-top: 2px solid var(--page-border-color);\n border-bottom: 2px solid var(--page-border-color);\n display: flex;\n flex-direction: row;\n justify-content: center;\n width: 100%;\n gap: 90px;\n position: relative;\n @if $max-width > 0 {\n max-width: $max-width;\n }\n \n \n & > a {\n margin: 1em 0;\n color: var(--body-text-color);\n }\n\n & > a > .logo:first-child {\n height: 3em;\n width: unset;\n margin: 0;\n }\n\n .feedback-link {\n @include buttons.ptx-button;\n }\n}\n\n\n@media screen and (max-width: $navbar-breakpoint) {\n .ptx-page-footer {\n // prevent icons from spreading too much\n gap: 20px;\n justify-content: center;\n margin-bottom: $nav-height - 2;\n\n & > a > .logo:first-child {\n height: 2em;\n }\n }\n}\n", "// --------------------------------------------------------------------------\n// Flexible / centered widening of rs elements and other components\n\n$small-nested-margin-offset: 0px !default;\n\n// These will have defaults that have possibly been overridden by @use in main theme file\n@use 'sizing-globals' as sizing;\n@use 'components/helpers/expandable';\n\n\n\n// designed to be used with a @container/media query by file using this\n// left to user to include in a media query\n// e.g. @container ptx-main (width < 850px) { @include smaller-screen-widening; }\n@mixin smaller-screen-widening {\n .ptx-runestone-container:has(#{sizing.$rs-wide-elements}) {\n width: calc(100cqw);\n margin-left: calc(-0.5*(100cqw - 100%));\n }\n :is(#{sizing.$grouping-elements}):has(#{sizing.$rs-wide-elements}) {\n width: calc(100cqw);\n margin-left: calc(-0.5*(100cqw - 100%));\n }\n :is(#{sizing.$grouping-elements}) .ptx-runestone-container:has(#{sizing.$rs-wide-elements}) {\n width: 100%;\n margin-left: $small-nested-margin-offset; //cheat into padding\n }\n}\n\n\n\n// widen all runestone elements that should be wide\n.ptx-runestone-container:has(#{sizing.$rs-wide-elements}){\n @include expandable.responsive;\n}\n\n// unless nested in other runestones\n.ptx-runestone-container {\n .ptx-runestone-container:has(#{sizing.$rs-wide-elements})\n {\n width: 100%;\n min-width: 100%;\n margin-left: auto;\n }\n}\n\n// also wide grouping elements that have wide elements\n:is(#{sizing.$grouping-elements}):has(#{sizing.$rs-wide-elements}) {\n @include expandable.responsive;\n}\n// unless nested in other wide elements\n:is(#{sizing.$grouping-elements}):has(#{sizing.$rs-wide-elements}) {\n :is(#{sizing.$grouping-elements}):has(#{sizing.$rs-wide-elements}) {\n width: 100%;\n margin-left: auto;\n }\n}\n\n// which simplifies the nested wide elements\n:is(#{sizing.$grouping-elements}) .ptx-runestone-container:has(#{sizing.$rs-wide-elements}) {\n width: 100%;\n margin-left: 0;\n}\n\n/* limit width of content inside ac except for actual activecode */\n.runestone.ac_section\n > div\n > div\n > *:not(.ac_code_div):not(.ac_output):not(.codelens):not(.ac_actions) {\n max-width: sizing.$content-width;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* same for exercise-statement in any runestone */\n.runestone {\n .exercise-statement {\n max-width: sizing.$content-width;\n margin-left: auto;\n margin-right: auto;\n }\n}\n\n/* limit width of statement and success/error message inside hparson */\n.hparsons_section .hp_question,\n.hparsons_section .hp_feedback {\n max-width: sizing.$content-width;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* limit width of content inside parsons except for actual parsons */\n.runestone.parsons_section > .parsons {\n width: 100%;\n padding-right: 0;\n\n .sortable-code-container {\n display: flex;\n flex-flow: wrap;\n justify-content: center;\n gap: 15px;\n margin: 10px auto;\n }\n\n .sortable-code {\n margin: 0;\n }\n\n .runestone_caption_text {\n max-width: unset;\n }\n\n & > div > *:not(.sortable-code-container) {\n max-width: sizing.$content-width;\n margin-left: auto;\n margin-right: auto;\n }\n}\n", "// Use chevrons instead of +/- in ToC expander control\n\n.ptx-toc.focused {\n .toc-item > .toc-title-box > .toc-expander > .icon {\n font-size: 30px;\n &:before {\n content: \"chevron_left\";\n }\n }\n\n .toc-item.expanded > .toc-title-box > .toc-expander > .icon {\n transform: rotate(-90deg);\n &:before {\n content: \"chevron_left\";\n }\n }\n}\n", "//$color: var(--primary-color) !default;\n//$text-color: white !default;\n\n@use 'components/page-parts/extras/toc-expand-chevrons';\n\n.hide-type .codenumber:not(:empty)::after {\n content: \". \";\n}\n\n.ptx-masthead {\n display: none;\n}\n\n\n.button.disabled {\n display: none;\n}\n\n//.ptx-toc {\n// padding-top:unset;\n//}\n\n//// Top heading followed by no content and then a subsection that starts with heading\n//section > .heading + section > .heading {\n// margin-top: 0.5em;\n//}\n\n", "$border-width: 2px !default;\n$side-margins: 30px !default;\n\n.aside-like {\n & > .knowl__link {\n color: var(--aside-like-link-color);\n border-bottom-color: var(--aside-like-link-color);\n }\n & > .knowl__content{\n margin-left: $side-margins;\n margin-right: $side-margins;\n border: $border-width solid var(--aside-like-border-color);\n background-color: var(--aside-like-body-background);\n }\n}", "$float-width: 200px !default;\n$float-offset: -248px !default;\n$min-float-width: 1280px !default;\n\n@use 'asides-basic';\n\n@media screen and (min-width: $min-float-width) {\n details.aside-like {\n position: relative;\n margin-left: $float-offset;\n width: $float-width;\n right: $float-offset;\n float: right;\n clear: right;\n }\n\n /* disable in any multicolumn list/exercisegroup */\n .multicolumn details.aside-like {\n position: relative;\n margin-left: inherit;\n width: auto;\n right: 0;\n float: none;\n clear: none;\n }\n\n details.aside-like > .knowl__content {\n margin-left:0;\n margin-right:0;\n background-color: var(--aside-like-body-background);\n z-index: 100;\n }\n}", "$border-radius: 8px !default;\n\n// One stop include for default style content blocks\n@use 'components/chunks/asides-floating' with (\n $float-width: 200px,\n $float-offset: -365px,\n $min-float-width: 1450px\n);\n@use 'components/chunks/codelike';\n@use 'components/chunks/exercises';\n@use 'components/chunks/solutions';\n@use 'components/chunks/sidebyside';\n@use 'components/chunks/discussion-inline';\n@use 'components/chunks/knowls' with ($border-radius: $border-radius);\n@use 'components/chunks/helpers/L-mixin';\n@use 'components/chunks/helpers/box-mixin' with ($border-radius: 0);\n@use 'components/chunks/helpers/heading-box-mixin';\n@use 'components/chunks/helpers/sidebar-mixin';\n@use 'components/chunks/helpers/inline-heading-mixin';\n\n.assemblage-like, .goal-like {\n @include sidebar-mixin.box(\n $border-width: 4px,\n $background-color: var(--goal-like-body-background),\n );\n}\n\n\n.theorem-like,\n.definition-like\n{\n .heading {\n display: block;\n font-size: 1.1em;\n }\n .para {\n font-style: italic;\n }\n}\n\n.example-like,\n.project-like,\n.remark-like,\n.openproblem-like,\n.computation-like,\n.commentary {\n > .heading {\n display: block;\n font-size: 1.1em;\n }\n}\n\n.proof {\n padding-bottom: 1.5em;\n padding-left: 1em;\n padding-right: 1em;\n &::after {\n content: \"□\";\n position: absolute;\n right: 0;\n bottom: 1.5em;\n }\n\n .heading {\n font-size: unset;\n font-weight: bold;\n font-style: italic;\n }\n}\n\n.solution-like {\n .heading {\n display: inline;\n font-style: italic;\n font-size: unset;\n }\n}\n\n.tasks\n\n/* No decorations/borders in knowls, to save space */\n.knowl__content {\n border: none;\n .theorem-like,\n .definition-like,\n .example-like,\n .project-like,\n .remark-like,\n .openproblem-like,\n .computation-like,\n .project-like,\n .commentary {\n padding-left: 0;\n margin-left: 0;\n border-left: none;\n\n &::after {\n border-bottom: none;\n display: none;\n }\n }\n}\n\n// wide sidebar on an entire section of solutions\nsection.solutions:not(:is(:first-child)) {\n @include sidebar-mixin.box($border-color: var(--solution-border-color));\n}\n\n.paragraphs,\narticle {\n @include inline-heading-mixin.heading;\n}\n", "@use '../helpers/cols';\n\n// generate multi column rules for exercises\n@include cols.allow-cols('.exercise-like');\n\n.exercise-like > .heading {\n // exercise heading/numbers regular size\n font-size: inherit;\n}\n\n.exercisegroup {\n\n .exercise-like {\n margin-top: 1em;\n }\n\n > .heading {\n font-size: 1.10em;\n line-height: 1.05em;\n margin-top: 0.75em;\n display: inline;\n\n & + .introduction {\n display: inline;\n\n & > .para:first-child {\n display: inline;\n }\n }\n }\n\n // push the actual exercises down from any possible heading/intro\n .exercisegroup-exercises {\n margin-top: 1em;\n \n //indent items with padding so cols works correctly on them\n padding-left: 40px;\n }\n\n .conclusion {\n margin-left: 40px; // match the padding of the exercisegroup-exercises\n \n .heading {\n // exercise heading/numbers regular size\n font-size: inherit;\n } \n }\n}\n\n// subtasks are indented\n.exercise-like > .exercise-like.task {\n margin-left: 20px;\n}\n\n\n\n// ---------------------------------------------------------\n// exercise-wrapper is used for WW problems\n// these rules need testing/refactoring\n\n.exercise-wrapper form button:hover {\n cursor: pointer;\n background-color: #e0e0ff;\n border: 1px solid #000;\n}\n.exercise-wrapper form button:active {\n background-color: #f0f0f0;\n}\n.exercise-wrapper form button + button {\n margin-left: 0.8em;\n}\n\n.exercise-wrapper,\n.exercise-wrapper form,\n.exercise-wrapper form > div:first-child {\n display: inline-block;\n vertical-align: top;\n width: 100%; /* for live ww to open at 100% wide */\n}\n\n.knowl .exercise-wrapper,\n.knowl .exercise-wrapper form,\n.knowl .exercise-wrapper form > div:first-child {\n width: 100%;\n}\n\n.exercise-wrapper > .para:first-child,\n.exercisegroup .exercise-wrapper > .para:first-child {\n margin-top: 0;\n display: inline;\n}\n\n/* next is related to having exercises start in-line with their exercise number,\n including when a static WW problem is made interactive */\n/* not sure this was the right way to do it */\n/* see https://opentext.uleth.ca/apex-calculus/sec_antider.html#exercise-722 */\n.heading + .exercise-wrapper {\n display: inline-block;\n max-width: 95%;\n width: 100%;\n}\n\n.cols2 .heading + .exercise-wrapper {\n width: auto;\n}\n", "// \n\n/* stacked headings in the solutions backmatter */\nsection.solutions > .heading + .heading {\n margin-top: 0.5em;\n}\n\nsection.solutions > h3.heading,\nsection.solutions section > h3.heading {\n font-size: 1.6em;\n}\n\nsection.solutions > h4.heading,\nsection.solutions section > h4.heading {\n font-size: 1.45em;\n}\n\nsection.solutions > h5.heading,\nsection.solutions section > h5.heading {\n font-size: 1.35em;\n}\n\nsection.solutions > h6.heading,\nsection.solutions section > h6.heading {\n font-size: 1.25em;\n}\n", "// Space all rows in a sbsgroup, no other styling\n.sbsgroup > *:not(:first-child)\n{\n margin-top: 1.5em;\n}\n\n\n// sidebysides get laid out into a grid with two rows. \"Plain panels\" without\n// a caption are in the first row. Panels with things like tables/figures with\n// captions we want to align are decomposed across two rows.\n// If there is no content (no captions) in a second row, it will collapse.\n\n// 1| plain panel | figure-like/table-like\n// 2| | figcaption\n.sbsrow {\n display: grid;\n grid-template-rows: auto auto;\n}\n\n.sbspanel {\n // most sbspanels are in the first row\n grid-row: 1; \n\n // tables and their captions get centered when in panels\n & > .table > figcaption {\n text-align: center;\n }\n .tabular {\n overflow-x: auto;\n margin-left: auto;\n margin-right: auto;\n }\n}\n\n\n// panel content alignment options\n.sbspanel--top {\n align-self: start;\n}\n\n.sbspanel--middle {\n align-self: center;\n}\n\n.sbspanel--bottom {\n align-self: end;\n}\n\n\n// sbspanels with figures or tables get decomposed into two rows\n// both the panel and the figure-like/table-like element should\n// be ignored by the grid layout so we can place the items inside\n// the *-like into the grid\n.sbspanel:has(.figure-like, .table-like),\n.sbspanel > :is(.figure-like, .table-like) {\n display: contents;\n}\n\n\n// first child of decomposed *-like goes to the first row\n.sbspanel > :is(.figure-like, .table-like) > *:first-child {\n grid-row: 1;\n align-items: start;\n align-self: start;\n}\n\n// and gets alignment info\n.sbspanel--top > :is(.figure-like, .table-like) > *:first-child {\n align-items: start;\n align-self: start;\n}\n\n.sbspanel--middle > :is(.figure-like, .table-like) > *:first-child {\n align-items: center;\n align-self: center;\n}\n\n.sbspanel--bottom > :is(.figure-like, .table-like) > *:first-child {\n align-items: end;\n align-self: end;\n}\n\n\n// second child of decomposed *-like goes to the second row\n.sbspanel > :is(.figure-like, .table-like) > *:nth-child(2) {\n margin-top: 0.5em;\n grid-row: 2;\n width: 100%;\n}\n\n\n// make sure content for a panel stays in the correct column\n// otherwise captions may shift left into columns that do not have\n// second row content\n@for $col from 2 through 10 {\n .sbspanel:nth-of-type(#{$col}) * {\n grid-column: #{$col};\n }\n}", "// Generate styles for an inline heading\n@mixin heading {\n & > .heading:first-child {\n display: inline;\n line-height: initial;\n border-bottom: 0; // disable underline that may come from underlined headings\n\n &:after {\n content: \"\\2009\";\n }\n\n // Following sibling also needs to be inline for heading to line up correctly\n // For now limit to logical paragraphs and introductions as they seem to cover\n // the plain text cases. Not clear we would want same treatment for other\n // kinds of content\n & + :is(.para, .para.logical, .introduction) {\n display: inline;\n // possible first child that is the actual text\n & > .para:first-child {\n display: inline;\n }\n // an introduction could have a para.logical with a para\n & > .para.logical:first-child > .para:first-child {\n display: inline;\n }\n }\n }\n}\n", "@use './helpers/inline-heading-mixin';\n\n.discussion-like {\n @include inline-heading-mixin.heading;\n & > .heading {\n ::after {\n content: \"\\2009\";\n }\n\n & + .para {\n display: inline;\n }\n\n .space,\n .codenumber,\n .period {\n display: none;\n }\n\n .type::after {\n content: \". \";\n }\n }\n}\n", "/*\n main knowls styles\n*/\n\n$border-radius: 0px !default;\n$border-width: 3px !default;\n$pad: 12px !default;\n\n.source-view__link,\n.knowl__link {\n cursor: pointer;\n margin-left: 0.1em;\n margin-right: 0.1em;\n color: var(--knowl-link-color);\n border-bottom: 1px dotted var(--knowl-link-color);\n}\n\n.source-view {\n margin: 0.5em 0;\n}\n\nsummary.source-view__link,\nsummary.knowl__link {\n display: list-item inline;\n}\n\n.source-view__link > *,\n.knowl__link > * {\n display: inline;\n}\n\n.source-view__link:is(:hover, :focus, [open]),\n.knowl__link:is(:hover, :focus, [open]) {\n background-color: var(--knowl-background);\n border-bottom-color: transparent;\n}\n\n.source-view__content {\n margin: 0.2em 0;\n}\n\n.knowl__content {\n margin: 0.75em 0; //at least this much space above/below\n border: $border-width solid var(--knowl-border-color);\n border-radius: $border-radius;\n padding: $pad;\n background-color: var(--knowl-background);\n\n .incontext {\n display: block;\n font-size: 85%;\n text-align: right;\n }\n}\n\n/* nested knowl alt colors */\n.knowl__content .knowl__content {\n background-color: var(--knowl-nested-1-background);\n}\n\n.knowl__content .knowl__content .knowl__content {\n background-color: var(--knowl-nested-2-background);\n}\n\n.knowl__content .knowl__content .knowl__content .knowl__content {\n background-color: var(--knowl-nested-3-background);\n}\n\n.knowl__content .knowl__content .knowl__content .knowl__content .knowl__content {\n background-color: var(--knowl-nested-4-background);\n}\n\n\n/* spacing tweaks inside knowls */\n.knowl__content > figure {\n margin-left: 0;\n margin-right: 0;\n}\n", "// These values can be set on @use to avoid repeating values in each @import\n$pad: 10px !default; //all sides\n$padside: 15px !default; //on side with border\n$border-radius: 0px !default; //on side with border\n$border-color: var(--block-border-color) !default;\n$background-color: var(--content-background) !default;\n$side: left !default;\n$border-width: 2px !default;\n\n// Generate styles for a sidebar down left or right of content\n@mixin box($border-width: $border-width,\n $style: solid,\n $border-color: $border-color,\n $background-color: $background-color,\n $padding: $pad,\n $padside: $padside,\n $side: $side,\n $border-radius: $border-radius) \n{\n &:not(.knowl__content, .born-hidden-knowl) {\n padding: $padding;\n padding-#{$side}: $padside;\n border-#{$side}: $border-width $style $border-color;\n background-color: $background-color;\n\n @if $border-radius > 0 {\n border-radius: $border-radius;\n }\n\n > .heading:first-child {\n margin-top: 0;\n }\n }\n}\n", "/*\n Master list of color variables and default values.\n Variables are defined in SCSS to allow for calculation of values. They are\n then converted to CSS variables for use in the HTML so authors can, if\n need be, override them with custom CSS.\n\n Any new variable should be added to this file and either defined to another\n variable or given a reasonable default value for the red-blue default theme.\n\n Variables should be semantic, not descriptive\n i.e. --link-color, not --pretty-blue\n*/\n\n@use \"sass:map\";\n\n// ==============================================================================\n// Light theme\n\n// ==============================================================================\n// Page structures\n\n$colors: (\n // Background of page (gutters if any)\n \"page-color\": white,\n // Background of content area\n \"content-background\": white,\n // Border around content area - also possibly used for internal borders\n \"page-border-color\": #ccc,\n\n // ------------------------------------------------------------------------------\n // Banner/nav related\n\n \"doc-title-color\": #932919,\n \"byline-color\": #333,\n \"banner-background\": #fafafa,\n \"navbar-background\": #ededed,\n \"footer-background\": var(--banner-background),\n\n // ------------------------------------------------------------------------------\n // TOC related\n\n \"toc-border-color\": #666,\n \"toc-background\": var(--content-background),\n\n \"tocitem-background\": var(--toc-background),\n \"toc-text-color\": var(--body-text-color),\n\n // highlight styles are used for hover\n \"tocitem-highlight-background\": #671d12,\n \"tocitem-highlight-text-color\": white,\n \"tocitem-highlight-border-color\": var(--toc-border-color),\n \n // active styles are used for the current toc item\n \"tocitem-active-background\": #671d12,\n \"tocitem-active-text-color\": white,\n \"tocitem-active-border-color\": var(--toc-border-color),\n\n // level based colors for TOC\n // levels are not necessarily all used\n // see the toc-basics.scss for how these are determined\n \"toclevel1-background\": var(--content-background),\n \"toclevel1-text-color\": var(--toc-text-color),\n \"toclevel2-background\": var(--content-background),\n \"toclevel2-text-color\": var(--toc-text-color),\n \"toclevel3-background\": var(--content-background),\n \"toclevel3-text-color\": var(--toc-text-color),\n\n\n // ==============================================================================\n // Content\n // ==============================================================================\n\n // ------------------------------------------------------------------------------\n // Text & titles\n\n \"body-text-color\": #000,\n \"body-title-color\": #000,\n\n \"ptx-image-bg\": transparent,\n \"activated-content-bg\": rgba(241, 185, 255, 30%),\n\n \"summary-link-background\": var(--button-background),\n \"summary-link-text-color\": var(--button-text-color),\n \"summary-link-hover-background\": var(--button-hover-background),\n \"summary-link-hover-text-color\": var(--button-hover-text-color),\n\n // ------------------------------------------------------------------------------\n // Links & knowls\n\n \"link-text-color\": #2B5F82,\n \"link-background\": transparent,\n \"link-active-text-color\": var(--link-text-color),\n \"link-active-background\": #cad2e1,\n\n \"link-alt-text-color\": #A62E1C,\n \"link-alt-background\": transparent,\n \"link-alt-active-text-color\": var(--link-alt-text-color),\n \"link-alt-active-background\": #e3d1ce,\n\n \"knowl-link-color\": var(--link-text-color),\n \"knowl-background\": #f5f8ff,\n \"knowl-border-color\": #e0e9ff,\n \"knowl-nested-1-background\": #f5f5ff,\n \"knowl-nested-2-background\": #fffff5,\n \"knowl-nested-3-background\": #f5ffff,\n \"knowl-nested-4-background\": #fff5f5,\n\n // ------------------------------------------------------------------------------\n // Blocks\n\n // Fall back generic block colors:\n \"block-body-background\": var(--content-background),\n \"block-border-color\": var(--knowl-border-color),\n \"block-head-color\": var(--body-text-color),\n\n // See below for specific block types\n \n \"aside-like-link-color\": var(--link-text-color),\n\n // ------------------------------------------------------------------------------\n // Buttons & Widgets\n\n \"button-background\": #ededed,\n \"button-text-color\": #333333,\n \"button-border-color\": #ccc,\n \"button-hover-background\": #c7c7c7,\n \"button-hover-text-color\": var(--button-text-color),\n\n \"dropdown-background\": var(--content-background),\n \"dropdown-border-color\": var(--toc-border-color),\n \"dropdown-text-color\": var(--toc-text-color),\n \"dropdown-hover-background\": var(--tocitem-active-background),\n \"dropdown-hover-text-color\": var(--tocitem-active-text-color),\n\n // ------------------------------------------------------------------------------\n // Other\n \"code-background\": #fdfdfd,\n \"code-inline-background\": #ededed,\n);\n\n// ==============================================================================\n// Block types\n\n// Variables for specific block types should look like those below. In this file\n// only \"top level\" blocks from the -like families are defined. \n// Other themes/color palettes may define\n// more specific ones - see palette_quad_chunks.scss for an example.\n\n// block-types based on those in entities.ent\n$block-types: \"assemblage-like\", \"definition-like\", \"theorem-like\", \"theorem-like\", \"axiom-like\", \"remark-like\", \"computation-like\", \"openproblem-like\", \"aside-like\", \"proof-like\", \"example-like\", \"project-like\", \"goal-like\", \"solution-like\";\n// TODO - \"proof\" should probably be updated to \"proof-like\" in HTML css\n\n@each $block in $block-types {\n $colors: map.merge(\n $colors,\n (\n // define background and border, but default to generic block colors\n \"#{$block}-body-background\": var(--block-body-background),\n \"#{$block}-border-color\": var(--block-border-color),\n )\n );\n}\n", "// This file contains functions and mixins for working with colors in SCSS\n\n@use \"sass:map\";\n@use \"sass:color\";\n\n@mixin set-root-colors($colors, $dark-colors: null) {\n :root {\n color-scheme: light;\n // prevent variable leak through to dark\n &:not(.dark-mode) {\n @include scss-to-css($colors);\n }\n }\n\n @if $dark-colors {\n :root.dark-mode {\n color-scheme: dark;\n @include scss-to-css($dark-colors);\n }\n }\n}\n\n// Renders a map of SCSS variables as CSS variables\n@mixin scss-to-css($colors) {\n @each $name, $value in $colors {\n --#{$name}: #{$value};\n }\n}\n\n// Create a map of colors that blend $color with $other at $mix-amounts\n// The resulting map will have keys of the form 'color-other-10'\n// Indicating 10% of other mixed into color\n@function mixes($color, $other, $mix-amounts) {\n $result: ();\n\n @each $i in $mix-amounts {\n $result: map.set($result, '#{$color}-#{$other}-#{$i}', 'color-mix(in oklab, var(--#{$color}), #{$other} #{$i}%)');\n }\n\n @return $result;\n}\n\n$std-mixes: (1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 65, 70, 75, 80, 85, 90, 95, 96, 97, 98, 99);\n\n// Creates a map of color blends for a given color\n// By default it creates blends with black, white, and gray at $std-mixes amounts\n// Mixing is done using css color-mix function so that if a theme file has the base\n// css variable overridden, the blends will be updated accordingly\n@function get-blends($color, $shades: $std-mixes, $tints: $std-mixes, $tones: $std-mixes, ) {\n $shades: mixes($color, black, $std-mixes);\n $tints: mixes($color, white, $std-mixes);\n $tones: mixes($color, gray, $std-mixes);\n\n $blends: map.merge(\n $tints,\n $shades\n );\n\n $blends: map.merge(\n $blends,\n $tones\n );\n @return $blends;\n}\n\n//--------------------------------------------------------------------------\n// https://jonnykates.medium.com/automating-colour-contrast-ratios-with-sass-e201f3b52797\n// Formula there has a typo, need parens around the sum of the three color channels\n\n@function text-contrast($color, $light: #ffffff, $dark: #000000) {\n $color-brightness: round(\n (\n (color.red($color) * 299) +\n (color.green($color) * 587) +\n (color.blue($color) * 114)\n ) / 1000\n );\n\n $light-color: round(\n (\n (color.red(#ffffff) * 299) +\n (color.green(#ffffff) * 587) +\n (color.blue(#ffffff) * 114)\n ) / 1000\n );\n\n @if abs($color-brightness) < calc($light-color / 2){\n @return $light;\n } @else {\n @return $dark;\n }\n}\n\n// @debug \"text-contrast(#7b7b55) should be #ffffff: \" text-contrast(#7b7b55);\n// @debug \"text-contrast(#9b9b70) should be #000000: \" text-contrast(#9b9b70);\n// @debug \"text-contrast(#766f7a) should be #ffffff: \" text-contrast(#766f7a);\n// @debug \"text-contrast(#70909b) should be #000000: \" text-contrast(#70909b);\n//--------------------------------------------rgb(25, 25, 24)-----------------------\n"], "mappings": "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,kBAUE,CAAA,C/CxBJ,O+CwBI,aACE,WAAA,EPCJ,C3BuCA,a2BvCA,CxC1BF,QwC0BE,C3BuCA,gB2BvCA,CxC1BF,QwC2BI,QAAA,MACA,UAAA,MAEF,C3BmCA,a2BnCA,C9CRA,K8CQA,C3BmCA,gB2BnCA,C9CRA,K8CSE,WAAA,OAUF,C3BWF,Y2BXE,CAAA,CxCzCF,QwCyCE,C3BWF,Y2BXE,CAAA,CxCzCF,QwCyCE,C3BWF,W2BXE,CAAA,CxCzCF,QwCyCE,C3BwBA,gB2BxBA,CAAA,CxCzCF,QwCyCE,C3BwBA,gB2BxBA,CAAA,CxCzCF,QwCyCE,CAAA,UAAA,CAAA,CxCzCF,QwC0CI,QAAA,MACA,UAAA,MAIJ,C3BkBE,M2BjBA,eAAA,MACA,aAAA,IACA,cAAA,IACA,C3BcA,K2BdA,OACE,QAAA,QACA,SAAA,SACA,MAAA,EACA,OAAA,MAGF,C3BOA,M2BPA,CxC1DF,QwC2DI,UAAA,MACA,YAAA,IACA,WAAA,OAKF,C3B/DF,c2B+DE,CxClEF,QwCmEI,QAAA,OACA,WAAA,OACA,UAAA,MAIJ,CAAA,MAAA,C9CxDE,e8C4DA,OAAA,KACA,CALF,MAKE,C9C7DA,e8C6DA,C3BbA,a2BaA,CALF,MAKE,C9C7DA,e8C6DA,C3BbA,gB2BaA,CALF,MAKE,C9C7DA,e8C6DA,C3B1BF,a2B0BE,CALF,MAKE,C9C7DA,e8C6DA,C3B1BF,a2B0BE,CALF,MAKE,C9C7DA,e8C6DA,C3B1BF,Y2B0BE,CALF,MAKE,C9C7DA,e8C6DA,C3BbA,iB2BaA,CALF,MAKE,C9C7DA,e8C6DA,C3BbA,iB2BaA,CALF,MAKE,C9C7DA,e8C6DA,CArCA,WA8CE,aAAA,EACA,YAAA,EACA,YAAA,KAEA,CAlBJ,MAkBI,C9C1EF,e8C0EE,C3B1BF,Y2B0BE,OAAA,CAlBJ,MAkBI,C9C1EF,e8C0EE,C3B1BF,e2B0BE,OAAA,CAlBJ,MAkBI,C9C1EF,e8C0EE,C3BvCJ,Y2BuCI,OAAA,CAlBJ,MAkBI,C9C1EF,e8C0EE,C3BvCJ,Y2BuCI,OAAA,CAlBJ,MAkBI,C9C1EF,e8C0EE,C3BvCJ,W2BuCI,OAAA,CAlBJ,MAkBI,C9C1EF,e8C0EE,C3B1BF,gB2B0BE,OAAA,CAlBJ,MAkBI,C9C1EF,e8C0EE,C3B1BF,gB2B0BE,OAAA,CAlBJ,MAkBI,C9C1EF,e8C0EE,CAlDF,UAkDE,OACE,cAAA,KACA,QAAA,KO/EJ,OAAA,CLhBF,SKgBE,KAAA,IAAA,cAAA,KAAA,CrDGA,eqDHA,CAAA,2BAlBI,eACI,KAoBN,YAAA,IAAA,MAAA,IAAA,yBACA,iBAlBe,IAAA,sBAwBf,OAAA,CL1BJ,SK0BI,KAAA,IAAA,cAAA,KAAA,CrDPF,eqDOE,CAVF,kBAUE,CAAA,C/CxBJ,O+CwBI,aACE,WAAA,EH5BJ,C5CuDF,U4CvDE,CAAA,C5CGF,O4CHE,aAAA,OAAA,CAAA,C5CGF,O4CHE,aACE,QAAA,OACA,YAAA,QACA,cAAA,EAEA,C5CkDJ,U4ClDI,CAAA,C5CFJ,O4CEI,YAAA,OAAA,OAAA,CAAA,C5CFJ,O4CEI,YAAA,OACE,QAAA,QAOF,C5C0CJ,U4C1CI,CAAA,C5CVJ,O4CUI,YAAA,CAAA,IAAA,ClDYF,KkDZE,ClDYF,IkDZE,ClDkBF,QkDlBE,C/B0CJ,c+B1CI,OAAA,CAAA,C5CVJ,O4CUI,YAAA,CAAA,IAAA,ClDYF,KkDZE,ClDYF,IkDZE,ClDkBF,QkDlBE,C/B0CJ,c+BzCM,QAAA,OAEA,C5CuCN,U4CvCM,CAAA,C5CbN,O4CaM,YAAA,CAAA,IAAA,ClDSJ,KkDTI,ClDSJ,IkDTI,ClDeJ,QkDfI,C/BuCN,a+BvCM,CAAA,ClDSJ,IkDTI,aAAA,OAAA,CAAA,C5CbN,O4CaM,YAAA,CAAA,IAAA,ClDSJ,KkDTI,ClDSJ,IkDTI,ClDeJ,QkDfI,C/BuCN,a+BvCM,CAAA,ClDSJ,IkDTI,aACE,QAAA,OAGF,C5CmCN,U4CnCM,CAAA,C5CjBN,O4CiBM,YAAA,CAAA,IAAA,ClDKJ,KkDLI,ClDKJ,IkDLI,ClDWJ,QkDXI,C/BmCN,a+BnCM,CAAA,ClDKJ,IkDLI,ClDWJ,OkDXI,YAAA,CAAA,ClDKJ,IkDLI,aAAA,OAAA,CAAA,C5CjBN,O4CiBM,YAAA,CAAA,IAAA,ClDKJ,KkDLI,ClDKJ,IkDLI,ClDWJ,QkDXI,C/BmCN,a+BnCM,CAAA,ClDKJ,IkDLI,ClDWJ,OkDXI,YAAA,CAAA,ClDKJ,IkDLI,aACE,QAAA,OnDmBR,MACE,aAAA,KAAA,IAAA,EAAA,UAAA,IAAA,EAAA,SAAA,EAAA,KAAA,EAAA,WAEF,MACE,iBAAA,GAAA,KAAA,EAAA,MAAA,IAAA,KAAA,EAAA,KAAA,EAAA,MAEF,MACE,kBAAA,WAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAEF,MACE,cAAA,GAAA,KAAA,EAAA,MAAA,IAAA,KAAA,EAAA,KAAA,EAAA,MwD9CA,MACE,aAAA,MAEA,KAAA,KAAA,ClDiBJ,WkDDI,cAAA,MAAA,sBAAA,MAAA,qBAAA,KAAA,mBAAA,IAAA,iBAAA,gBAAA,KAAA,qBAAA,QAAA,qBAAA,IAAA,iBAAA,qBAAA,IAAA,qBAAA,oBAAA,KAAA,kBAAA,IAAA,sBAAA,sBAAA,IAAA,kBAAA,kBAAA,IAAA,0BAAA,gCAAA,QAAA,gCAAA,KAAA,kCAAA,QAAA,6BAAA,IAAA,0BAAA,6BAAA,MAAA,+BAAA,IAAA,oBAAA,wBAAA,IAAA,sBAAA,wBAAA,IAAA,kBAAA,wBAAA,IAAA,sBAAA,wBAAA,IAAA,kBAAA,wBAAA,IAAA,sBAAA,wBAAA,IAAA,kBAAA,mBAAA,KAAA,oBAAA,IAAA,0BAAA,gBAAA,YAAA,wBAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,IAAA,2BAAA,IAAA,qBAAA,2BAAA,IAAA,qBAAA,iCAAA,IAAA,2BAAA,iCAAA,IAAA,2BAAA,mBAAA,IAAA,iBAAA,mBAAA,YAAA,0BAAA,IAAA,iBAAA,0BAAA,IAAA,0BAAA,uBAAA,IAAA,mBAAA,uBAAA,YAAA,8BAAA,IAAA,uBAAA,8BAAA,IAAA,0BAAA,oBAAA,IAAA,mBAAA,oBAAA,QAAA,sBAAA,IAAA,yBAAA,6BAAA,QAAA,6BAAA,QAAA,6BAAA,QAAA,6BAAA,QAAA,yBAAA,IAAA,sBAAA,sBAAA,IAAA,sBAAA,oBAAA,IAAA,mBAAA,yBAAA,IAAA,mBAAA,qBAAA,IAAA,iBAAA,qBAAA,IAAA,0BAAA,uBAAA,QAAA,2BAAA,QAAA,2BAAA,IAAA,qBAAA,uBAAA,IAAA,sBAAA,yBAAA,IAAA,oBAAA,uBAAA,IAAA,kBAAA,6BAAA,IAAA,6BAAA,6BAAA,IAAA,6BAAA,mBAAA,QAAA,0BAAA,QAAA,mCAAA,IAAA,yBAAA,gCAAA,IAAA,sBAAA,mCAAA,IAAA,yBAAA,gCAAA,IAAA,sBAAA,gCAAA,IAAA,yBAAA,6BAAA,IAAA,sBAAA,8BAAA,IAAA,yBAAA,2BAAA,IAAA,sBAAA,+BAAA,IAAA,yBAAA,4BAAA,IAAA,sBAAA,oCAAA,IAAA,yBAAA,iCAAA,IAAA,sBAAA,oCAAA,IAAA,yBAAA,iCAAA,IAAA,sBAAA,8BAAA,IAAA,yBAAA,2BAAA,IAAA,sBAAA,8BAAA,IAAA,yBAAA,2BAAA,IAAA,sBAAA,gCAAA,IAAA,yBAAA,6BAAA,IAAA,sBAAA,gCAAA,IAAA,yBAAA,6BAAA,IAAA,sBAAA,6BAAA,IAAA,yBAAA,0BAAA,IAAA,sBAAA,iCAAA,IAAA,yBAAA,8BAAA,IAAA,sBAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAA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AAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,IAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,IAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,IAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,IAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,IAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,6BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,MAAA,KAAA,2BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,IAAA,2BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,IAAA,2BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,IAAA,2BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,IAAA,2BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,IAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,4BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,mBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,IAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,0BAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,MAAA,KAAA,wBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,IAAA,wBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,IAAA,wBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,IAAA,wBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,IAAA,wBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,IAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA,KAAA,yBAAA,UAAA,GAAA,KAAA,EAAA,IAAA,gBAAA,EAAA,KAAA", "names": [] diff --git a/course/_static/webpack_static_imports.json b/course/_static/webpack_static_imports.json index 3f07ec2..1d63ce3 100755 --- a/course/_static/webpack_static_imports.json +++ b/course/_static/webpack_static_imports.json @@ -1 +1 @@ -{"js":["prefix-runtime.991c135ccf182bf5.bundle.js","prefix-723.3e6434f80549315a.bundle.js","prefix-runestone.1c010553c35c544c.bundle.js"],"css":["prefix-723.3bccd435914aa0ff.css","prefix-runestone.677a75a9120449ff.css"]} \ No newline at end of file +{"js":["prefix-runtime.3dca4b99808f4053.bundle.js","prefix-723.3e6434f80549315a.bundle.js","prefix-runestone.80892ed1280c2803.bundle.js"],"css":["prefix-723.3bccd435914aa0ff.css","prefix-runestone.6ec5960970d8b364.css"]} \ No newline at end of file diff --git a/course/_static/webpack_static_imports.json.gz b/course/_static/webpack_static_imports.json.gz index dbfa07a68535eb0736a69d810283315e7be284ac..1ef641b344feabdfb73bf77adee1d24aea792ece 100755 GIT binary patch literal 155 zcmV;M0A&9kiwFP!000026K&4R3c@fDh2eL}x`t_Il4g7r=^~d2RJ2Odf*`)Tu^@EO z#o2xQoVU6bb-t+QEO~sL=5<=eyJ$?&Q($)BGJ!!I)+yaYSKRz<-=Rjagp?f^Vr-2+ za - prefix-runtime.991c135ccf182bf5.bundle.js + prefix-runtime.3dca4b99808f4053.bundle.js prefix-723.3e6434f80549315a.bundle.js - prefix-runestone.1c010553c35c544c.bundle.js + prefix-runestone.80892ed1280c2803.bundle.js prefix-723.3bccd435914aa0ff.css - prefix-runestone.677a75a9120449ff.css + prefix-runestone.6ec5960970d8b364.css https://runestone.academy/cdn/runestone/ - 7.11.9 + 7.11.10 diff --git a/course/ch-notes.html b/course/ch-notes.html index dc11c1b..3c09832 100755 --- a/course/ch-notes.html +++ b/course/ch-notes.html @@ -101,15 +101,15 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.9'; +eBookConfig.runestone_version = '7.11.10'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - - + + @@ -135,11 +135,22 @@ eBookConfig.enable_chatcodes = false;

    -PrevUpNext +PrevUpNext
    -in-context +in-context diff --git a/course/lunr-pretext-search-index.js b/course/lunr-pretext-search-index.js index b296ddf..fbbe36b 100755 --- a/course/lunr-pretext-search-index.js +++ b/course/lunr-pretext-search-index.js @@ -10,36 +10,36 @@ var ptx_lunr_docs = [ "body": " Syllabus Course Information Day and Time Lectures: TR 11:40 am - 1:20 pm Gladfelter L024 Recitation Section 1: M 12:00 pm - 12:50 pm Wachman 9 Section 2: W 12:00 pm - 12:50 pm Wachman 15 Section 3: F 11:00 am - 11:50 am Wachman 408 Section 4: F 1:00 pm - 1:50 pm Wachman 408 Office Hours See times and location on Canvas Course Goals To introduce some of the basic concepts and techniques of probability and statistics, as applied in the Life and Environmental Sciences. Topics Covered Probability theory and descriptive statistics, probability models, introduction to inferential statistics. Prerequisite MATH 1041 (C), MATH 1038 (C), MATH 1941 (C), MATH 1951 (C), MATH 2043 to 3080 (C-), MA06 Y. Course Mode In-person Credits 4 Textbook and Other Required Materials Textbook Course notes are freely available online . Calculator You will need a scientific calculator (NOT a graphing calculator and NOT a calculator app on your phone\/watch). Any calculator capable of symbolic differentiation\/integration or performing statistical tests is NOT allowed. Scientific calculators (such as the TI-30XIIS ) typically cost around $10. Phone You will need a device (phone or tablet) to take pictures of your quizzes\/tests and upload your work. Assessments Homework There will be homework assignments posted on Canvas approximately weekly. There are more practice problems available in the course notes. Doing homework problems is the primary way that you will learn and internalize the material seen in class. Plan to spend a substantial amount of time throughout the semester doing homework problems. Quizzes There will be in-class quizzes every other week (on Jan 20, Feb 3, Mar 10, Mar 24, and Apr 21). Quizzes give you some practice in a test-like environment without the same grade pressure as a test. The quizzes should be a signal to you about whether you're keeping up with the pace of the course. You may use an allowed calculator during quizzes. Exams This course will have two midterm exams and a Final Exam. Exams are the main opportunity for you to demonstrate your understanding of course material. You may use an allowed calculator and a 3 in x 5 in index card with prepared notes during exams. You are allowed to write on both sides of the index card. You should include your full name in the top right corner of your index card. Your index card will be turned in along with your exam. Test 1 Tuesday, February 17 (in class) Test 2 Tuesday, April 7 (in class) Final Exam Tuesday, May 5, 10:30 am - 12:30 pm Makeup Policy There are no quiz or exam makeups. The lowest quiz will be dropped and replaced with the recitation score. Grading The grade components and their weights are: Component Weight Homework 5% Quizzes 15% Exam 1 24% Exam 2 24% Final Exam 32% The lower cutoff for each letter grade is given in the table below. Letter Grade Lower Cutoff A 93% A- 90% B+ 87% B 83% B- 80% C+ 77% C 73% C- 70% D+ 65% D 55% F 0% Attendance Policy Attendance is expected and will be recorded. If you need to miss a class for some reason, it is your responsibility to get notes from another student for any material you've missed, and to arrange to turn in\/make up any in-class or collected work. Attendance and Your Health To achieve course learning goals, students must attend and participate in classes, according to the course requirements. However, if you have tested positive for or are experiencing symptoms of a contagious illness, you should not come to campus or attend in-person classes or activities. It is the student’s responsibility to contact me to create a plan for participation and engagement in the course as soon as you are able to do so, and to make a plan to complete all assignments in a timely fashion. Expectations for Class Conduct It is important to foster a respectful and productive learning environment that includes all students in our diverse community of learners. Our differences, some of which are outlined in the University's nondiscrimination statement, will add richness to this learning experience. Therefore, all opinions and experiences, no matter how different or controversial they may be perceived, must be respected in the tolerant spirit of academic discourse. Disability Statement Any student who has a need for accommodations based on the impact of a documented disability or medical condition should contact Disability Resources and Services (DRS) in Howard Gittis Student Center South, Rm 420 ( drs@temple.edu ; 215-204-1280) to request accommodations and learn more about the resources available to you. If you have a DRS accommodation letter to share with me, or you would like to discuss your accommodations, please contact me as soon as practical. I will work with you and with DRS to coordinate reasonable accommodations for all students with documented disabilities. All discussions related to your accommodations will be confidential. Academic Freedom Freedom to teach and freedom to learn are inseparable facets of academic freedom. The University has adopted a policy on Student and Faculty Academic Rights and Responsibilities (Policy # 03.70.02) which can be accessed here . Add\/Drop Policy Students will be charged for a course unless dropped by the Drop\/Add deadline date. Check the University calendar for exact dates. During the Drop\/Add period, students may drop a course with no record of the class appearing on their transcript. Students are not financially responsible for any courses dropped during this period. In the following weeks prior to or on the withdrawal date students may withdraw from a course with the grade of \"W\" appearing on their transcript. After the withdrawal date students may not withdraw from courses. Check the University calendar for exact dates. See the full policy by clicking here . AI Policy The use of generative AI tools (such as ChatGPT, DALL-E, etc.) is not permitted in this class unless specifically announced for a particular assignment; therefore, any use of AI tools for work in this class may be considered a violation of Temple University's Academic Honesty policy and Student Conduct Code, since the work is not your own. The use of unauthorized AI tools will result in a grade of zero on the assignment; a second offense will be reported to the Student Conduct Board. Incomplete Grades The grade \"I\" (an \"incomplete\") is only given if students cannot complete the course work due to circumstances beyond their control. It is necessary for the student to have completed the majority of the course work with a passing average and to sign an incomplete contract which clearly states what is left for the student to do and the deadline by which the work must be completed. The incomplete contract must also include a default grade that will be used in case the \"I\" grade is not resolved by the agreed deadline. See the full policy by clicking here . Student Support Services The following academic support services are available to students: The Math Consulting Center Student Success Center University Libraries Undergraduate Research Support Career Center Tuttleman Counseling Services Disability Resources and Services If you are experiencing food insecurity or financial struggles, Temple provides resources and support. Notably, the Temple University Cherry Pantry and the Temple University Emergency Student Aid Program are in operation as well as a variety of resources from the Division of Student Affairs. " }, { - "id": "notes-week-01", + "id": "notes-01-13", "level": "1", - "url": "notes-week-01.html", + "url": "notes-01-13.html", "type": "Section", "number": "", - "title": "Week 1", - "body": " Week 1 This is an outline of the topics we covered in the first week of class. These notes are not a substitute for your own note-taking. I highly recommend that you take your own notes during class. If you ever miss a class for any reason, reach out to another student in class to get a copy of their notes. Tuesday 1\/13 Sec 1.1: Sets In prior math courses, you mostly asked deterministic questions. Now, we need new tools to model randomness . A toxin molecule in a cell has a certain chance each minute to leave the cell. A patient takes a diagnostic test for a disease and wants to know the chance that they have the disease based on the test result. The sample space , often denoted , is the set of all possible results of an experiment. A single result is called an outcome , while a collection of results is called an event . An experiment consists of rolling a standard 6-sided die (D6). The sample space is . One possible event is , i.e., the event that the result of the roll is even. Note: we'll use notation like D6 to indicate a 6-sided die with faces 1, 2, 3, 4, 5, 6. Similarly, for example, D4 will indicate a 4-sided die with faces 1, 2, 3, 4. The symbol means \"is an element of\", as in . The symbol means \"is a subset of\", as in . This means that every element of the set is also an element of the set . Consider sets and , each contained inside . We can combine sets in a variety of ways: Union The union of and is the set . Intersection The intersection of and is the set . Difference The set difference is the set . Complement The complement of is the set . Empty Set The empty set , usually written or , is the set which contains no elements. It's useful sometimes to draw pictures called Venn diagrams representing set interactions. Union Venn diagram showing sets with the region representing shaded. Intersection Venn diagram showing sets with the region representing shaded. Difference Venn diagram showing sets with the region representing shaded. Complement Venn diagram showing set with the region representing shaded. Sec 1.2: Probability Next, we want to start assigning probabilities to each individual outcome so we can then find the probabilities of events. An experiment consists of rolling a D6. The sample space is . We might assign probabilities as follows: Distribution for a fair die 1 2 3 4 5 6 Note that we don't have to assign the same probability to each outcome. If we do, we call this distribution uniform . If we have some event, such as , then we calculate the probability of the event by adding together the probabilities of the outcomes that make up the event: Note that this is the same result that we would get if we counted the total number of outcomes in and divided by the total number of outcomes in . Given a finite set , the cardinality of , written , is the number of elements in . If is a finite probability space with the uniform distribution and is an event, then: Suppose we have a weighted die that's much more likely to come up 6 than any other outcome. Distribution for a fair die 1 0.1 2 0.1 3 0.1 4 0.2 5 0.1 6 0.4 With this distribution, if , then: Pick a number from 1 to 10. What is the probability of picking 3? Some considerations: Are we using the uniform distribution? What even is the sample space here? Do we need to pick only integers, or is an outcome here? What would \"uniform\" mean if the sample space was infinite? A probability distribution on a sample space assigns probabilities to every event, satisfying the following conditions: . for any event . If , then . Suppose we flip a coin until we see heads. The sample space is . What would \"uniform\" mean here? Is there any way we could assign the same probability to each individual outcome here? Instead of \"uniform\", what if we want to treat the coin as a fair coin? Then what would the distribution be? Distribution assuming a fair coin # flips 1 2 3 4 One last (very useful!) observation. Recall: If , then . For any event , and . So: We can rewrite this in two useful ways: Thursday 1\/15 Conditional Probability Question: How does evidence (e.g., knowledge of one event occurring) change our knowledge of probabilities for other events? Roll a fair D6 two times. Let and . feels more likely if we already know has occurred. The conditional probability of given is: , tells the proportion of which is overlapped by . Two overlapping circles representing events and sit inside a rectangle representing the sample space . The circle labeled is shaded. The portion of that circle which is overlapped by the circle is also filled in with slanted lines. Continuing from the previous example, . So . Then: Notice that is significantly larger than . Diagnostic Testing Setup: A patient takes a diagnostic test. Let be the event that they test positive. Let be the event that they have the disease. The sensitivity of a diagnostic test is . The specificity of a diagnostic test is . But, what the patient really wants to know is . A disease has a prevalence of 1%. A test has sensitivity of 90% and specificity of 91%. For a patient who gets a positive test result, what is the probability that they have the disease? C! Bayes' Theorem (v1) For events with nonzero probability: For example, if a patient sees a positive diagnostic test result, they might try to calculate: is the sensitivity. could be the prevalence. We don't have direct access to . Observation: , so . Observation 2: So: Bayes' Theorem (v2) Continuing from the previous example: What if the patient got a negative test result instead? In that case, what is the probaiblity they do not have the disease? Independent Events Question: is supposed to capture how information about affects the probability of . What if it doesn't? Events are independent if . Observation: If have nonzero probability and are independent, then: We can take this last equation as a definition of independence. Continuing , recall and . We found that , so and are not independent. Now consider the event . We have: Therefore events are independent. " + "title": "Tuesday, Jan 13", + "body": " Tuesday, Jan 13 This is an outline of the topics we covered in class. These notes are not a substitute for your own note-taking. I highly recommend that you take your own notes during class. If you ever miss a class for any reason, reach out to another student in class to get a copy of their notes. Sec 1.1: Sets In prior math courses, you mostly asked deterministic questions. Now, we need new tools to model randomness . A toxin molecule in a cell has a certain chance each minute to leave the cell. A patient takes a diagnostic test for a disease and wants to know the chance that they have the disease based on the test result. The sample space , often denoted , is the set of all possible results of an experiment. A single result is called an outcome , while a collection of results is called an event . An experiment consists of rolling a standard 6-sided die (D6). The sample space is . One possible event is , i.e., the event that the result of the roll is even. Note: we'll use notation like D6 to indicate a 6-sided die with faces 1, 2, 3, 4, 5, 6. Similarly, for example, D4 will indicate a 4-sided die with faces 1, 2, 3, 4. The symbol means \"is an element of\", as in . The symbol means \"is a subset of\", as in . This means that every element of the set is also an element of the set . Consider sets and , each contained inside . We can combine sets in a variety of ways: Union The union of and is the set . Intersection The intersection of and is the set . Difference The set difference is the set . Complement The complement of is the set . Empty Set The empty set , usually written or , is the set which contains no elements. It's useful sometimes to draw pictures called Venn diagrams representing set interactions. Union Venn diagram showing sets with the region representing shaded. Intersection Venn diagram showing sets with the region representing shaded. Difference Venn diagram showing sets with the region representing shaded. Complement Venn diagram showing set with the region representing shaded. Sec 1.2: Probability Next, we want to start assigning probabilities to each individual outcome so we can then find the probabilities of events. An experiment consists of rolling a D6. The sample space is . We might assign probabilities as follows: Distribution for a fair die 1 2 3 4 5 6 Note that we don't have to assign the same probability to each outcome. If we do, we call this distribution uniform . If we have some event, such as , then we calculate the probability of the event by adding together the probabilities of the outcomes that make up the event: Note that this is the same result that we would get if we counted the total number of outcomes in and divided by the total number of outcomes in . Given a finite set , the cardinality of , written , is the number of elements in . If is a finite probability space with the uniform distribution and is an event, then: Suppose we have a weighted die that's much more likely to come up 6 than any other outcome. Distribution for a fair die 1 0.1 2 0.1 3 0.1 4 0.2 5 0.1 6 0.4 With this distribution, if , then: Pick a number from 1 to 10. What is the probability of picking 3? Some considerations: Are we using the uniform distribution? What even is the sample space here? Do we need to pick only integers, or is an outcome here? What would \"uniform\" mean if the sample space was infinite? A probability distribution on a sample space assigns probabilities to every event, satisfying the following conditions: . for any event . If , then . Suppose we flip a coin until we see heads. The sample space is . What would \"uniform\" mean here? Is there any way we could assign the same probability to each individual outcome here? Instead of \"uniform\", what if we want to treat the coin as a fair coin? Then what would the distribution be? Distribution assuming a fair coin # flips 1 2 3 4 One last (very useful!) observation. Recall: If , then . For any event , and . So: We can rewrite this in two useful ways: " }, { - "id": "subsubsec-Sets-2", + "id": "subsec-Sets-2", "level": "2", - "url": "notes-week-01.html#subsubsec-Sets-2", + "url": "notes-01-13.html#subsec-Sets-2", "type": "Paragraph (with a defined term)", "number": "", "title": "", "body": "deterministic randomness " }, { - "id": "subsubsec-Sets-3", + "id": "subsec-Sets-3", "level": "2", - "url": "notes-week-01.html#subsubsec-Sets-3", + "url": "notes-01-13.html#subsec-Sets-3", "type": "Example", "number": "1", "title": "", "body": " A toxin molecule in a cell has a certain chance each minute to leave the cell. " }, { - "id": "subsubsec-Sets-4", + "id": "subsec-Sets-4", "level": "2", - "url": "notes-week-01.html#subsubsec-Sets-4", + "url": "notes-01-13.html#subsec-Sets-4", "type": "Example", "number": "2", "title": "", @@ -48,7 +48,7 @@ var ptx_lunr_docs = [ { "id": "def-sample-space", "level": "2", - "url": "notes-week-01.html#def-sample-space", + "url": "notes-01-13.html#def-sample-space", "type": "Definition", "number": "3", "title": "", @@ -57,7 +57,7 @@ var ptx_lunr_docs = [ { "id": "example-sample-space", "level": "2", - "url": "notes-week-01.html#example-sample-space", + "url": "notes-01-13.html#example-sample-space", "type": "Example", "number": "4", "title": "", @@ -66,7 +66,7 @@ var ptx_lunr_docs = [ { "id": "def-subset", "level": "2", - "url": "notes-week-01.html#def-subset", + "url": "notes-01-13.html#def-subset", "type": "Definition", "number": "5", "title": "", @@ -75,16 +75,16 @@ var ptx_lunr_docs = [ { "id": "def-set-operations", "level": "2", - "url": "notes-week-01.html#def-set-operations", + "url": "notes-01-13.html#def-set-operations", "type": "Definition", "number": "6", "title": "", "body": " Consider sets and , each contained inside . We can combine sets in a variety of ways: Union The union of and is the set . Intersection The intersection of and is the set . Difference The set difference is the set . Complement The complement of is the set . Empty Set The empty set , usually written or , is the set which contains no elements. " }, { - "id": "subsubsec-Sets-10", + "id": "subsec-Sets-10", "level": "2", - "url": "notes-week-01.html#subsubsec-Sets-10", + "url": "notes-01-13.html#subsec-Sets-10", "type": "Paragraph (with a defined term)", "number": "", "title": "", @@ -93,7 +93,7 @@ var ptx_lunr_docs = [ { "id": "fig-Venn-diagram-union", "level": "2", - "url": "notes-week-01.html#fig-Venn-diagram-union", + "url": "notes-01-13.html#fig-Venn-diagram-union", "type": "Figure", "number": "7", "title": "", @@ -102,7 +102,7 @@ var ptx_lunr_docs = [ { "id": "fig-Venn-diagram-intersection", "level": "2", - "url": "notes-week-01.html#fig-Venn-diagram-intersection", + "url": "notes-01-13.html#fig-Venn-diagram-intersection", "type": "Figure", "number": "8", "title": "", @@ -111,7 +111,7 @@ var ptx_lunr_docs = [ { "id": "fig-Venn-diagram-difference", "level": "2", - "url": "notes-week-01.html#fig-Venn-diagram-difference", + "url": "notes-01-13.html#fig-Venn-diagram-difference", "type": "Figure", "number": "9", "title": "", @@ -120,16 +120,16 @@ var ptx_lunr_docs = [ { "id": "fig-Venn-diagram-complement", "level": "2", - "url": "notes-week-01.html#fig-Venn-diagram-complement", + "url": "notes-01-13.html#fig-Venn-diagram-complement", "type": "Figure", "number": "10", "title": "", "body": " Complement Venn diagram showing set with the region representing shaded. " }, { - "id": "subsubsec-Probability-3", + "id": "subsec-Probability-3", "level": "2", - "url": "notes-week-01.html#subsubsec-Probability-3", + "url": "notes-01-13.html#subsec-Probability-3", "type": "Example", "number": "11", "title": "", @@ -138,34 +138,34 @@ var ptx_lunr_docs = [ { "id": "def-cardinality", "level": "2", - "url": "notes-week-01.html#def-cardinality", + "url": "notes-01-13.html#def-cardinality", "type": "Definition", "number": "13", "title": "", "body": " Given a finite set , the cardinality of , written , is the number of elements in . " }, { - "id": "subsubsec-Probability-5", + "id": "subsec-Probability-5", "level": "2", - "url": "notes-week-01.html#subsubsec-Probability-5", + "url": "notes-01-13.html#subsec-Probability-5", "type": "Fact", "number": "14", "title": "", "body": " If is a finite probability space with the uniform distribution and is an event, then: " }, { - "id": "subsubsec-Probability-6", + "id": "subsec-Probability-6", "level": "2", - "url": "notes-week-01.html#subsubsec-Probability-6", + "url": "notes-01-13.html#subsec-Probability-6", "type": "Example", "number": "15", "title": "", "body": " Suppose we have a weighted die that's much more likely to come up 6 than any other outcome. Distribution for a fair die 1 0.1 2 0.1 3 0.1 4 0.2 5 0.1 6 0.4 With this distribution, if , then: " }, { - "id": "subsubsec-Probability-7", + "id": "subsec-Probability-7", "level": "2", - "url": "notes-week-01.html#subsubsec-Probability-7", + "url": "notes-01-13.html#subsec-Probability-7", "type": "Example", "number": "17", "title": "", @@ -174,34 +174,43 @@ var ptx_lunr_docs = [ { "id": "def-probability-distribution", "level": "2", - "url": "notes-week-01.html#def-probability-distribution", + "url": "notes-01-13.html#def-probability-distribution", "type": "Definition", "number": "18", "title": "", "body": " A probability distribution on a sample space assigns probabilities to every event, satisfying the following conditions: . for any event . If , then . " }, { - "id": "subsubsec-Probability-9", + "id": "subsec-Probability-9", "level": "2", - "url": "notes-week-01.html#subsubsec-Probability-9", + "url": "notes-01-13.html#subsec-Probability-9", "type": "Example", "number": "19", "title": "", "body": " Suppose we flip a coin until we see heads. The sample space is . What would \"uniform\" mean here? Is there any way we could assign the same probability to each individual outcome here? Instead of \"uniform\", what if we want to treat the coin as a fair coin? Then what would the distribution be? Distribution assuming a fair coin # flips 1 2 3 4 " }, { - "id": "subsubsec-Probability-10", + "id": "subsec-Probability-10", "level": "2", - "url": "notes-week-01.html#subsubsec-Probability-10", + "url": "notes-01-13.html#subsec-Probability-10", "type": "Example", "number": "21", "title": "", "body": " One last (very useful!) observation. Recall: If , then . For any event , and . So: We can rewrite this in two useful ways: " }, { - "id": "subsubsec-Conditional-Probability-3", + "id": "notes-01-15", + "level": "1", + "url": "notes-01-15.html", + "type": "Section", + "number": "", + "title": "Thursday, Jan 15", + "body": " Thursday, Jan 15 This is an outline of the topics we covered in class. These notes are not a substitute for your own note-taking. I highly recommend that you take your own notes during class. If you ever miss a class for any reason, reach out to another student in class to get a copy of their notes. Sec 1.3: Conditional Probability Question: How does evidence (e.g., knowledge of one event occurring) change our knowledge of probabilities for other events? Roll a fair D6 two times. Let and . feels more likely if we already know has occurred. The conditional probability of given is: , tells the proportion of which is overlapped by . Two overlapping circles representing events and sit inside a rectangle representing the sample space . The circle labeled is shaded. The portion of that circle which is overlapped by the circle is also filled in with slanted lines. Continuing from the previous example, . So . Then: Notice that is significantly larger than . Diagnostic Testing Setup: A patient takes a diagnostic test. Let be the event that they test positive. Let be the event that they have the disease. The sensitivity of a diagnostic test is . The specificity of a diagnostic test is . But, what the patient really wants to know is . A disease has a prevalence of 1%. A test has sensitivity of 90% and specificity of 91%. For a patient who gets a positive test result, what is the probability that they have the disease? C! Bayes' Theorem (v1) For events with nonzero probability: For example, if a patient sees a positive diagnostic test result, they might try to calculate: is the sensitivity. could be the prevalence. We don't have direct access to . Observation: , so . Observation 2: So: Bayes' Theorem (v2) Continuing from the previous example: What if the patient got a negative test result instead? In that case, what is the probaiblity they do not have the disease? Sec 1.4: Independent Events Question: is supposed to capture how information about affects the probability of . What if it doesn't? Events are independent if . Observation: If have nonzero probability and are independent, then: We can take this last equation as a definition of independence. Continuing , recall and . We found that , so and are not independent. Now consider the event . We have: Therefore events are independent. " +}, +{ + "id": "subsec-Conditional-Probability-3", "level": "2", - "url": "notes-week-01.html#subsubsec-Conditional-Probability-3", + "url": "notes-01-15.html#subsec-Conditional-Probability-3", "type": "Example", "number": "22", "title": "", @@ -210,7 +219,7 @@ var ptx_lunr_docs = [ { "id": "def-conditional-probability", "level": "2", - "url": "notes-week-01.html#def-conditional-probability", + "url": "notes-01-15.html#def-conditional-probability", "type": "Definition", "number": "23", "title": "", @@ -219,7 +228,7 @@ var ptx_lunr_docs = [ { "id": "example-rolls-conditional", "level": "2", - "url": "notes-week-01.html#example-rolls-conditional", + "url": "notes-01-15.html#example-rolls-conditional", "type": "Example", "number": "25", "title": "", @@ -228,16 +237,16 @@ var ptx_lunr_docs = [ { "id": "def-sensitivity-specificity", "level": "2", - "url": "notes-week-01.html#def-sensitivity-specificity", + "url": "notes-01-15.html#def-sensitivity-specificity", "type": "Definition", "number": "26", "title": "", "body": " The sensitivity of a diagnostic test is . The specificity of a diagnostic test is . " }, { - "id": "subsubsec-Diagnostic-Testing-5", + "id": "subsec-Diagnostic-Testing-5", "level": "2", - "url": "notes-week-01.html#subsubsec-Diagnostic-Testing-5", + "url": "notes-01-15.html#subsec-Diagnostic-Testing-5", "type": "Example", "number": "27", "title": "", @@ -246,7 +255,7 @@ var ptx_lunr_docs = [ { "id": "thm-Bayes-v1", "level": "2", - "url": "notes-week-01.html#thm-Bayes-v1", + "url": "notes-01-15.html#thm-Bayes-v1", "type": "Theorem", "number": "28", "title": "Bayes’ Theorem (v1).", @@ -255,7 +264,7 @@ var ptx_lunr_docs = [ { "id": "fig-P-breakdown", "level": "2", - "url": "notes-week-01.html#fig-P-breakdown", + "url": "notes-01-15.html#fig-P-breakdown", "type": "Figure", "number": "29", "title": "", @@ -264,16 +273,16 @@ var ptx_lunr_docs = [ { "id": "thm-Bayes-v2", "level": "2", - "url": "notes-week-01.html#thm-Bayes-v2", + "url": "notes-01-15.html#thm-Bayes-v2", "type": "Theorem", "number": "30", "title": "Bayes’ Theorem (v2).", "body": " Bayes' Theorem (v2) " }, { - "id": "subsubsec-Diagnostic-Testing-12", + "id": "subsec-Diagnostic-Testing-12", "level": "2", - "url": "notes-week-01.html#subsubsec-Diagnostic-Testing-12", + "url": "notes-01-15.html#subsec-Diagnostic-Testing-12", "type": "Example", "number": "31", "title": "", @@ -282,7 +291,7 @@ var ptx_lunr_docs = [ { "id": "def-independent-events", "level": "2", - "url": "notes-week-01.html#def-independent-events", + "url": "notes-01-15.html#def-independent-events", "type": "Definition", "number": "32", "title": "", @@ -291,12 +300,102 @@ var ptx_lunr_docs = [ { "id": "example-rolls-independent", "level": "2", - "url": "notes-week-01.html#example-rolls-independent", + "url": "notes-01-15.html#example-rolls-independent", "type": "Example", "number": "33", "title": "", "body": " Continuing , recall and . We found that , so and are not independent. Now consider the event . We have: Therefore events are independent. " }, +{ + "id": "notes-01-20", + "level": "1", + "url": "notes-01-20.html", + "type": "Section", + "number": "", + "title": "Tuesday, Jan 20", + "body": " Tuesday, Jan 20 This is an outline of the topics we covered in class. These notes are not a substitute for your own note-taking. I highly recommend that you take your own notes during class. If you ever miss a class for any reason, reach out to another student in class to get a copy of their notes. Sec 2.1: Random Variables A random variable is a function . The idea is that is a variable representing a real number value which depends on the outcome of an experiment. An experiment consists of planting 50 seeds in a garden, then growing them for 3 months. Let be the height of plant . Let be the number of seeds that didn't sprout. Let A random variable has its own probability distribution. Roll a fair D6 twice. Let be the sum of the rolls. Then has 36 elements. Since the die is fair, the distribution on is uniform, i.e., for any . takes on the values , with probabilities: Distribution for 2 1\/36 3 2\/36 4 3\/36 7 6\/36 8 5\/36 12 1\/36 Note that the distribution on is uniform, but the distribution on is not. Let be a sample space and an event. Let is called an indicator random variable , and we say \" indicates \". The distribution on is: Suppose we flip a coin times. Let indicate heads on flip . Let be the total number of heads in all flips. Then: If is the probability of the coin coming up heads on a flip, then has the binomial distribution with parameters . We'll use the notation and: Suppose the coin has and we flip it times. Find . The relevant flip sequences are: Each individual sequence has a probability of . So the total probability is: That is, (number of flip sequences)(probability of each sequence). " +}, +{ + "id": "def-RV", + "level": "2", + "url": "notes-01-20.html#def-RV", + "type": "Definition", + "number": "34", + "title": "", + "body": " A random variable is a function . " +}, +{ + "id": "subsec-Discrete-Random-Variables-4", + "level": "2", + "url": "notes-01-20.html#subsec-Discrete-Random-Variables-4", + "type": "Example", + "number": "35", + "title": "", + "body": " An experiment consists of planting 50 seeds in a garden, then growing them for 3 months. Let be the height of plant . Let be the number of seeds that didn't sprout. Let " +}, +{ + "id": "subsec-Discrete-Random-Variables-6", + "level": "2", + "url": "notes-01-20.html#subsec-Discrete-Random-Variables-6", + "type": "Example", + "number": "36", + "title": "", + "body": " Roll a fair D6 twice. Let be the sum of the rolls. Then has 36 elements. Since the die is fair, the distribution on is uniform, i.e., for any . takes on the values , with probabilities: Distribution for 2 1\/36 3 2\/36 4 3\/36 7 6\/36 8 5\/36 12 1\/36 Note that the distribution on is uniform, but the distribution on is not. " +}, +{ + "id": "subsec-Discrete-Random-Variables-7", + "level": "2", + "url": "notes-01-20.html#subsec-Discrete-Random-Variables-7", + "type": "Example", + "number": "38", + "title": "", + "body": " Let be a sample space and an event. Let is called an indicator random variable , and we say \" indicates \". The distribution on is: " +}, +{ + "id": "subsec-Discrete-Random-Variables-8", + "level": "2", + "url": "notes-01-20.html#subsec-Discrete-Random-Variables-8", + "type": "Example", + "number": "39", + "title": "", + "body": " Suppose we flip a coin times. Let indicate heads on flip . Let be the total number of heads in all flips. Then: If is the probability of the coin coming up heads on a flip, then has the binomial distribution with parameters . We'll use the notation and: Suppose the coin has and we flip it times. Find . The relevant flip sequences are: Each individual sequence has a probability of . So the total probability is: That is, (number of flip sequences)(probability of each sequence). " +}, +{ + "id": "quiz-01", + "level": "1", + "url": "quiz-01.html", + "type": "Worksheet", + "number": "", + "title": "Quiz 1", + "body": " Quiz 1 The following work should be completed individually. Use of notes or textbooks is not allowed. You may use a scientific calculator, not a graphing calculator or phone app. Show all work unless instructed otherwise. Write either True or False for each of the following statements. No justification is required. If and are any sets, then and . True. If and are any events, then . False. If and are any events, then . False. We find a 4-sided die with faces 0, 1, 3, and 5. An experiment consists of rolling the die two times. Write down the sample space of all possible outcomes for this experiment. Let be the event that the second roll is at least twice the value of the first roll. Let m B be the event that the sum of the rolls is odd. Assume the die is fair. List the outcomes in and calculate . List the outcomes in and calculate . Then , and . A diagnostic test is developed to detect a disease present in 1.3% of the population. For a patient who has the disease, the test will accurately give a positive result 62% of the time. When the patient does not have the disease, the test will accurately give a negative result 99.4% of the time. For a patient who receives a positive test, what is the probability they have the disease? Let be the event of receiving a positive test result and be the event of having the disease. The given information is: , and . Then, using Bayes' Theorem: " +}, +{ + "id": "quiz-01-3-1", + "level": "2", + "url": "quiz-01.html#quiz-01-3-1", + "type": "Worksheet Exercise", + "number": "1", + "title": "", + "body": " Write either True or False for each of the following statements. No justification is required. If and are any sets, then and . True. If and are any events, then . False. If and are any events, then . False. " +}, +{ + "id": "quiz-01-3-2", + "level": "2", + "url": "quiz-01.html#quiz-01-3-2", + "type": "Worksheet Exercise", + "number": "2", + "title": "", + "body": " We find a 4-sided die with faces 0, 1, 3, and 5. An experiment consists of rolling the die two times. Write down the sample space of all possible outcomes for this experiment. Let be the event that the second roll is at least twice the value of the first roll. Let m B be the event that the sum of the rolls is odd. Assume the die is fair. List the outcomes in and calculate . List the outcomes in and calculate . Then , and . " +}, +{ + "id": "quiz-01-4-1", + "level": "2", + "url": "quiz-01.html#quiz-01-4-1", + "type": "Worksheet Exercise", + "number": "3", + "title": "", + "body": " A diagnostic test is developed to detect a disease present in 1.3% of the population. For a patient who has the disease, the test will accurately give a positive result 62% of the time. When the patient does not have the disease, the test will accurately give a negative result 99.4% of the time. For a patient who receives a positive test, what is the probability they have the disease? Let be the event of receiving a positive test result and be the event of having the disease. The given information is: , and . Then, using Bayes' Theorem: " +}, { "id": "recitation-calculus-review", "level": "1", @@ -347,7 +446,7 @@ var ptx_lunr_docs = [ "level": "2", "url": "recitation-calculus-review.html#thm-FTC", "type": "Theorem", - "number": "34", + "number": "40", "title": "Fundamental Theorem of Calculus.", "body": " Fundamental Theorem of Calculus If is an antiderivative of i.e., if then: " }, diff --git a/course/notes-01-13.html b/course/notes-01-13.html new file mode 100755 index 0000000..4bc3654 --- /dev/null +++ b/course/notes-01-13.html @@ -0,0 +1,524 @@ + + + + + + + + + + + + + + + + +Tuesday, Jan 13 + + + + + + + + + + + + + + + + + + + + +Skip to main content
    +
    + +

    +Section Tuesday, Jan 13 +

    +
    This is an outline of the topics we covered in class. These notes are not a substitute for your own note-taking. I highly recommend that you take your own notes during class. If you ever miss a class for any reason, reach out to another student in class to get a copy of their notes. +

    +Subsection Sec 1.1: Sets +

    +
    In prior math courses, you mostly asked deterministic questions. Now, we need new tools to model randomness. +
    +

    +Example 1. +

    +
    A toxin molecule in a cell has a certain chance each minute to leave the cell. +
    +

    +Example 2. +

    +
    A patient takes a diagnostic test for a disease and wants to know the chance that they have the disease based on the test result. +
    +

    +Definition 3. +

    +
    The sample space, often denoted \(\Omega\text{,}\) is the set of all possible results of an experiment. A single result is called an outcome, while a collection of results is called an event. +
    +

    +Example 4. +

    +
    An experiment consists of rolling a standard 6-sided die (D6). The sample space is \(\Omega = \{1, 2, 3, 4, 5, 6\}\text{.}\) One possible event is \(A = \{2, 4, 6\}\text{,}\) i.e., the event that the result of the roll is even. +
    +
    Note: we’ll use notation like D6 to indicate a 6-sided die with faces 1, 2, 3, 4, 5, 6. Similarly, for example, D4 will indicate a 4-sided die with faces 1, 2, 3, 4. +
    +

    +Definition 5. +

    +
    The symbol \(\in\) means "is an element of", as in \(4 \in A\text{.}\) +
    The symbol \(\subset\) means "is a subset of", as in \(A \subset \Omega\text{.}\) This means that every element of the set \(A\) is also an element of the set \(\Omega\text{.}\) +
    +

    +Definition 6. +

    +
    +
    Consider sets \(A\) and \(B\text{,}\) each contained inside \(\Omega\text{.}\) We can combine sets in a variety of ways:
    +
    +
    Union +
    +
    The union of \(A\) and \(B\) is the set \(A \cup B = \{x \mid x \in A \text{ or } x \in B\}\text{.}\) +
    +
    Intersection +
    +
    The intersection of \(A\) and \(B\) is the set \(A \cap B = \{x \mid x \in A \text{ and } x \in B\}\text{.}\) +
    +
    Difference +
    +
    The set difference \(A-B\) is the set \(A - B = \{x \mid x \in A \text{ and } x \notin B\}\text{.}\) +
    +
    Complement +
    +
    The complement of \(A\) is the set \(A^c = \{x \in \Omega \mid x \notin A\}\text{.}\) +
    +
    Empty Set +
    +
    The empty set, usually written \(\emptyset\) or \(\{\}\text{,}\) is the set which contains no elements. +
    +
    + +
    +
    It’s useful sometimes to draw pictures called Venn diagrams representing set interactions. +
    +
    +
    +
    described in detail following the image
    Venn diagram showing sets \(A, B\) with the region representing \(A \cup B\) shaded. +
    Figure 7. Union
    +
    described in detail following the image
    Venn diagram showing sets \(A, B\) with the region representing \(A \cap B\) shaded. +
    Figure 8. Intersection
    +
    +
    +
    described in detail following the image
    Venn diagram showing sets \(A, B\) with the region representing \(A - B\) shaded. +
    Figure 9. Difference
    +
    described in detail following the image
    Venn diagram showing set \(A \subset \Omega\) with the region representing \(A^c\) shaded. +
    Figure 10. Complement
    +
    +
    +

    +Subsection Sec 1.2: Probability +

    +
    Next, we want to start assigning probabilities to each individual outcome so we can then find the probabilities of events. +
    +

    +Example 11. +

    +
    An experiment consists of rolling a D6. The sample space is \(\Omega = \{1, 2, 3, 4, 5, 6\}\text{.}\) We might assign probabilities as follows: +
    Table 12. Distribution for a fair die
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \(x\)\(\Pr(x)\)
    1\(1/6\)
    2\(1/6\)
    3\(1/6\)
    4\(1/6\)
    5\(1/6\)
    6\(1/6\)
    +
    Note that we don’t have to assign the same probability to each outcome. If we do, we call this distribution uniform. If we have some event, such as \(A = \{2, 4, 6\}\text{,}\) then we calculate the probability of the event by adding together the probabilities of the outcomes that make up the event:
    +
    +\begin{gather*} +\Pr(A) = \Pr(2) + \Pr(4) + \Pr(6) = \frac{1}{6} + \frac{1}{6} + \frac{1}{6} = \frac{3}{6} = \frac{1}{2} +\end{gather*} +
    +
    Note that this is the same result that we would get if we counted the total number of outcomes in \(A\) and divided by the total number of outcomes in \(\Omega\text{.}\) +
    + +
    +

    +Definition 13. +

    +
    Given a finite set \(A\text{,}\) the cardinality of \(A\text{,}\) written \(|A|\text{,}\) is the number of elements in \(A\text{.}\) +
    +

    +Example 15. +

    +
    Suppose we have a weighted die that’s much more likely to come up 6 than any other outcome. +
    Table 16. Distribution for a fair die
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \(x\)\(\Pr(x)\)
    10.1
    20.1
    30.1
    40.2
    50.1
    60.4
    +
    With this distribution, if \(A = \{2, 4, 6\}\text{,}\) then:
    +
    +\begin{gather*} +\Pr(A) = 0.1 + 0.2 + 0.4 = 0.7 \neq \frac{3}{6}. +\end{gather*} +
    + +
    +

    +Example 17. +

    +
    Pick a number from 1 to 10. What is the probability of picking 3? +
    +
    Some considerations:
    +
      +
    1. +
      Are we using the uniform distribution? +
      + +
    2. +
    3. +
      What even is the sample space here? Do we need to pick only integers, or is \(\pi\) an outcome here? +
      + +
    4. +
    5. +
      What would "uniform" mean if the sample space was infinite? +
      + +
    6. +
    + +
    +

    +Definition 18. +

    +
    +
    A probability distribution on a sample space \(\Omega\) assigns probabilities to every event, satisfying the following conditions:
    +
      +
    1. +
      +\(\Pr(\Omega) = 1\text{.}\) +
      + +
    2. +
    3. +
      +\(0 \leq \Pr(A) \leq 1\) for any event \(A\text{.}\) +
      + +
    4. +
    5. +
      If \(A \cap B = \emptyset\text{,}\) then \(\Pr(A\cup B) = \Pr(A) + \Pr(B)\text{.}\) +
      + +
    6. +
    + +
    +

    +Example 19. +

    +
    Suppose we flip a coin until we see heads. The sample space is \(\Omega = \{H, TH, TTH, TTTH, \dotsc\}\text{.}\) What would "uniform" mean here? Is there any way we could assign the same probability to each individual outcome here? +
    Instead of "uniform", what if we want to treat the coin as a fair coin? Then what would the distribution be? +
    Table 20. Distribution assuming a fair coin
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \(x\)# flips\(\Pr(x)\)
    \(H\)1\(1/2\)
    \(TH\)2\(1/4\)
    \(TTH\)3\(1/8\)
    \(TTTH\)4\(1/16\)
    \(\vdots\)\(\vdots\)
    \(T\dotsm TH\)\(n\)\(1/2^n\)
    \(\vdots\)\(\vdots\)

    +Example 21. +

    +
    One last (very useful!) observation. Recall: If \(A\cap B = \emptyset\text{,}\) then \(\Pr(A\cup B) = \Pr(A) + \Pr(B)\text{.}\) +
    +
    For any event \(A\text{,}\) \(A\cap A^c = \emptyset\) and \(A \cup A^c = \Omega\text{.}\) So:
    +
    +\begin{gather*} +1 = \Pr(\underbrace{A \cup A^c}_{\Omega}) = \Pr(A) + \Pr(A^c). +\end{gather*} +
    +
    We can rewrite this in two useful ways:
    +
    +\begin{align*} +\Pr(A) \amp = 1 - \Pr(A^c) \\ +\Pr(A^c) \amp = 1 - \Pr(A) +\end{align*} +
    + +
    +
    +
    +
    + + + diff --git a/course/notes-01-15.html b/course/notes-01-15.html new file mode 100755 index 0000000..14457b8 --- /dev/null +++ b/course/notes-01-15.html @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + +Thursday, Jan 15 + + + + + + + + + + + + + + + + + + + + +Skip to main content
    +
    + +

    +Section Thursday, Jan 15 +

    +
    This is an outline of the topics we covered in class. These notes are not a substitute for your own note-taking. I highly recommend that you take your own notes during class. If you ever miss a class for any reason, reach out to another student in class to get a copy of their notes. +

    +Subsection Sec 1.3: Conditional Probability +

    +
    Question: How does evidence (e.g., knowledge of one event occurring) change our knowledge of probabilities for other events? +
    +

    +Example 22. +

    +
    Roll a fair D6 two times. Let \(A = \{\text{sum } \geq 10\}\) and \(B = \{\text{first roll is } 6\}\text{.}\) \(A\) feels more likely if we already know \(B\) has occurred. +
    +

    +Definition 23. +

    +
    +
    The conditional probability of \(A\) given \(B\) is: ,
    +
    +\begin{gather*} +\Pr(A \mid B) = \frac{\Pr(A\cap B)}{\Pr(B)} +\end{gather*} +
    + +
    +described in detail following the image
    Two overlapping circles representing events \(A\) and \(B\) sit inside a rectangle representing the sample space \(\Omega\text{.}\) The circle labeled \(B\) is shaded. The portion of that circle which is overlapped by the \(A\) circle is also filled in with slanted lines. +
    +
    +
    Figure 24. \(\Pr(A \mid B)\) tells the proportion of \(B\) which is overlapped by \(A\text{.}\)

    +Example 25. +

    +
    +
    Continuing from the previous example, \(|\Omega| = 36\text{.}\) +
    +
    +\begin{align*} +A \amp = \{(4, 6), (5, 5), (5, 6), (6, 4), (6, 5), (6, 6)\} \\ +B \amp = \{(6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)\} \\ +A \cap B \amp = \{(6, 4), (6, 5), (6, 6)\} +\end{align*} +
    +
    So \(\Pr(A) = \frac{6}{36}, \Pr(B) = \frac{6}{36}, \text{and } \Pr(A\cap B) = \frac{3}{36}\text{.}\) Then:
    +
    +\begin{gather*} +\Pr(A \mid B) = \frac{\Pr(A\cap B)}{\Pr(B)} = \frac{3/36}{6/36} = \frac{3}{6} = \frac{1}{2}. +\end{gather*} +
    +
    Notice that \(\Pr(A\mid B)\) is significantly larger than \(\Pr(A)\text{.}\) +
    + +
    +

    +Subsection Diagnostic Testing +

    +
    Setup: A patient takes a diagnostic test. Let \(P\) be the event that they test positive. Let \(D\) be the event that they have the disease. +
    +

    +Definition 26. +

    +
    The sensitivity of a diagnostic test is \(\Pr(P \mid D)\text{.}\) The specificity of a diagnostic test is \(\Pr(P^c \mid D^c)\text{.}\) +
    +
    But, what the patient really wants to know is \(\Pr(D \mid P)\text{.}\) +
    +

    +Example 27. +

    +
    A disease has a prevalence of 1%. A test has sensitivity of 90% and specificity of 91%. For a patient who gets a positive test result, what is the probability that they have the disease? +
    +
    +\begin{align*} +\text{A) } 9/10 \amp \amp \text{B) } 8/10 \amp \amp \text{C) } 1/10 \amp \amp \text{D) } 1/100 +\end{align*} +
    + +
    +
    Answer.
    +
    C! +
    + +
    +
    +
    For example, if a patient sees a positive diagnostic test result, they might try to calculate:
    +
    +\begin{gather*} +\Pr(D \mid P) = \frac{\Pr(P \mid D)\Pr(D)}{\Pr(P)} +\end{gather*} +
    +
    +\(\Pr(P \mid D)\) is the sensitivity. \(\Pr(D)\) could be the prevalence. We don’t have direct access to \(\Pr(P)\text{.}\) +
    + +
    +
    Observation: \(\Omega = D \cup D^c\text{,}\) so \(P = (P\cap D) \cup (P\cap D^c)\text{.}\) +
    +
    +described in detail following the image
    +
    +
    Figure 29.
    +
    Observation 2:
    +
    +\begin{align*} +\Pr(P \mid D) \amp \frac{\Pr(P\cap D)}{\Pr(D)} \amp \amp \Rightarrow \amp \Pr(P \cap D) \amp = \Pr(P\mid D)\Pr(D) \\ +\Pr(P \mid D^c) \amp \frac{\Pr(P\cap D^c)}{\Pr(D^c)} \amp \amp \Rightarrow \amp \Pr(P \cap D^c) \amp = \Pr(P\mid D^c)\Pr(D^c) +\end{align*} +
    +
    So:
    +
    +\begin{gather*} +\Pr(P) = \Pr(P\mid D)\Pr(D) + \Pr(P\mid D^c)\Pr(D^c) +\end{gather*} +
    + +
    +

    +Example 31. +

    +
    +
    Continuing from the previous example:
    +
    +\begin{align*} +\Pr(D\mid P) \amp = \frac{\Pr(P\mid D)\Pr(D)}{\Pr(P\mid D)\Pr(D) + \Pr(P\mid D^c)\Pr(D^c)} \\ +\amp = \frac{(0.9)(0.01)}{(0.9)(0.01) + (1 - 0.91)(1 - 0.01)} \\ +\amp \approx 0.092 +\end{align*} +
    +
    What if the patient got a negative test result instead? In that case, what is the probaiblity they do not have the disease?
    +
    +\begin{align*} +\Pr(D^c\mid P^c) \amp = \frac{\Pr(P^c\mid D^c)\Pr(D^c)}{\Pr(P^c\mid D^c)\Pr(D^c) + \Pr(P^c\mid D)\Pr(D)} \\ +\amp = \frac{(0.91)(1 - 0.01)}{(0.91)(1 - 0.01) + (1 - 0.9)(0.01)} \\ +\amp \approx 0.999 +\end{align*} +
    + +
    +

    +Subsection Sec 1.4: Independent Events +

    +
    Question: \(\Pr(A \mid B)\) is supposed to capture how information about \(B\) affects the probability of \(A\text{.}\) What if it doesn’t? +
    +

    +Definition 32. +

    +
    Events \(A, B\) are independent if \(\Pr(A \mid B) = \Pr(A)\text{.}\) +
    +
    +
    Observation: If \(A, B\) have nonzero probability and are independent, then:
    +
    +\begin{align*} +\Pr(A\mid B) \amp = \Pr(A) \\ +\frac{\Pr(A\cap B)}{\Pr(B)} \amp = \Pr(A) \\ +\Pr(A\cap B) \amp = \Pr(A)\Pr(B) +\end{align*} +
    +
    We can take this last equation as a definition of independence.
    + +
    +

    +Example 33. +

    +
    Continuing Example 25, recall \(A = \{\text{sum} \geq 10\}\) and \(B = \{\text{1st roll is } 6\}\text{.}\) We found that \(\Pr(A \mid B) \neq \Pr(A)\text{,}\) so \(A\) and \(B\) are not independent. +
    +
    Now consider the event \(C = \{\text{sum} = 7\}\text{.}\) We have:
    +
    +\begin{align*} +C \amp = \{(1, 6), (2, 5), (3, 4), (4, 3), (5, 2), (6, 1)\} \\ +\Pr(C) \amp = \frac{6}{36} = \frac{1}{6} \\ +B\cap C \amp = \{(6, 1)\} \\ +\Pr(B\cap C) \amp = \frac{1}{36} \\ +\text{therefore: } \Pr(C\mid B) \amp = \frac{\Pr(C\cap B)}{\Pr(B)} = \frac{1/36}{1/6} = \frac{1}{6} = \Pr(C) +\end{align*} +
    +
    Therefore events \(B, C\) are independent.
    + +
    +
    +
    +
    + + + diff --git a/course/notes-01-20.html b/course/notes-01-20.html new file mode 100755 index 0000000..bd90116 --- /dev/null +++ b/course/notes-01-20.html @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + +Tuesday, Jan 20 + + + + + + + + + + + + + + + + + + + + +Skip to main content
    +
    + +

    +Section Tuesday, Jan 20 +

    +
    This is an outline of the topics we covered in class. These notes are not a substitute for your own note-taking. I highly recommend that you take your own notes during class. If you ever miss a class for any reason, reach out to another student in class to get a copy of their notes. +

    +Subsection Sec 2.1: Random Variables +

    +

    +Definition 34. +

    +
    A random variable is a function \(X \colon \Omega \to \R\text{.}\) +
    +
    The idea is that \(X\) is a variable representing a real number value which depends on the outcome of an experiment. +
    +

    +Example 35. +

    +
    +
    An experiment consists of planting 50 seeds in a garden, then growing them for 3 months. Let \(H_i\) be the height of plant \(i\text{.}\) Let \(D\) be the number of seeds that didn’t sprout. Let
    +
    +\begin{align*} +A \amp = \text{avg height of all 50 plants} \\ +\amp = \frac{H_1 + H_2 + \dotsb + H_{50}}{50} +\end{align*} +
    + +
    +
    A random variable has its own probability distribution. +
    +

    +Example 36. +

    +
    Roll a fair D6 twice. Let \(S\) be the sum of the rolls. Then \(\Omega = \{(1, 1), (1, 2), \dotsc, (6, 6)\}\) has 36 elements. Since the die is fair, the distribution on \(\Omega\) is uniform, i.e., \(\Pr(\omega) = \frac{1}{36}\) for any \(\omega \in \Omega\text{.}\) +
    +\(S\) takes on the values \(2, 3, 4, \dotsc, 12\text{,}\) with probabilities: +
    Table 37. Distribution for \(S\)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \(x\)\(\Pr(S = x)\)
    21/36
    32/36
    43/36
    \(\vdots\)\(\vdots\)
    76/36
    85/36
    \(\vdots\)
    121/36
    Note that the distribution on \(\Omega\) is uniform, but the distribution on \(S\) is not. +
    +

    +Example 38. +

    +
    +
    Let \(\Omega\) be a sample space and \(A \subset \Omega\) an event. Let
    +
    +\begin{align*} +X = \begin{cases} 1 \amp x \in A \\ 0 \amp x \notin A \end{cases} +\end{align*} +
    +
    +\(X\) is called an indicator random variable, and we say "\(X\) indicates \(A\)".
    + +
    +
    The distribution on \(X\) is:
    +
    +\begin{align*} +\Pr(X = 1) \amp = \Pr(\{ x \mid x \in A\}) = \Pr(A) \\ +\Pr(X = 0) \amp = 1 - \Pr(A) +\end{align*} +
    + +
    +

    +Example 39. +

    +
    +
    Suppose we flip a coin \(n\) times. Let \(H_i\) indicate heads on flip \(i\text{.}\) Let \(S\) be the total number of heads in all flips. Then:
    +
    +\begin{gather*} +S = H_1 + H_2 + \dotsb + H_{n} +\end{gather*} +
    +
    If \(p\) is the probability of the coin coming up heads on a flip, then \(S\) has the binomial distribution with parameters \(n, p\text{.}\) We’ll use the notation \(S \sim \Bin(n, p)\) and:
    +
    +\begin{gather*} +b(k) = b(k; n, p) = \Pr(S = k). +\end{gather*} +
    + +
    Suppose the coin has \(p = 0.3\) and we flip it \(n = 4\) times. Find \(b(2) = b(2; 4, 0.3)\text{.}\) +
    +
    The relevant flip sequences are:
    +
    +\begin{gather*} +THHT, HHTT, TTHH, THTH, HTHT, HTTH +\end{gather*} +
    +
    Each individual sequence has a probability of \((0.3)(0.3)(0.7)(0.7) = 0.0441\text{.}\) So the total probability is:
    +
    +\begin{gather*} +b(2; 4, 0.3) = (6)(0.0441) = 0.2646. +\end{gather*} +
    +
    That is, (number of flip sequences)(probability of each sequence).
    + +
    +
    +
    +
    + + + diff --git a/course/notes-week-01.html b/course/notes-week-01.html deleted file mode 100755 index 53b7924..0000000 --- a/course/notes-week-01.html +++ /dev/null @@ -1,709 +0,0 @@ - - - - - - - - - - - - - - - - -Week 1 - - - - - - - - - - - - - - - - - - - - -Skip to main content
    -
    - -

    -Section Week 1 -

    -
    This is an outline of the topics we covered in the first week of class. These notes are not a substitute for your own note-taking. I highly recommend that you take your own notes during class. If you ever miss a class for any reason, reach out to another student in class to get a copy of their notes. -

    -Subsection Tuesday 1/13 -

    -

    -Subsubsection Sec 1.1: Sets -

    -
    In prior math courses, you mostly asked deterministic questions. Now, we need new tools to model randomness. -
    -
    -Example 1. -
    -
    A toxin molecule in a cell has a certain chance each minute to leave the cell. -
    -
    -Example 2. -
    -
    A patient takes a diagnostic test for a disease and wants to know the chance that they have the disease based on the test result. -
    -
    -Definition 3. -
    -
    The sample space, often denoted \(\Omega\text{,}\) is the set of all possible results of an experiment. A single result is called an outcome, while a collection of results is called an event. -
    -
    -Example 4. -
    -
    An experiment consists of rolling a standard 6-sided die (D6). The sample space is \(\Omega = \{1, 2, 3, 4, 5, 6\}\text{.}\) One possible event is \(A = \{2, 4, 6\}\text{,}\) i.e., the event that the result of the roll is even. -
    -
    Note: we’ll use notation like D6 to indicate a 6-sided die with faces 1, 2, 3, 4, 5, 6. Similarly, for example, D4 will indicate a 4-sided die with faces 1, 2, 3, 4. -
    -
    -Definition 5. -
    -
    The symbol \(\in\) means "is an element of", as in \(4 \in A\text{.}\) -
    The symbol \(\subset\) means "is a subset of", as in \(A \subset \Omega\text{.}\) This means that every element of the set \(A\) is also an element of the set \(\Omega\text{.}\) -
    -
    -Definition 6. -
    -
    -
    Consider sets \(A\) and \(B\text{,}\) each contained inside \(\Omega\text{.}\) We can combine sets in a variety of ways:
    -
    -
    Union -
    -
    The union of \(A\) and \(B\) is the set \(A \cup B = \{x \mid x \in A \text{ or } x \in B\}\text{.}\) -
    -
    Intersection -
    -
    The intersection of \(A\) and \(B\) is the set \(A \cap B = \{x \mid x \in A \text{ and } x \in B\}\text{.}\) -
    -
    Difference -
    -
    The set difference \(A-B\) is the set \(A - B = \{x \mid x \in A \text{ and } x \notin B\}\text{.}\) -
    -
    Complement -
    -
    The complement of \(A\) is the set \(A^c = \{x \in \Omega \mid x \notin A\}\text{.}\) -
    -
    Empty Set -
    -
    The empty set, usually written \(\emptyset\) or \(\{\}\text{,}\) is the set which contains no elements. -
    -
    - -
    -
    It’s useful sometimes to draw pictures called Venn diagrams representing set interactions. -
    -
    -
    -
    described in detail following the image
    Venn diagram showing sets \(A, B\) with the region representing \(A \cup B\) shaded. -
    Figure 7. Union
    -
    described in detail following the image
    Venn diagram showing sets \(A, B\) with the region representing \(A \cap B\) shaded. -
    Figure 8. Intersection
    -
    -
    -
    described in detail following the image
    Venn diagram showing sets \(A, B\) with the region representing \(A - B\) shaded. -
    Figure 9. Difference
    -
    described in detail following the image
    Venn diagram showing set \(A \subset \Omega\) with the region representing \(A^c\) shaded. -
    Figure 10. Complement
    -
    -
    -

    -Subsubsection Sec 1.2: Probability -

    -
    Next, we want to start assigning probabilities to each individual outcome so we can then find the probabilities of events. -
    -
    -Example 11. -
    -
    An experiment consists of rolling a D6. The sample space is \(\Omega = \{1, 2, 3, 4, 5, 6\}\text{.}\) We might assign probabilities as follows: -
    Table 12. Distribution for a fair die
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \(x\)\(\Pr(x)\)
    1\(1/6\)
    2\(1/6\)
    3\(1/6\)
    4\(1/6\)
    5\(1/6\)
    6\(1/6\)
    -
    Note that we don’t have to assign the same probability to each outcome. If we do, we call this distribution uniform. If we have some event, such as \(A = \{2, 4, 6\}\text{,}\) then we calculate the probability of the event by adding together the probabilities of the outcomes that make up the event:
    -
    -\begin{gather*} -\Pr(A) = \Pr(2) + \Pr(4) + \Pr(6) = \frac{1}{6} + \frac{1}{6} + \frac{1}{6} = \frac{3}{6} = \frac{1}{2} -\end{gather*} -
    -
    Note that this is the same result that we would get if we counted the total number of outcomes in \(A\) and divided by the total number of outcomes in \(\Omega\text{.}\) -
    - -
    -
    -Definition 13. -
    -
    Given a finite set \(A\text{,}\) the cardinality of \(A\text{,}\) written \(|A|\text{,}\) is the number of elements in \(A\text{.}\) -
    -
    -Example 15. -
    -
    Suppose we have a weighted die that’s much more likely to come up 6 than any other outcome. -
    Table 16. Distribution for a fair die
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \(x\)\(\Pr(x)\)
    10.1
    20.1
    30.1
    40.2
    50.1
    60.4
    -
    With this distribution, if \(A = \{2, 4, 6\}\text{,}\) then:
    -
    -\begin{gather*} -\Pr(A) = 0.1 + 0.2 + 0.4 = 0.7 \neq \frac{3}{6}. -\end{gather*} -
    - -
    -
    -Example 17. -
    -
    Pick a number from 1 to 10. What is the probability of picking 3? -
    -
    Some considerations:
    -
      -
    1. -
      Are we using the uniform distribution? -
      - -
    2. -
    3. -
      What even is the sample space here? Do we need to pick only integers, or is \(\pi\) an outcome here? -
      - -
    4. -
    5. -
      What would "uniform" mean if the sample space was infinite? -
      - -
    6. -
    - -
    -
    -Definition 18. -
    -
    -
    A probability distribution on a sample space \(\Omega\) assigns probabilities to every event, satisfying the following conditions:
    -
      -
    1. -
      -\(\Pr(\Omega) = 1\text{.}\) -
      - -
    2. -
    3. -
      -\(0 \leq \Pr(A) \leq 1\) for any event \(A\text{.}\) -
      - -
    4. -
    5. -
      If \(A \cap B = \emptyset\text{,}\) then \(\Pr(A\cup B) = \Pr(A) + \Pr(B)\text{.}\) -
      - -
    6. -
    - -
    -
    -Example 19. -
    -
    Suppose we flip a coin until we see heads. The sample space is \(\Omega = \{H, TH, TTH, TTTH, \dotsc\}\text{.}\) What would "uniform" mean here? Is there any way we could assign the same probability to each individual outcome here? -
    Instead of "uniform", what if we want to treat the coin as a fair coin? Then what would the distribution be? -
    Table 20. Distribution assuming a fair coin
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \(x\)# flips\(\Pr(x)\)
    \(H\)1\(1/2\)
    \(TH\)2\(1/4\)
    \(TTH\)3\(1/8\)
    \(TTTH\)4\(1/16\)
    \(\vdots\)\(\vdots\)
    \(T\dotsm TH\)\(n\)\(1/2^n\)
    \(\vdots\)\(\vdots\)
    -Example 21. -
    -
    One last (very useful!) observation. Recall: If \(A\cap B = \emptyset\text{,}\) then \(\Pr(A\cup B) = \Pr(A) + \Pr(B)\text{.}\) -
    -
    For any event \(A\text{,}\) \(A\cap A^c = \emptyset\) and \(A \cup A^c = \Omega\text{.}\) So:
    -
    -\begin{gather*} -1 = \Pr(\underbrace{A \cup A^c}_{\Omega}) = \Pr(A) + \Pr(A^c). -\end{gather*} -
    -
    We can rewrite this in two useful ways:
    -
    -\begin{align*} -\Pr(A) \amp = 1 - \Pr(A^c) \\ -\Pr(A^c) \amp = 1 - \Pr(A) -\end{align*} -
    - -
    -

    -Subsection Thursday 1/15 -

    -

    -Subsubsection Conditional Probability -

    -
    Question: How does evidence (e.g., knowledge of one event occurring) change our knowledge of probabilities for other events? -
    -
    -Example 22. -
    -
    Roll a fair D6 two times. Let \(A = \{\text{sum } \geq 10\}\) and \(B = \{\text{first roll is } 6\}\text{.}\) \(A\) feels more likely if we already know \(B\) has occurred. -
    -
    -Definition 23. -
    -
    -
    The conditional probability of \(A\) given \(B\) is: ,
    -
    -\begin{gather*} -\Pr(A \mid B) = \frac{\Pr(A\cap B)}{\Pr(B)} -\end{gather*} -
    - -
    -described in detail following the image
    Two overlapping circles representing events \(A\) and \(B\) sit inside a rectangle representing the sample space \(\Omega\text{.}\) The circle labeled \(B\) is shaded. The portion of that circle which is overlapped by the \(A\) circle is also filled in with slanted lines. -
    -
    -
    Figure 24. \(\Pr(A \mid B)\) tells the proportion of \(B\) which is overlapped by \(A\text{.}\)
    -Example 25. -
    -
    -
    Continuing from the previous example, \(|\Omega| = 36\text{.}\) -
    -
    -\begin{align*} -A \amp = \{(4, 6), (5, 5), (5, 6), (6, 4), (6, 5), (6, 6)\} \\ -B \amp = \{(6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)\} \\ -A \cap B \amp = \{(6, 4), (6, 5), (6, 6)\} -\end{align*} -
    -
    So \(\Pr(A) = \frac{6}{36}, \Pr(B) = \frac{6}{36}, \text{and } \Pr(A\cap B) = \frac{3}{36}\text{.}\) Then:
    -
    -\begin{gather*} -\Pr(A \mid B) = \frac{\Pr(A\cap B)}{\Pr(B)} = \frac{3/36}{6/36} = \frac{3}{6} = \frac{1}{2}. -\end{gather*} -
    -
    Notice that \(\Pr(A\mid B)\) is significantly larger than \(\Pr(A)\text{.}\) -
    - -
    -

    -Subsubsection Diagnostic Testing -

    -
    Setup: A patient takes a diagnostic test. Let \(P\) be the event that they test positive. Let \(D\) be the event that they have the disease. -
    -
    -Definition 26. -
    -
    The sensitivity of a diagnostic test is \(\Pr(P \mid D)\text{.}\) The specificity of a diagnostic test is \(\Pr(P^c \mid D^c)\text{.}\) -
    -
    But, what the patient really wants to know is \(\Pr(D \mid P)\text{.}\) -
    -
    -Example 27. -
    -
    A disease has a prevalence of 1%. A test has sensitivity of 90% and specificity of 91%. For a patient who gets a positive test result, what is the probability that they have the disease? -
    -
    -\begin{align*} -\text{A) } 9/10 \amp \amp \text{B) } 8/10 \amp \amp \text{C) } 1/10 \amp \amp \text{D) } 1/100 -\end{align*} -
    - -
    -
    Answer.
    -
    C! -
    - -
    -
    -
    For example, if a patient sees a positive diagnostic test result, they might try to calculate:
    -
    -\begin{gather*} -\Pr(D \mid P) = \frac{\Pr(P \mid D)\Pr(D)}{\Pr(P)} -\end{gather*} -
    -
    -\(\Pr(P \mid D)\) is the sensitivity. \(\Pr(D)\) could be the prevalence. We don’t have direct access to \(\Pr(P)\text{.}\) -
    - -
    -
    Observation: \(\Omega = D \cup D^c\text{,}\) so \(P = (P\cap D) \cup (P\cap D^c)\text{.}\) -
    -
    -described in detail following the image
    -
    -
    Figure 29.
    -
    Observation 2:
    -
    -\begin{align*} -\Pr(P \mid D) \amp \frac{\Pr(P\cap D)}{\Pr(D)} \amp \amp \Rightarrow \amp \Pr(P \cap D) \amp = \Pr(P\mid D)\Pr(D) \\ -\Pr(P \mid D^c) \amp \frac{\Pr(P\cap D^c)}{\Pr(D^c)} \amp \amp \Rightarrow \amp \Pr(P \cap D^c) \amp = \Pr(P\mid D^c)\Pr(D^c) -\end{align*} -
    -
    So:
    -
    -\begin{gather*} -\Pr(P) = \Pr(P\mid D)\Pr(D) + \Pr(P\mid D^c)\Pr(D^c) -\end{gather*} -
    - -
    -
    -Example 31. -
    -
    -
    Continuing from the previous example:
    -
    -\begin{align*} -\Pr(D\mid P) \amp = \frac{\Pr(P\mid D)\Pr(D)}{\Pr(P\mid D)\Pr(D) + \Pr(P\mid D^c)\Pr(D^c)} \\ -\amp = \frac{(0.9)(0.01)}{(0.9)(0.01) + (1 - 0.91)(1 - 0.01)} \\ -\amp \approx 0.092 -\end{align*} -
    -
    What if the patient got a negative test result instead? In that case, what is the probaiblity they do not have the disease?
    -
    -\begin{align*} -\Pr(D^c\mid P^c) \amp = \frac{\Pr(P^c\mid D^c)\Pr(D^c)}{\Pr(P^c\mid D^c)\Pr(D^c) + \Pr(P^c\mid D)\Pr(D)} \\ -\amp = \frac{(0.91)(1 - 0.01)}{(0.91)(1 - 0.01) + (1 - 0.9)(0.01)} \\ -\amp \approx 0.999 -\end{align*} -
    - -
    -

    -Subsubsection Independent Events -

    -
    Question: \(\Pr(A \mid B)\) is supposed to capture how information about \(B\) affects the probability of \(A\text{.}\) What if it doesn’t? -
    -
    -Definition 32. -
    -
    Events \(A, B\) are independent if \(\Pr(A \mid B) = \Pr(A)\text{.}\) -
    -
    -
    Observation: If \(A, B\) have nonzero probability and are independent, then:
    -
    -\begin{align*} -\Pr(A\mid B) \amp = \Pr(A) \\ -\frac{\Pr(A\cap B)}{\Pr(B)} \amp = \Pr(A) \\ -\Pr(A\cap B) \amp = \Pr(A)\Pr(B) -\end{align*} -
    -
    We can take this last equation as a definition of independence.
    - -
    -
    -Example 33. -
    -
    Continuing Example 25, recall \(A = \{\text{sum} \geq 10\}\) and \(B = \{\text{1st roll is } 6\}\text{.}\) We found that \(\Pr(A \mid B) \neq \Pr(A)\text{,}\) so \(A\) and \(B\) are not independent. -
    -
    Now consider the event \(C = \{\text{sum} = 7\}\text{.}\) We have:
    -
    -\begin{align*} -C \amp = \{(1, 6), (2, 5), (3, 4), (4, 3), (5, 2), (6, 1)\} \\ -\Pr(C) \amp = \frac{6}{36} = \frac{1}{6} \\ -B\cap C \amp = \{(6, 1)\} \\ -\Pr(B\cap C) \amp = \frac{1}{36} \\ -\text{therefore: } \Pr(C\mid B) \amp = \frac{\Pr(C\cap B)}{\Pr(B)} = \frac{1/36}{1/6} = \frac{1}{6} = \Pr(C) -\end{align*} -
    -
    Therefore events \(B, C\) are independent.
    - -
    -
    -
    -
    - - - diff --git a/course/quiz-01-printable.html b/course/quiz-01-printable.html new file mode 100755 index 0000000..4cd7bd5 --- /dev/null +++ b/course/quiz-01-printable.html @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + +Quiz 1 + + + + + + + + + + + + + + + + + + + + +Skip to main content
    +
    + +
    + +

    +Worksheet Quiz 1 +

    +
    The following work should be completed individually. Use of notes or textbooks is not allowed. You may use a scientific calculator, not a graphing calculator or phone app. +
    +
    Show all work unless instructed otherwise. +

    1.

    +
    Write either True or False for each of the following statements. No justification is required. +
    +

    (a)

    +
    If \(A\) and \(B\) are any sets, then \(|A\cap B| \leq |A|\) and \(|A\cap B| \leq |B|\text{.}\) +
    +
    Solution.
    +
    True. +
    + +
    +

    (b)

    +
    If \(A\) and \(B\) are any events, then \(\Pr(A \mid B) = 1 - \Pr(B \mid A)\text{.}\) +
    +
    Solution.
    +
    False. +
    + +
    +

    (c)

    +
    If \(A\) and \(B\) are any events, then \(\Pr(A\cap B)\Pr(B) = \Pr(A \mid B)\text{.}\) +
    +
    Solution.
    +
    False. +
    + +
    +

    2.

    +
    We find a 4-sided die with faces 0, 1, 3, and 5. An experiment consists of rolling the die two times. +
    +

    (a)

    +
    Write down the sample space \(\Omega\) of all possible outcomes for this experiment. +
    +
    Solution.
    +
    +
    +\begin{align*} +\Omega = \{ \amp (0, 0), (0, 1), (0, 3), (0, 5), \\ +\amp (1, 0), (1, 1), (1, 3), (1, 5), \\ +\amp (3, 0), (3, 1), (3, 3), (3, 5), \\ +\amp (5, 0), (5, 1), (5, 3), (5, 5)\} +\end{align*} +
    + +
    + +
    +

    (b)

    +
    Let \(A\) be the event that the second roll is at least twice the value of the first roll. Let m B be the event that the sum of the rolls is odd. Assume the die is fair. List the outcomes in \(A\) and calculate \(\Pr(A)\text{.}\) List the outcomes in \(B\) and calculate \(\Pr(B)\text{.}\) +
    +
    Solution.
    +
    +
    +\begin{align*} +A \amp = \{(0, 0), (0, 1), (0, 3), (0, 5), (1, 3), (1, 5)\} \\ +B \amp = \{ (0, 1), (0, 3), (0, 5), (1, 0), (3, 0), (5, 0) \} +\end{align*} +
    +
    Then \(\Pr(A) = \frac{|A|}{|\Omega|} = \frac{6}{16} = \frac{3}{8}\text{,}\) and \(\Pr(B) = \frac{|B|}{|\Omega|} = \frac{6}{16} = \frac{3}{8}\text{.}\) +
    + +
    + +
    +

    3.

    +
    A diagnostic test is developed to detect a disease present in 1.3% of the population. For a patient who has the disease, the test will accurately give a positive result 62% of the time. When the patient does not have the disease, the test will accurately give a negative result 99.4% of the time. +
    For a patient who receives a positive test, what is the probability they have the disease? +
    +
    Solution.
    +
    +
    Let \(P\) be the event of receiving a positive test result and \(D\) be the event of having the disease. The given information is: \(\Pr(D) = 0.013, \Pr(P\mid D) = 0.62\text{,}\) and \(\Pr(P^c \mid D^c) = 0.994\text{.}\) Then, using Bayes’ Theorem:
    +
    +\begin{align*} +\Pr(D\mid P) = \frac{\Pr(P \mid D)\Pr(D)}{\Pr(P)} \amp = \frac{\Pr(P \mid D)\Pr(D)}{\Pr(P \mid D)\Pr(D) + \Pr(P \mid D^c)\Pr(D^c)} \\ +\amp = \frac{\Pr(P \mid D)\Pr(D)}{\Pr(P \mid D)\Pr(D) + (1 - \Pr(P^c \mid D^c))(1 - \Pr(D))} \\ +\amp = \frac{(0.62)(0.013)}{(0.62)(0.013) + (1 - 0.994)(1 - 0.013)} \\ +\amp \approx \boxed{0.576} +\end{align*} +
    + +
    + +
    +
    +
    +
    +
    + + + diff --git a/course/quiz-01.html b/course/quiz-01.html new file mode 100755 index 0000000..8b4357e --- /dev/null +++ b/course/quiz-01.html @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + +Quiz 1 + + + + + + + + + + + + + + + + + + + + +Skip to main content
    +
    + +

    +Worksheet Quiz 1 +

    +
    The following work should be completed individually. Use of notes or textbooks is not allowed. You may use a scientific calculator, not a graphing calculator or phone app. +
    +
    Show all work unless instructed otherwise. +

    1.

    +
    Write either True or False for each of the following statements. No justification is required. +
    +

    (a)

    +
    If \(A\) and \(B\) are any sets, then \(|A\cap B| \leq |A|\) and \(|A\cap B| \leq |B|\text{.}\) +
    +
    Solution.
    +
    True. +
    + +
    +

    (b)

    +
    If \(A\) and \(B\) are any events, then \(\Pr(A \mid B) = 1 - \Pr(B \mid A)\text{.}\) +
    +
    Solution.
    +
    False. +
    + +
    +

    (c)

    +
    If \(A\) and \(B\) are any events, then \(\Pr(A\cap B)\Pr(B) = \Pr(A \mid B)\text{.}\) +
    +
    Solution.
    +
    False. +
    + +
    +

    2.

    +
    We find a 4-sided die with faces 0, 1, 3, and 5. An experiment consists of rolling the die two times. +
    +

    (a)

    +
    Write down the sample space \(\Omega\) of all possible outcomes for this experiment. +
    +
    Solution.
    +
    +
    +\begin{align*} +\Omega = \{ \amp (0, 0), (0, 1), (0, 3), (0, 5), \\ +\amp (1, 0), (1, 1), (1, 3), (1, 5), \\ +\amp (3, 0), (3, 1), (3, 3), (3, 5), \\ +\amp (5, 0), (5, 1), (5, 3), (5, 5)\} +\end{align*} +
    + +
    + +
    +

    (b)

    +
    Let \(A\) be the event that the second roll is at least twice the value of the first roll. Let m B be the event that the sum of the rolls is odd. Assume the die is fair. List the outcomes in \(A\) and calculate \(\Pr(A)\text{.}\) List the outcomes in \(B\) and calculate \(\Pr(B)\text{.}\) +
    +
    Solution.
    +
    +
    +\begin{align*} +A \amp = \{(0, 0), (0, 1), (0, 3), (0, 5), (1, 3), (1, 5)\} \\ +B \amp = \{ (0, 1), (0, 3), (0, 5), (1, 0), (3, 0), (5, 0) \} +\end{align*} +
    +
    Then \(\Pr(A) = \frac{|A|}{|\Omega|} = \frac{6}{16} = \frac{3}{8}\text{,}\) and \(\Pr(B) = \frac{|B|}{|\Omega|} = \frac{6}{16} = \frac{3}{8}\text{.}\) +
    + +
    + +
    +

    3.

    +
    A diagnostic test is developed to detect a disease present in 1.3% of the population. For a patient who has the disease, the test will accurately give a positive result 62% of the time. When the patient does not have the disease, the test will accurately give a negative result 99.4% of the time. +
    For a patient who receives a positive test, what is the probability they have the disease? +
    +
    Solution.
    +
    +
    Let \(P\) be the event of receiving a positive test result and \(D\) be the event of having the disease. The given information is: \(\Pr(D) = 0.013, \Pr(P\mid D) = 0.62\text{,}\) and \(\Pr(P^c \mid D^c) = 0.994\text{.}\) Then, using Bayes’ Theorem:
    +
    +\begin{align*} +\Pr(D\mid P) = \frac{\Pr(P \mid D)\Pr(D)}{\Pr(P)} \amp = \frac{\Pr(P \mid D)\Pr(D)}{\Pr(P \mid D)\Pr(D) + \Pr(P \mid D^c)\Pr(D^c)} \\ +\amp = \frac{\Pr(P \mid D)\Pr(D)}{\Pr(P \mid D)\Pr(D) + (1 - \Pr(P^c \mid D^c))(1 - \Pr(D))} \\ +\amp = \frac{(0.62)(0.013)}{(0.62)(0.013) + (1 - 0.994)(1 - 0.013)} \\ +\amp \approx \boxed{0.576} +\end{align*} +
    + +
    + +
    +
    +
    +
    + + + diff --git a/course/quizzes.html b/course/quizzes.html new file mode 100755 index 0000000..5af32f6 --- /dev/null +++ b/course/quizzes.html @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + +Quizzes + + + + + + + + + + + + + + + + + + + + +Skip to main content
    + + + + diff --git a/course/recitation-calculus-review-printable.html b/course/recitation-calculus-review-printable.html index b0d22cc..d921e5f 100755 --- a/course/recitation-calculus-review-printable.html +++ b/course/recitation-calculus-review-printable.html @@ -101,15 +101,15 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.9'; +eBookConfig.runestone_version = '7.11.10'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - - + + @@ -140,6 +140,17 @@ eBookConfig.enable_chatcodes = false; \newcommand{\Z}{\mathbb Z} \newcommand{\Q}{\mathbb Q} \newcommand{\R}{\mathbb R} + + +\DeclareMathOperator{\Bin}{Bin} +\DeclareMathOperator{\Geom}{Geom} +\DeclareMathOperator{\Poiss}{Poiss} +\DeclareMathOperator{\Exp}{Exp} + + +\DeclareMathOperator{\E}{E} +\DeclareMathOperator{\Var}{Var} +\DeclareMathOperator{\Cov}{Cov} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -163,26 +174,31 @@ eBookConfig.enable_chatcodes = false;
  • - +
  • +
  • + +
  • @@ -204,9 +220,9 @@ eBookConfig.enable_chatcodes = false;
  • -

    +

    Worksheet Calculus Review -

    +

    In Calculus I, you learned about derivatives, antiderivatives, and definite integrals. All of these will make an appearance in the context of probability density functions, cumulative distribution functions, and probability calculations in continuous sample spaces, so it will be useful to refresh your memory and practice some calculations.

    1.

    @@ -255,7 +271,7 @@ eBookConfig.enable_chatcodes = false;
    -
    If \(f(x)\) is a probability density function (don’t worry about what that means for now), then integrals such as \(\int_a^b f(x)\ dx\) are used to calculate certain probabilities, as are values of the form \(F(x)\text{.}\) +
    If \(f(x)\) is a probability density function (don’t worry about what that means for now), then integrals such as \(\int_a^b f(x)\ dx\) are used to calculate certain probabilities, as are values of the form \(F(x)\text{.}\)

    5.

    Practice with the following integrals: diff --git a/course/recitation-calculus-review.html b/course/recitation-calculus-review.html index 69071b0..991126a 100755 --- a/course/recitation-calculus-review.html +++ b/course/recitation-calculus-review.html @@ -101,15 +101,15 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.9'; +eBookConfig.runestone_version = '7.11.10'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - - + + @@ -140,6 +140,17 @@ eBookConfig.enable_chatcodes = false; \newcommand{\Z}{\mathbb Z} \newcommand{\Q}{\mathbb Q} \newcommand{\R}{\mathbb R} + + +\DeclareMathOperator{\Bin}{Bin} +\DeclareMathOperator{\Geom}{Geom} +\DeclareMathOperator{\Poiss}{Poiss} +\DeclareMathOperator{\Exp}{Exp} + + +\DeclareMathOperator{\E}{E} +\DeclareMathOperator{\Var}{Var} +\DeclareMathOperator{\Cov}{Cov} \newcommand{\lt}{<} \newcommand{\gt}{>} \newcommand{\amp}{&} @@ -163,26 +174,31 @@ eBookConfig.enable_chatcodes = false;
  • - +
  • +
  • + +
  • @@ -240,7 +256,7 @@ eBookConfig.enable_chatcodes = false;
  • -
    If \(f(x)\) is a probability density function (don’t worry about what that means for now), then integrals such as \(\int_a^b f(x)\ dx\) are used to calculate certain probabilities, as are values of the form \(F(x)\text{.}\) +
    If \(f(x)\) is a probability density function (don’t worry about what that means for now), then integrals such as \(\int_a^b f(x)\ dx\) are used to calculate certain probabilities, as are values of the form \(F(x)\text{.}\)

    5.

    Practice with the following integrals: diff --git a/course/recitations.html b/course/recitations.html index 1ec9e41..738cbd0 100755 --- a/course/recitations.html +++ b/course/recitations.html @@ -101,15 +101,15 @@ eBookConfig.allow_pairs = false; eBookConfig.enableScratchAC = false; eBookConfig.build_info = ""; eBookConfig.python3 = null; -eBookConfig.runestone_version = '7.11.9'; +eBookConfig.runestone_version = '7.11.10'; eBookConfig.jobehost = ''; eBookConfig.proxyuri_runs = ''; eBookConfig.proxyuri_files = ''; eBookConfig.enable_chatcodes = false; - - + + @@ -135,11 +135,22 @@ eBookConfig.enable_chatcodes = false;
    -PrevUpNext +PrevUpNext
    ' - - var this_rq_answer_and_controls = document.createElement('div'); - this_rq_answer_and_controls.setAttribute('style', 'width:80%; padding-left:10%; padding-right:10%; margin-top:0.5em;'); - this_rq_answer_and_controls.setAttribute('class', 'rq_answer'); - this_rq_answer_and_controls.innerHTML = hidden_answer_div + answer_div + this_rq_controls; - console.log("appending to ", reading_question_id); - $('#'+reading_question_id).append(this_rq_answer_and_controls); - // this.parentNode.insertAdjacentElement("afterend", this_rq_answer_and_controls); - - /* typeset the math in the reading questions answers */ - // MathJax.Hub.Queue(["Typeset",MathJax.Hub]); - if (mjvers && mjvers < 3) { - MathJax.Hub.Queue(['Typeset', MathJax.Hub]); - } else if (mjvers > 3) { - MathJax.typesetPromise(); - } - - } else if(role == "instructor" || role == "student") { - - var this_answer_link = document.createElement('div'); - this_answer_link.innerHTML = rq_answer_label; - console.log("inserting afterend of",reading_question); - // reading_question.insertAdjacentElement("afterend", this_answer_link); - reading_question.append(this_answer_link); - } else { - - console.log("should not be here"); - - } - - } - - function allow_student_answers(){ - /* make a new blank area to answer a question */ - $('.readingquestion_make_answer.student').mousedown(function(e){ - console.log(".readingquestion_make_answer student"); -// $(this).addClass("hidecontrols"); - // var this_ques_id = this.parentNode.parentNode.id; - var this_ques_id = this.parentNode.parentNode.id; - var this_ques_id_text = this_ques_id + "_text"; - var this_ques_id_controls = this_ques_id + "_controls"; - console.log(".rq", this_ques_id); - answer_textarea = ''; - this_rq_controls += 'preview'; -// this_rq_controls += 'delete'; - this_rq_controls += 'typing math?'; - this_rq_controls += '' - - var this_rq_answer_and_controls = document.createElement('div'); - this_rq_answer_and_controls.setAttribute('class', 'rq_answer editing'); - this_rq_answer_and_controls.setAttribute('style', 'width:80%; padding-left:10%; padding-right:10%; margin-top:0.5em;'); - - this_rq_answer_and_controls.innerHTML = answer_textarea + this_rq_controls; - this.parentNode.insertAdjacentElement("afterend", this_rq_answer_and_controls); - - this.remove(); - - // MathJax.Hub.Queue(["Typeset",MathJax.Hub]); - - console.log("adding other keypress listener"); - var this_textarea = document.getElementById(this_ques_id_text + "_input"); - console.log("to", this_textarea); - this_textarea.addEventListener("keypress", function() { - // if(this_textarea.scrollTop != 0){ - // console.log("this_textarea.scrollHeight", this_textarea.scrollHeight, "this_textarea.scrollTop", this_textarea.scrollTop); - // console.log("this_textarea.clientHeight", this_textarea.clientHeight); - this_textarea.overflow = "scroll"; - // console.log("this_textarea.scrollHeight", this_textarea.scrollHeight, "this_textarea.scrollTop", this_textarea.scrollTop); - // console.log("this_textarea.clientHeight", this_textarea.clientHeight); - this_textarea.overflow = "hidden"; - // console.log("this_textarea.scrollHeight", this_textarea.scrollHeight, "this_textarea.scrollTop", this_textarea.scrollTop); - // console.log("this_textarea.getBoundingClientRect()", this_textarea.getBoundingClientRect()); - this_textarea.style.height = this_textarea.scrollHeight + "px"; - // } - }, false); - var tmp_id = this_ques_id_text + "_input"; - console.log("want focus to ", tmp_id); - console.log("which is ", $("#" +tmp_id)); - console.log("the active ", document.hasFocus(), "element is", document.activeElement); - console.log("or maybe it is ", $(":focus")); - $("#" + tmp_id).focus(); - document.getElementById(tmp_id).focus(); - console.log("the active ", document.hasFocus(), "element is", document.activeElement); - }); - } - allow_student_answers(); - - $('.readingquestion_make_answer.instructor').mousedown(function(e){ - console.log(".readingquestion_make_answer instructor", "instId", uname, "pI", pageIdentifier); - if (jQuery.isEmptyObject(reading_answers) || this.classList.contains("reload")) { - rq_data = {"action": "retrieve", "instId": uname, "pw": emanu, "pI": pageIdentifier, "type": "readingquestions"}; - // myjson = {"action": "retrieve", "type": "readingquestions", "instId": "100002000", "pI": "beezer-FCLA___FPm"} - - $.ajax({ - url: "https://aimath.org/cgi-bin/u/highlights.py", - type: "post", - data: JSON.stringify(rq_data), - dataType: "json", - async: false, - success: function(data) { - reading_answers = data; - // console.log("something", data, "back from highlight"); - // alert(data); - }, - error: function(errMsg) { - console.log("seems to be an error?",errMsg); - alert("Error\n" + errMsg); - } - }); - } -// var this_ques_id = this.parentNode.previousSibling.id; - var this_ques_id = this.parentNode.parentNode.id; - console.log("this_ques_id", this_ques_id); - var compiled_answers = ""; - var title_of_this_section = $("section > h2 > .title").html(); - title_of_this_section = title_of_this_section.replace(/ /g, "%20"); - title_of_this_section = title_of_this_section.replace(/\?/g, ""); - var number_of_this_rq = 1 + $("#" + this_ques_id).index(".exercise-like"); -// console.log("first title_of_this_section", title_of_this_section); -// console.log("first title_of_this_section.html()", title_of_this_section.html()); -// console.log("second title_of_this_section[0]", title_of_this_section[0]); - for(var j=0; j < reading_answers.length; ++j) { - var this_answer_all = reading_answers[j]; - var this_student_id = this_answer_all[0]; - var these_specific_answers = JSON.parse(this_answer_all[1]); - console.log("these_specific_answers", these_specific_answers); - console.log("this_answer_all[2]", this_answer_all[2]); - var this_submitted_time = JSON.parse(this_answer_all[2]); - // var this_submitted_time = this_answer_all[2]; - console.log("looking for this answer:", this_ques_id + "_text"); - var this_specific_answer = these_specific_answers[this_ques_id + "_text"]; - console.log("this_answer_all",this_answer_all); - console.log("j",j,"this_specific_answer", this_specific_answer); - console.log("this_specific_time", this_submitted_time); - this_specific_answer = dollars_to_slashparen(escapeHTML(this_specific_answer)) - if (!this_specific_answer) { - this_specific_answer = "no answer submitted"; - compiled_answers += '
    '; - } else { - compiled_answers += '
    '; - } - if (this_student_id.indexOf('@') > -1) { - this_student_id = '' + this_student_id + ''; - } - compiled_answers += '
    ' + this_student_id + '
    '; - compiled_answers += '
    ' + this_submitted_time + '
    '; - compiled_answers += '
    ' + this_specific_answer + '
    '; - compiled_answers += '
    \n'; - console.log(j, "j", these_specific_answers) - } - // if the answers are being reloaded, remove the previous answers - $("#" + this_ques_id + "_ans").remove(); - var answers_to_this_question = document.createElement('div'); - answers_to_this_question.setAttribute('class', 'compiled_answers'); - answers_to_this_question.setAttribute('id', this_ques_id + "_ans"); - -// this_rq_answer_and_controls.setAttribute('style', 'width:80%; margin-left:auto; margin-right:auto; margin-top:0.5em;'); -// this_rq_answer_and_controls.setAttribute('class', 'rq_answer'); - answers_to_this_question.innerHTML = compiled_answers; - $('#'+this_ques_id).append(answers_to_this_question); -// this.parentNode.remove(); - this.innerHTML = "Reload responses"; - $(this).addClass("reload"); -// MathJax.Hub.Queue(["Typeset",MathJax.Hub]); - if (mjvers && mjvers < 3) { - MathJax.Hub.Queue(['Typeset', MathJax.Hub]); - } else if (mjvers > 3) { - MathJax.typesetPromise(); - } - - // this.parentNode.insertAdjacentElement("afterend", this_rq_answe - - }); - - - function save_one_reading_question(this_ques_id) { - this_ques_id_text = this_ques_id + "_text"; - var this_ans_text = $("#" + this_ques_id_text + "_input"); - console.log("the value:", this_ans_text.value); -// var this_ques_id = this_ans.parentNode.previousSibling.previousSibling.id; - // var this_ques_id = this_ans.id; - console.log("this_ques_id", this_ques_id); -// console.log("this_rq_ans", this_rq_ans); - var this_ans_text_value = this_ans_text.val(); - console.log("this_ans_text_value", this_ans_text_value); - if ( /[^\x00-\x7F]/.test(this_ans_text_value)) { - this_ans_text_value = this_ans_text_value.replace(/[^\x00-\x7F]/g, "XX"); - alert("Illegal characters in answer have been replaced by XX"); - } - this_ans_text_value = $.trim(this_ans_text_value); // jQuery trim (some chrome on windows had trouble with trim) - // we have the contents of the answer, so save it to local storage - console.log("saving in local storage at", this_ques_id_text, "the answer", this_ans_text_value); - reading_questions_object[this_ques_id_text] = this_ans_text_value; - localStorage.setObject(reading_questions_object_id, reading_questions_object); - console.log("Object.keys(reading_questions_object)",Object.keys(reading_questions_object)); - console.log("reading_questions", reading_questions); - if (Object.keys(reading_questions_object).length >= reading_questions.length && uname != "guest" && role=="student") { - console.log("all reading questions have been answered"); - reading_questions_all_answered = true; - make_submit_button(); - } - - // and save a copy hidden on the page - console.log("looking for", this_ques_id + "_text_hidden"); - // when the initial answer box is created, there is no hidden version - if ( !document.getElementById(this_ques_id + "_text_hidden")) { - console.log("making a place to hide the answer"); - var hidden_answer_div = document.createElement('div'); - hidden_answer_div.setAttribute('id', this_ques_id + '_text_hidden'); - hidden_answer_div.setAttribute('class', 'tex2jax_ignore asciimath2jax_ignore'); - hidden_answer_div.setAttribute('style', 'display: none'); - console.log("this_ans_text", this_ans_text); - document.getElementById(this_ques_id_text + "_input").insertAdjacentElement("beforebegin", hidden_answer_div); - // hidden_answer_div.insertBefore(this_ans_text); - } - console.log("hiding the raw answer in", this_ques_id + "_text_hidden"); - document.getElementById(this_ques_id + "_text_hidden").innerHTML = escapeHTML(this_ans_text_value); - - //and show it on the page - var this_ans_static = document.createElement('div'); - this_ans_static.setAttribute('id', this_ques_id_text); - this_ans_static.setAttribute('class', 'given_answer has_am process-math processme'); - console.log("setting this_ans_static.innerHTML to", dollars_to_slashparen(escapeHTML(this_ans_text_value))); - this_ans_static.innerHTML = dollars_to_slashparen(escapeHTML(this_ans_text_value)) + " " - -// this_rq_ans.replaceWith(this_ans_static); - console.log("about to replace this_ans_text", this_ans_text); - this_ans_text.replaceWith(this_ans_static); - -// MathJax.Hub.Queue(["Typeset",MathJax.Hub]); - if (mjvers && mjvers < 3) { - MathJax.Hub.Queue(['Typeset', MathJax.Hub]); - } else if (mjvers > 3) { - MathJax.typesetPromise(); - } - - - console.log(" this_ans_text", this_ans_text); - - console.log("this_ans_static", this_ans_static); - - $(this_ans_static).parent().addClass("rq_answer"); - - $('#' + this_ques_id + "_controls").addClass("hidecontrols"); -// $(this_q).parent().parent().addClass("rq_answer"); - -/* - var edit_button = document.createElement('span'); - edit_button.setAttribute('class', "action edit_item rq_edit"); - edit_button.innerHTML = "edit"; - this.replaceWith(edit_button); -*/ - }; - - /* edit an existing answer */ - function edit_one_reading_question(this_ans) { - console.log(".rq_edit", this_ans); - // var this_ques_id = this.parentNode.previousSibling.id; - var this_ques_id = this_ans.parentNode.parentNode.id; - console.log("edditing this_ques_id", this_ques_id); - var this_ques_id_text = this_ques_id + "_text"; - // var this_rq_ans = this.parentNode.previousSibling; - var this_rq_ans = this_ans; -// var this_rq_ans_id = this_ans.id; - console.log("now this_ques_id_text", this_ques_id_text); - console.log(".rq_edit", this_ques_id); - console.log("this_rq_ans", this_rq_ans); - var this_rq_text = this_rq_ans.innerHTML; - console.log("looking for", this_ques_id + "_hidden"); - var this_rq_text_raw = uNescapeHTML(document.getElementById(this_ques_id + "_text_hidden").innerHTML); - console.log("this_rq_text_raw",this_rq_text_raw); - - //this is copied from above. need to eliminate repeated code - - var answer_textarea_editable = document.createElement('textarea'); - answer_textarea_editable.setAttribute('id', this_ques_id_text + "_input"); - answer_textarea_editable.setAttribute('class', 'rq_answer_text'); - answer_textarea_editable.setAttribute('rows', '3'); - answer_textarea_editable.setAttribute('style', 'width:95%; height: 44px;'); - - this_rq_ans.replaceWith(answer_textarea_editable); - - console.log("this_ans is",this_ans); - console.log("adding editing to the parent of thing with id", this_ques_id_text, "which is the parent of", $('#' + this_ques_id_text)); - $('#' + this_ques_id_text + "_input").parent().addClass("editing"); - - $('#' + this_ques_id + "_controls").removeClass("hidecontrols"); - -// WHY? $(this).parent().parent().removeClass("rq_answer"); - -/* var save_button = document.createElement('span'); - save_button.setAttribute('class', "action edit_item rq_save"); - save_button.innerHTML = "save"; - this.replaceWith(save_button); -*/ - - $('#' + this_ques_id + "_text_input").val(this_rq_text_raw); - - answer_textarea_editable.style.height = answer_textarea_editable.scrollHeight + "px"; - answer_textarea_editable.addEventListener("keypress", function() { - // if(answer_textarea_editable.scrollTop != 0){ - answer_textarea_editable.style.height = answer_textarea_editable.scrollHeight + "px"; - // } - }, false); - }; - - -/* handle saving when leaving an answer box, or editing an existing answer - when hovering over an existing answer */ - - $('body').on('click','.given_answer', function(){ -// $(this).children().last().removeClass("hidecontrols"); - edit_one_reading_question(this); - $(this).attr('z-index', '2000'); - }); - - $('body').on('mousedown','.rq_save', function(){ -// $(this).children().last().addClass("hidecontrols"); -// $(this).attr('z-index', ''); - // var this_rq = $(this).find(".given_answer"); -//ooooooooo var this_ques_id = this.parentNode.id; - var this_ques_id = this.parentNode.parentNode.parentNode.id; - console.log("id of this quesiton", this_ques_id); -// var this_rq = $(this).find(".rq_answer_text"); -// console.log("this_rq iiIIIIII", this_rq); - var this_current_answer = document.getElementById(this_ques_id + "_text_input"); - console.log("this_current_answer", this_current_answer); - console.log("this_current_answer.value", this_current_answer.value); - // console.log("this_rq IIIIiiii value", this_rq.value); -// save_one_reading_question(this_rq.parentNode.id); - save_one_reading_question(this_ques_id); - console.log("left answer area"); - $(this).removeClass("editing"); - }); - - $('body').on('click','.rq_delete', function(){ - console.log(".rq_delete"); - var this_ques_id = this.parentNode.parentNode.parentNode.id; - console.log(".rq_delete", this_ques_id); - $('#' + this_ques_id + "_controls").removeClass("hidecontrols"); -//and now put in controls - var this_answer_link = document.createElement('div'); - this_answer_link.innerHTML = rq_answer_label; - console.log("inserting afterend of",reading_question); - // reading_question.insertAdjacentElement("afterend", this_answer_link); - $(this).parent().parent().replaceWith(this_answer_link); - allow_student_answers(); - - - console.log("reading_questions_object", reading_questions_object); - console.log("this_ques_id + _text", this_ques_id + "_text"); - delete reading_questions_object[this_ques_id + "_text"]; - console.log("now reading_questions_object", reading_questions_object); - // localStorage.removeItem(this_ques_id); - localStorage.setObject(reading_questions_object_id, reading_questions_object); - }); - - if(reading_questions_all_answered && uname != "guest" && role=="student") { - make_submit_button(); - console.log("made submit button"); - } - - $('body').on('click','#rq_submit', function(){ - console.log("submitting rq answers"); - $('#rq_submit').addClass('submitted'); - document.getElementById('rq_submit').textContent = "Resubmit answers"; - save_reading_questions(); - }); - - $('body').on('click','.amhelp', function(){ - var amhelpmessage = "Write math formulas as AsciiMath inside `backticks`.\n"; - amhelpmessage += "For example:\nThe Pythagorean theorem says `sin^2(x) + cos^2(x) = 1`,\n"; - amhelpmessage += "The quadratic formula is `x = (-b +- sqrt(b^2 - 4ac))/(2a)`. \n"; - amhelpmessage += "Note the use of parentheses for grouping.\n"; - amhelpmessage += "Visit http://asciimath.org for a list of AsciiMath commands.\n\n"; - amhelpmessage += "You can also use LaTeX, with either slash-parentheses \\(...\\)\n"; - amhelpmessage += "or dollar signs $...$ as delimiters for inline math."; - alert(amhelpmessage) - }); - - if(reading_questions_all_answered && uname != "guest" && role=="student") { - make_submit_button(); - } -} diff --git a/slides-annotated/_static/pretext/js/diagcess/diagcess.js b/slides-annotated/_static/pretext/js/diagcess/diagcess.js deleted file mode 100755 index 69acc7c..0000000 --- a/slides-annotated/_static/pretext/js/diagcess/diagcess.js +++ /dev/null @@ -1 +0,0 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.diagcess=e():t.diagcess=e()}(this,(function(){return(()=>{"use strict";var t={422:(t,e)=>{function n(t){return e.prefix_+"-"+t}Object.defineProperty(e,"__esModule",{value:!0}),e.noMove=e.attr=e.hasSpeech=e.getDocument=e.children=e.classList=e.getAttribute=e.getTextContent=e.toggleExpertMode=e.EXPERT_MODE=e.toArray=e.getId=e.idCounter_=e.addPrefix=e.prefix_=void 0,e.prefix_="cacc",e.addPrefix=n,e.idCounter_=0,e.getId=function(){return n("Id-"+e.idCounter_++)},e.toArray=function(t){for(var e=[],n=0;n=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.addStyle=e.replaceStyle_=e.removeStyle_=e.svgForegroundStyle_=e.svgBackgroundStyle_=e.svgHighlightStyle_=e.regionStyle_=e.svgBaseStyle_=e.nodeBackgroundStyle_=e.pickScheme=e.moleculeStyle=e.getScheme_=e.colorSchemes_=e.toggleMonochrome=e.toggleTextVisibility=e.documentCmlStyle=void 0;var r=n(422),i=n(807);function c(t){return e.colorSchemes_[t%e.colorSchemes_.length]}function a(t,e){var n=c(e);return[p(t,n.bkd),s(t,n.bkd),h(t,n.frgd),u(t,n.active,n.almost)]}function s(t,e){var n="";return f(n+="div.".concat(t.node.id," { background-color: ").concat(e,"; }"),"cacc-general-background")}function l(t){var e="svg."+t.id,n="";return n+="".concat(e," { overflow: hidden; }"),n+="".concat(e," text tspan[baseline-shift] { font-weight: 200; font-size: 13px; }"),n+="".concat(e," line, svg rect { stroke-width: 1.0; stroke-linecap: round; }"),n+="".concat(e," line.").concat("cacc-active",", svg g.").concat("cacc-active"," line { stroke-width: 3.0; }"),n+="".concat(e," line.").concat("cacc-almost",", svg g.").concat("cacc-almost"," line { stroke-width: 2.0; }"),n+="".concat(e," g.").concat("cacc-active"," text { font-weight: bold; }"),n+="".concat(e," g#gridSVG g.").concat("cacc-active"," text { font-weight: bold; }"),n+="ul.".concat("cacc-controls"," { list-style-type: none; }"),n+="".concat(e," polyline.").concat("cacc-active",", svg g.").concat("cacc-active"," polyline { stroke-width: 3.0; }"),n+="".concat(e," polyline.").concat("cacc-almost",", svg g.").concat("cacc-almost"," polyline { stroke-width: 2.0; }"),n+="".concat(e," polygon.").concat("cacc-active",", svg g.").concat("cacc-active"," polygon { stroke-width: 3.0; }"),n+="".concat(e," polygon.").concat("cacc-almost",", svg g.").concat("cacc-almost"," polygon { stroke-width: 2.0; }"),n+="".concat(e," path.").concat("cacc-active",", svg g.").concat("cacc-active"," path { stroke-width: 3.0; }"),n+="".concat(e," path.").concat("cacc-almost",", svg g.").concat("cacc-almost"," path { stroke-width: 2.0; }"),n+="".concat(e," rect.").concat("cacc-active",", svg g.").concat("cacc-active"," rect { stroke-width: 3.0; }"),n+="".concat(e," rect.").concat("cacc-almost",", svg g.").concat("cacc-almost"," rect { stroke-width: 2.0; }"),n+="".concat(e," circle.").concat("cacc-active",", svg g.").concat("cacc-active"," circle { stroke-width: 3.0; }"),n+="".concat(e," circle.").concat("cacc-almost",", svg g.").concat("cacc-almost"," circle { stroke-width: 2.0; }"),n+="".concat(e," ellipse.").concat("cacc-active",", svg g.").concat("cacc-active"," ellipse { stroke-width: 3.0; }"),f(n+="".concat(e," ellipse.").concat("cacc-almost",", svg g.").concat("cacc-almost"," ellipse { stroke-width: 2.0; }"),"cacc-base")}function u(t,e,n){var o="svg."+t.id,r="";return r+="".concat(o," line.").concat("cacc-active",", g.").concat("cacc-active"," line { stroke: ").concat(e,"; }"),r+="".concat(o," line.").concat("cacc-almost",", g.").concat("cacc-almost"," line { stroke: ").concat(n,"; }"),r+="".concat(o," g.").concat("cacc-active"," text { fill: ").concat(e,"; }"),r+="".concat(o," g.").concat("cacc-almost"," text { fill: ").concat(n,"; }"),r+="".concat(o," g#gridSVG g.").concat("cacc-active"," text { fill: ").concat(e,"; }"),r+="".concat(o," g#gridSVG g.").concat("cacc-almost"," text { fill: ").concat(n,"; }"),r+="".concat(o," polyline.").concat("cacc-active",", g.").concat("cacc-active"," polyline { stroke: ").concat(e,"; }"),r+="".concat(o," polyline.").concat("cacc-almost",", g.").concat("cacc-almost"," polyline { stroke: ").concat(n,"; }"),r+="".concat(o," polygon.").concat("cacc-active",", g.").concat("cacc-active"," polygon { stroke: ").concat(e,"; }"),r+="".concat(o," polygon.").concat("cacc-almost",", g.").concat("cacc-almost"," polygon { stroke: ").concat(n,"; }"),r+="".concat(o," path.").concat("cacc-active",", g.").concat("cacc-active"," path { stroke: ").concat(e,"; }"),r+="".concat(o," path.").concat("cacc-almost",", g.").concat("cacc-almost"," path { stroke: ").concat(n,"; }"),r+="".concat(o," rect.").concat("cacc-active",", g.").concat("cacc-active"," rect { stroke: ").concat(e,"; }"),r+="".concat(o," rect.").concat("cacc-almost",", g.").concat("cacc-almost"," rect { stroke: ").concat(n,"; }"),r+="".concat(o," circle.").concat("cacc-active",", g.").concat("cacc-active"," circle { stroke: ").concat(e,"; }"),r+="".concat(o," circle.").concat("cacc-almost",", g.").concat("cacc-almost"," circle { stroke: ").concat(n,"; }"),r+="".concat(o," ellipse.").concat("cacc-active",", g.").concat("cacc-active"," ellipse { stroke: ").concat(e,"; }"),f(r+="".concat(o," ellipse.").concat("cacc-almost",", g.").concat("cacc-almost"," ellipse { stroke: ").concat(n,"; }"),"cacc-color-highlight")}function p(t,e){var n="svg."+t.id,o="";return o+="".concat(n," { background-color: ").concat(e,"; }"),o+="".concat(n," g.atom rect { stroke: ").concat(e,"; fill: ").concat(e,"; }"),o+="div.container { background-color: ".concat(e,"; }"),o+="p.".concat(t.id,".").concat("cacc-message"," { background-color: ").concat(e,"; }"),f(o+="p.".concat(t.id,".").concat("cacc-message",".").concat("cacc-text-invisible"," { color: ").concat(e,"; }"),"cacc-color-background")}function h(t,e){var n="svg."+t.id,o="";return o+="".concat(n," line { stroke: ").concat(e,"; fill: ").concat(e,"; }"),o+="".concat(n,".").concat("cacc-text-monochrome"," text"),o+=" { stroke: ".concat(e,"; fill: ").concat(e,"; }"),o+="".concat(n," g#gridSVG text { stroke: ").concat(e,"; fill: ").concat(e,"; }"),o+="div.container { color: ".concat(e,"; }"),o+="p.".concat(t.id,".").concat("cacc-message"," { color: ").concat(e,"; }"),o+="ul.".concat(t.id,".").concat("cacc-controls"," { color: ").concat(e,"; }"),i.config.POLYLINE&&(o+="".concat(n," polyline { stroke: ").concat(e,"; fill: ").concat(e,"; }")),o+="".concat(n," polygon { stroke: ").concat(e,"; fill: ").concat(e,"; }"),o+="".concat(n," path { stroke: ").concat(e,"; }"),o+="".concat(n," rect { stroke: ").concat(e,"; }"),o+="".concat(n," circle { stroke: ").concat(e,"; }"),f(o+="".concat(n," ellipse { stroke: ").concat(e,"; }"),"cacc-color-elements")}function f(t,e){var n=document.createElement("style");return n.setAttribute("class",e),n.innerHTML=t,n}function d(t,e){var n=t.querySelector("style."+e);return!!n&&(t.removeChild(n),!0)}function v(t,e){t.appendChild(e)}e.documentCmlStyle=function(){document.body&&v(document.body,f("div.cml { display:none; }","cacc-cml"))},e.toggleTextVisibility=function(t){r.classList.toggle(t,"cacc-text-invisible")},e.toggleMonochrome=function(t){r.classList.toggle(t,"cacc-text-monochrome")},e.colorSchemes_=[{frgd:"#000",bkd:"#fff",active:"#fd6",almost:"#6df"},{frgd:"#fff",bkd:"#000",active:"#fd6",almost:"#6df"},{frgd:"#3C3",bkd:"#000",active:"#fd6",almost:"#6df"},{frgd:"#ee0",bkd:"#00e",active:"#4f4",almost:"#e3e"}],e.getScheme_=c,e.moleculeStyle=function(t){var e,n,r=new Map,i=l(t);r.set(i.className,i);try{for(var c=o(a(t,0)),s=c.next();!s.done;s=c.next()){var u=s.value;r.set(u.className,u)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}return r},e.pickScheme=a,e.nodeBackgroundStyle_=s,e.svgBaseStyle_=l,e.regionStyle_=function(t){v(t,f("p.".concat("cacc-message",".").concat("cacc-text-invisible"," { font-size: 0px; }"),"cacc-region"))},e.svgHighlightStyle_=u,e.svgBackgroundStyle_=p,e.svgForegroundStyle_=h,e.removeStyle_=d,e.replaceStyle_=function(t,e,n){d(t,n),v(t,f(e,n))},e.addStyle=v},446:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CustomEvent=e.EventType=e.KeyCodes=void 0,function(t){t[t.RETURN=13]="RETURN",t[t.ENTER=13]="ENTER",t[t.ESC=27]="ESC",t[t.SPACE=32]="SPACE",t[t.LEFT=37]="LEFT",t[t.UP=38]="UP",t[t.RIGHT=39]="RIGHT",t[t.DOWN=40]="DOWN",t[t.A=65]="A",t[t.B=66]="B",t[t.C=67]="C",t[t.D=68]="D",t[t.E=69]="E",t[t.F=70]="F",t[t.G=71]="G",t[t.H=72]="H",t[t.I=73]="I",t[t.J=74]="J",t[t.K=75]="K",t[t.L=76]="L",t[t.M=77]="M",t[t.N=78]="N",t[t.O=79]="O",t[t.P=80]="P",t[t.Q=81]="Q",t[t.R=82]="R",t[t.S=83]="S",t[t.T=84]="T",t[t.U=85]="U",t[t.V=86]="V",t[t.W=87]="W",t[t.X=88]="X",t[t.Y=89]="Y",t[t.Z=90]="Z",t[t.COMMA=188]="COMMA",t[t.PERIOD=190]="PERIOD"}(e.KeyCodes||(e.KeyCodes={})),function(t){t.CLICK="click",t.DBLCLICK="dblclick",t.MOUSEDOWN="mousedown",t.MOUSEUP="mouseup",t.MOUSEOVER="mouseover",t.MOUSEOUT="mouseout",t.MOUSEMOVE="mousemove",t.SELECTSTART="selectstart",t.KEYPRESS="keypress",t.KEYDOWN="keydown",t.KEYUP="keyup",t.TOUCHSTART="touchstart",t.TOUCHMOVE="touchmove",t.TOUCHEND="touchend",t.TOUCHCANCEL="touchcancel"}(e.EventType||(e.EventType={}));var n=function(){function t(t,e,n){this.src=t,this.type=e,this.callback=n,this.src=t,this.type=e,this.callback=n}return t.prototype.add=function(){this.src.addEventListener(this.type,this.callback)},t.prototype.remove=function(){this.src.removeEventListener(this.type,this.callback)},t}();e.CustomEvent=n},807:(t,e)=>{var n,o,r,i,c,a;Object.defineProperty(e,"__esModule",{value:!0}),e.config=e.options=e.sound=e.speech=e.colors=e.regions=e.magnifiers=e.explorers=e.version=void 0,e.version="1.1.4",function(t){t.KEY="key",t.MENU="menu"}(n=e.explorers||(e.explorers={})),function(t){t.DUMMY="dummy",t.STEP="step",t.SIMPLE="simple"}(o=e.magnifiers||(e.magnifiers={})),function(t){t.SUBTITLE="subtitle",t.SPEECH="speech"}(r=e.regions||(e.regions={})),function(t){t.MONOCHROME="monochrome",t.CONTRAST="contrast"}(i=e.colors||(e.colors={})),function(t){t.LANGUAGE="language",t.EXPERT="expert",t.DETAIL="detail"}(c=e.speech||(e.speech={})),function(t){t.OSCILLATOR="oscillator",t.VOICING="voicing"}(a=e.sound||(e.sound={})),e.options={explorers:[n.KEY,n.MENU],magnifiers:[o.STEP,o.SIMPLE,o.DUMMY],regions:[r.SUBTITLE,r.SPEECH],colors:[i.MONOCHROME,i.CONTRAST],speech:[c.LANGUAGE,c.EXPERT,c.DETAIL],sound:[a.OSCILLATOR,a.VOICING]},e.config={MSG_VISIBLE:!0,MAG_ACTIVE:o.STEP,SONIFY:!1,VOICING:!0,VOICE_LANG:"en",ACTIVE_LANG:"en",SUB_VISIBLE:!1,SUBTITLE:null,POLYLINE:!1}},23:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,r,i=n.call(t),c=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)c.push(o.value)}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return c};Object.defineProperty(e,"__esModule",{value:!0}),e.Base=void 0;var i=n(966),c=n(422),a=n(911),s=n(807),l=n(402);!function(t){t.molMap={},t.init=function(){var e,n,u=l.forDocument();Object.keys(u).length>0&&(a.documentCmlStyle(),s.config.SUBTITLE=function(){var t=c.getDocument(),e=t.createElement("p");e.classList.add("explorer"),e.classList.add("cacc-message");var n=a.getScheme_(1);e.style.cssText+="position:fixed;left:0;bottom:0;"+"background-color: ".concat(n.bkd,"; color: ").concat(n.frgd),a.regionStyle_(t.body),s.config.SUB_VISIBLE||e.classList.add("cacc-text-invisible");return e}());try{for(var p=o(Object.entries(u)),h=p.next();!h.done;h=p.next()){var f=r(h.value,2),d=f[0],v=f[1];t.molMap[d]||(t.molMap[d]=new i.Container(d,v))}}catch(t){e={error:t}}finally{try{h&&!h.done&&(n=p.return)&&n.call(p)}finally{if(e)throw e.error}}}}(e.Base||(e.Base={}))},402:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.fromUri_=e.getUrlParameters_=e.getParam_=e.getData_=e.getMol_=e.forDocument=void 0;var r=n(29),i=0;function c(t){t.querySelector("div.svg")?(t.setAttribute("has-svg","true"),r.rewriteTransformations(t.querySelector("div.svg > svg"))):a(t,"svg","data-src",".svg"),t.querySelector("div.cml")?t.setAttribute("has-cml","true"):a(t,"cml","data-cml",".xml")}function a(t,e,n,o){var i=t.getAttribute(n)||s(t,n,o);i?u(i,(function(n){if(n){t.setAttribute("has-"+e,"true");var o=document.createElement("div");o.classList.add(e),"svg"===e&&r.rewriteTransformations(n),o.appendChild(n.documentElement),t.appendChild(o)}else t.setAttribute("has-"+e,"false")})):t.setAttribute("has-"+e,"false")}function s(t,e,n){if(!t.id)return null;var o=l()[t.id];return o?(o+=n,t.setAttribute(e,o),o):null}function l(){for(var t,e={},n=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),o=0;o{Object.defineProperty(e,"__esModule",{value:!0}),e.rewriteTransformations=void 0;var o=n(422);function r(t){var e=t,n=[];do{var o=e.getAttribute("transform");o&&n.unshift(o),e=e.parentNode}while("svg"!==e.tagName);return t.setAttribute("transform",n.join(" ")),t}function i(t){var e=document.createElementNS("http://www.w3.org/2000/svg","g"),n=t.getAttribute("id");return n&&(e.setAttribute("id",n),t.removeAttribute("id")),t.parentNode.replaceChild(e,t),e.appendChild(t),e}function c(t){var e=t;do{(e=e.parentNode).removeAttribute("transform")}while("svg"!==e.tagName)}e.rewriteTransformations=function(t){var e,n=o.toArray(t.querySelectorAll("text,polyline,line,rect,polygon,use,path"));return(e=n).forEach(r),e.forEach(c),e.filter((function(t){return t.hasAttribute("id")})).forEach(i),n}},113:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Contrast=e.Monochrome=e.AbstractColor=void 0;var i=n(911),c=n(446),a=n(807),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.update=function(){},e}(n(530).AbstractController);e.AbstractColor=s;var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.colors.MONOCHROME,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===c.KeyCodes.T&&i.toggleMonochrome(t.container.molecule.svg),e.stopPropagation(),!1}))},e}(s);e.Monochrome=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.colors.CONTRAST,e.scheme=0,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===c.KeyCodes.C&&t.container.replaceStyles(i.pickScheme(t.container.molecule,++t.scheme)),e.stopPropagation(),!1}))},e}(s);e.Contrast=u},530:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractController=void 0;var r=n(446),i=function(){function t(t){this.container=t,this._active=!1,this.internalEvents_=[],this.customEvents()}return Object.defineProperty(t.prototype,"active",{get:function(){return this._active},set:function(t){this._active=t},enumerable:!1,configurable:!0}),t.prototype.activate=function(){this.active=!0,this.addEvents()},t.prototype.deactivate=function(){this.removeEvents(),this.active=!1},t.prototype.registerEvent=function(t,e,n){this.internalEvents_.push(new r.CustomEvent(t,e,n))},t.prototype.addEvents=function(){var t,e;try{for(var n=o(this.internalEvents_),r=n.next();!r.done;r=n.next()){r.value.add()}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},t.prototype.removeEvents=function(){var t,e;try{for(var n=o(this.internalEvents_),r=n.next();!r.done;r=n.next()){r.value.remove()}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},t}();e.AbstractController=i},889:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerFactory=void 0;var r=n(807),i=n(113),c=n(172),a=n(10),s=n(556),l=n(150),u=n(916);!function(t){var e,n=((e={})[r.magnifiers.SIMPLE]=function(t){return new a.SimpleMagnifier(t)},e[r.magnifiers.STEP]=function(t){return new a.StepMagnifier(t)},e[r.magnifiers.DUMMY]=function(t){return new a.DummyMagnifier(t)},e[r.colors.MONOCHROME]=function(t){return new i.Monochrome(t)},e[r.colors.CONTRAST]=function(t){return new i.Contrast(t)},e[r.speech.DETAIL]=function(t){return new u.Detail(t)},e[r.speech.EXPERT]=function(t){return new u.Expert(t)},e[r.speech.LANGUAGE]=function(t){return new u.Language(t)},e[r.regions.SPEECH]=function(t){return new s.Speech(t)},e[r.regions.SUBTITLE]=function(t){return new s.Subtitle(t)},e[r.explorers.KEY]=function(t){return new c.KeyExplorer(t)},e[r.explorers.MENU]=function(t){return new c.MenuExplorer(t)},e[r.sound.OSCILLATOR]=function(t){return new l.Oscillator(t)},e[r.sound.VOICING]=function(t){return new l.Voicing(t)},e);t.get=function(t){var e,i,c=[],a=[].concat(r.options.magnifiers,r.options.regions,r.options.colors,r.options.speech,r.options.sound,r.options.explorers);try{for(var s=o(a),l=s.next();!l.done;l=s.next()){var u=l.value,p=n[u];if(p){var h=p(t);c.push(h)}}}catch(t){e={error:t}}finally{try{l&&!l.done&&(i=s.return)&&i.call(s)}finally{if(e)throw e.error}}return c}}(e.ControllerFactory||(e.ControllerFactory={}))},172:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.MenuExplorer=e.KeyExplorer=e.AbstractExplorer=void 0;var i=n(422),c=n(446),a=n(807),s=function(t){function e(e){var n=t.call(this,e)||this;return n.container=e,n.setupControls(),n}return r(e,t),e.prototype.activate=function(){this.active&&(this.container.update(),this.addControls(),t.prototype.activate.call(this))},e.prototype.deactivate=function(){this.active&&(t.prototype.deactivate.call(this),this.removeControls())},e.prototype.addEvents=function(){this.active&&t.prototype.addEvents.call(this)},e.prototype.setupControls=function(){},e.prototype.addControls=function(){},e.prototype.removeControls=function(){},e.prototype.update=function(){},e.prototype.customEvents=function(){var t=this,e=this.container.molecule.node;new c.CustomEvent(e,c.EventType.KEYDOWN,(function(e){return t.active&&e.keyCode===c.KeyCodes.ESC&&t.container.deactivate(),t.container.active||e.keyCode===t.getActivationKey()&&(t.active=!0,t.container.activate(),e.preventDefault()),e.stopPropagation(),!1})).add()},e}(n(530).AbstractController);e.AbstractExplorer=s;var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.explorers.KEY,e}return r(e,t),e.prototype.setupControls=function(){var t=this,e=function(e,n){var o=n();o.length>0?t.container.update(o[0]):(0,i.noMove)(),e.preventDefault()};this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(n){switch(n.keyCode){case c.KeyCodes.DOWN:case c.KeyCodes.D:e(n,(function(){return t.container.activeElement.getDown()}));break;case c.KeyCodes.UP:case c.KeyCodes.E:e(n,(function(){return t.container.activeElement.getUp()}));break;case c.KeyCodes.RIGHT:case c.KeyCodes.F:e(n,(function(){return t.container.activeElement.getRight()}));break;case c.KeyCodes.LEFT:case c.KeyCodes.S:e(n,(function(){return t.container.activeElement.getLeft()}))}return n.stopPropagation(),!1}))},e.prototype.getActivationKey=function(){return c.KeyCodes.A},e}(s);e.KeyExplorer=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.explorers.MENU,e}return r(e,t),e.prototype.setupControls=function(){var t=this,e=this.container.molecule.createElement("ul");e.classList.add("cacc-controls"),e.setAttribute("role","navigation"),this.control_=e;var n=function(e,n){var o=n();o.length>0?t.container.update(o[0]):(0,i.noMove)()},o=function(e,o){t.registerEvent(e,c.EventType.KEYDOWN,(function(t){return t.keyCode!==c.KeyCodes.ENTER&&t.keyCode!==c.KeyCodes.SPACE||(n(0,o),t.preventDefault(),t.stopPropagation()),!1})),t.registerEvent(e,c.EventType.CLICK,(function(t){return n(0,o),t.stopPropagation(),!1}))};o(this.makeButton_("Down",e),(function(){return t.container.activeElement.getDown()})),o(this.makeButton_("Up",e),(function(){return t.container.activeElement.getUp()})),o(this.makeButton_("Next",e),(function(){return t.container.activeElement.getRight()})),o(this.makeButton_("Previous",e),(function(){return t.container.activeElement.getLeft()}))},e.prototype.addControls=function(){var t=this.container.molecule.node,e=t.querySelector(".cacc-message");e?t.insertBefore(this.control_,e):t.appendChild(this.control_)},e.prototype.removeControls=function(){this.control_.parentNode.removeChild(this.control_)},e.prototype.getActivationKey=function(){return c.KeyCodes.B},e.prototype.makeButton_=function(t,e){var n=this.container.molecule.createElement("li");return n.setAttribute("role","button"),n.setAttribute("aria-controls",this.container.molecule.node.getAttribute("id")),n.classList.add("cacc-button"),n.setAttribute("tabindex","0"),n.setAttribute("title",t),n.appendChild(document.createTextNode(t)),e.appendChild(n),n},e}(s);e.MenuExplorer=u},10:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.StepMagnifier=e.SimpleMagnifier=e.DummyMagnifier=e.AbstractMagnifier=void 0;var i=n(446),c=n(807),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),Object.defineProperty(e.prototype,"active",{get:function(){return this._active&&c.config.MAG_ACTIVE===this.name},set:function(t){this._active=t},enumerable:!1,configurable:!0}),e.prototype.update=function(){this.container.viewBox.select(this.container.activeElement.getDrawnElements())},e.prototype.deactivate=function(){this.active&&(this.container.viewBox.clearActive(),this.container.viewBox.reset(),t.prototype.deactivate.call(this))},e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,i.EventType.KEYDOWN,(function(e){return e.keyCode===t.getActivationKey()&&c.config.MAG_ACTIVE!==t.name&&(c.config.MAG_ACTIVE=t.name,t.update()),e.stopPropagation(),!1}))},e}(n(530).AbstractController);e.AbstractMagnifier=a;var s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=c.magnifiers.DUMMY,e}return r(e,t),e.prototype.getActivationKey=function(){return i.KeyCodes.N},e.prototype.update=function(){this.container.viewBox.reset(),t.prototype.update.call(this)},e}(a);e.DummyMagnifier=s;var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=c.magnifiers.SIMPLE,e}return r(e,t),e.prototype.update=function(){this.container.viewBox.select(this.container.activeElement.getDrawnElements()),this.container.viewBox.zoom("cacc-active")},e.prototype.getActivationKey=function(){return i.KeyCodes.COMMA},e}(a);e.SimpleMagnifier=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=c.magnifiers.STEP,e.lastActive=null,e}return r(e,t),e.prototype.update=function(){var t=this.container.activeElement,e=this.container.viewBox,n=this.lastActive?this.lastActive.getDrawnElements():[];this.container.viewBox.select(t.getDrawnElements(),"cacc-almost"),e.select(t.getDrawnElements().concat(n),"cacc-dummy"),this.lastActive=t,e.zoom("cacc-dummy",{duration:250,delay:25,wait:300,callback:function(){e.select([],"cacc-almost"),e.select(t.getDrawnElements(),"cacc-active"),e.zoom("cacc-active",{duration:250,delay:25,wait:300})}})},e.prototype.getActivationKey=function(){return i.KeyCodes.M},e}(a);e.StepMagnifier=u},556:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Speech=e.Subtitle=e.LiveRegion=void 0;var i=n(422),c=n(911),a=n(446),s=n(807),l=function(t){function e(e){var n=t.call(this,e)||this;return n.container=e,n.setupMessage(),n}return r(e,t),e.prototype.setupMessage=function(){var t=this.container.molecule.createElement("p");t.classList.add("explorer"),t.setAttribute("aria-live","assertive"),i.hasSpeech()&&(speechSynthesis.onvoiceschanged=function(){speechSynthesis.getVoices().length&&t.removeAttribute("aria-live")}),t.setAttribute("tabindex","-1"),t.classList.add("cacc-message"),this.message=t},e.prototype.activate=function(){this.active||(this.addMessage(),t.prototype.activate.call(this))},e.prototype.deactivate=function(){this.active&&(t.prototype.deactivate.call(this),this.removeMessage())},e.prototype.removeMessage=function(){this.message.parentNode.removeChild(this.message)},e.prototype.update=function(){this.message.textContent=this.container.activeElement.getSpeech()},e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,a.EventType.KEYDOWN,(function(e){return e.keyCode===a.KeyCodes.Z&&(t.toggleMessageVisibility(),s.config.MSG_VISIBLE=!s.config.MSG_VISIBLE),e.stopPropagation(),!1}))},e.prototype.toggleMessageVisibility=function(){c.toggleTextVisibility(this.message)},e}(n(530).AbstractController);e.LiveRegion=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=s.regions.SUBTITLE,e}return r(e,t),e.prototype.addMessage=function(){this.container.molecule.node.parentNode.appendChild(this.message),s.config.MSG_VISIBLE||this.message.classList.add("cacc-text-invisible")},e}(l);e.Subtitle=u;var p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=s.regions.SPEECH,e}return r(e,t),e.prototype.setupMessage=function(){this.message=s.config.SUBTITLE},e.prototype.addMessage=function(){this.message.parentNode||i.getDocument().body.appendChild(this.message)},e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,a.EventType.KEYDOWN,(function(e){return e.keyCode===a.KeyCodes.V&&(t.toggleMessageVisibility(),s.config.SUB_VISIBLE=!s.config.SUB_VISIBLE),e.stopPropagation(),!1}))},e}(l);e.Speech=p},150:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Voicing=e.Oscillator=e.AbstractSoundController=void 0;var i=n(422),c=n(446),a=n(807),s=n(530),l=n(394),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.activate=function(){t.prototype.activate.call(this),this.active=this.on()},e.prototype.deactivate=function(){this.stop(),t.prototype.deactivate.call(this)},e.prototype.update=function(){this.stop()},e.prototype.getStopKey=function(){return c.KeyCodes.K},e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===t.getActivationKey()&&(t.active=!t.active,t.toggle(t.active),t.active?t.update():t.stop()),e.keyCode===t.getRepeatKey()&&t.update(),e.keyCode===t.getStopKey()&&t.stop(),e.stopPropagation(),!1}))},e}(s.AbstractController);e.AbstractSoundController=u;var p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.sound.OSCILLATOR,e.currentOscillators=[],e}return r(e,t),e.prototype.update=function(){t.prototype.update.call(this),this.currentOscillators=l.Sonify.sonify(this.container.activeElement)},e.prototype.on=function(){return a.config.SONIFY},e.prototype.toggle=function(t){a.config.SONIFY=t},e.prototype.stop=function(){this.currentOscillators.forEach((function(t){return t.stop()}))},e.prototype.getActivationKey=function(){return c.KeyCodes.O},e.prototype.getRepeatKey=function(){return c.KeyCodes.P},e}(u);e.Oscillator=p;var h=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.sound.VOICING,e.languages=null,e}return r(e,t),e.prototype.update=function(){t.prototype.update.call(this);var e=new SpeechSynthesisUtterance(this.container.activeElement.getSpeech());e.lang=this.languages?this.languages.active:a.config.VOICE_LANG,speechSynthesis.speak(e)},e.prototype.activate=function(){i.hasSpeech()&&(this.languages=this.container.molecule.cmlStructure.getRootElement().getDiagram().languages,this.languages&&this.languages.updateActive(),t.prototype.activate.call(this))},e.prototype.getActivationKey=function(){return c.KeyCodes.Y},e.prototype.getRepeatKey=function(){return c.KeyCodes.U},e.prototype.on=function(){return a.config.VOICING},e.prototype.toggle=function(t){a.config.VOICING=t},e.prototype.stop=function(){i.hasSpeech()&&speechSynthesis.cancel()},e}(u);e.Voicing=h},916:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Language=e.Expert=e.Detail=e.AbstractSpeech=void 0;var i=n(422),c=n(446),a=n(807),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.update=function(){},e}(n(530).AbstractController);e.AbstractSpeech=s;var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.speech.DETAIL,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===c.KeyCodes.W&&(t.container.activeElement.link?(t.container.activeElement.links=!0,t.container.update(),t.container.activeElement.links=!1):((0,i.toggleExpertMode)(),t.container.update(),(0,i.toggleExpertMode)())),e.stopPropagation(),!1}))},e}(s);e.Detail=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.speech.EXPERT,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===c.KeyCodes.X&&((0,i.toggleExpertMode)(),t.container.update()),e.stopPropagation(),!1}))},e}(s);e.Expert=u;var p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.speech.LANGUAGE,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){e.keyCode===c.KeyCodes.L&&(t.container.molecule.cmlStructure.getMap().nextLanguage()&&t.container.active&&t.container.update());return e.stopPropagation(),!1}))},e}(s);e.Language=p},250:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Bbox=void 0;var n=function(){function t(t,e,n,o){this.x=t,this.y=e,this.width=n,this.height=o}return t.fromSvgRect=function(e){return new t(e.x,e.y,e.width,e.height)},t.fromSvgViewBox=function(e){return new t(e.baseVal.x,e.baseVal.y,e.baseVal.width,e.baseVal.height)},t.combineBboxes=function(e){var n=function(t){var e=t.getBBox();if(0===e.x&&0===e.y&&0===e.width&&0===e.height&&t.childNodes&&t.childNodes[0]&&t.childNodes[0].transform){var n=t.childNodes[0],o=void 0,r=void 0,i=void 0,c=void 0;if(n.x&&n.y&&n.width&&n.height)o=n.x.baseVal.value,r=n.y.baseVal.value,i=n.width.baseVal.value,c=n.height.baseVal.value;else{var a=n.getBBox();o=a.baseVal.x,r=a.baseVal.y,i=a.baseVal.width,c=a.baseVal.height}var s=t.ownerSVGElement.createSVGPoint(),l=n.transform.baseVal;s.x=o,s.y=r;for(var u=l.length-1;u>=0;u--)s=s.matrixTransform(l.getItem(u).matrix);e.x=s.x,e.y=s.y,e.width=i,e.height=c}return e},o=t.fromSvgRect(n(e[0]));return 1===e.length?o:e.slice(1).reduce((function(t,e){return t.combine(n(e))}),o)},t.prototype.add=function(e){return new t(this.x+e.x,this.y+e.y,this.width+e.width,this.height+e.height)},t.prototype.difference=function(t,e,n){var o=this.add(t.scale(-1));return e&&(o.x=o.x-e/2,o.width=o.width+e),n&&(o.y=o.y-n/2,o.height=o.height+n),o},t.prototype.scale=function(e){return new t(this.x*e,this.y*e,this.width*e,this.height*e)},t.prototype.combine=function(e){var n=Math.min(this.x,e.x),o=Math.min(this.y,e.y);return new t(n,o,Math.max(this.x+this.width,e.x+e.width)-n,Math.max(this.y+this.height,e.y+e.height)-o)},t.prototype.viewBoxValue=function(){return this.x+" "+this.y+" "+this.width+" "+this.height},t}();e.Bbox=n},966:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),i=this&&this.__awaiter||function(t,e,n,o){return new(n||(n=Promise))((function(r,i){function c(t){try{s(o.next(t))}catch(t){i(t)}}function a(t){try{s(o.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(c,a)}s((o=o.apply(t,e||[])).next())}))},c=this&&this.__generator||function(t,e){var n,o,r,i,c={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;c;)try{if(n=1,o&&(r=2&i[0]?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return c.label++,{value:i[1],done:!1};case 5:c.label++,o=i[1],i=[0];continue;case 7:i=c.ops.pop(),c.trys.pop();continue;default:if(!(r=c.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){c=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,r,i=n.call(t),c=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)c.push(o.value)}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return c};Object.defineProperty(e,"__esModule",{value:!0}),e.Container=void 0;var l=n(911),u=n(446),p=n(807),h=n(530),f=n(889),d=n(691),v=n(229),g=function(t){function e(e,n){var o=t.call(this,null)||this;return o.key=e,o.mol=n,o.name="Container",o.controllers=[],o.initElement().then((function(){o.viewBox=new v.ViewBox(o.molecule.svg),o.controllers=o.controllers.concat(f.ControllerFactory.get(o)),o.styles=l.moleculeStyle(o.molecule),o.activeElement=o.molecule.cmlStructure.getRootElement(),o.customEvents(),o.getDefaultExplorer()})).catch((function(){console.error("Failed to initialize element ".concat(e))})),o}return r(e,t),e.loadElement=function(t){return i(this,void 0,void 0,(function(){var e;return c(this,(function(n){return e=0,[2,new Promise((function(n,o){var r=function(){t.hasAttribute("has-svg")&&t.hasAttribute("has-cml")?n():e>5?o(t):(e++,setTimeout(r,100))};r()})).catch((function(t){"true"!==t.getAttribute("has-svg")&&console.error("Failed to load SVG diagram."),"true"!==t.getAttribute("has-cml")&&console.error("Failed to load XML annotation.")}))]}))}))},e.prototype.initElement=function(){return i(this,void 0,void 0,(function(){var t=this;return c(this,(function(n){return[2,e.loadElement(this.mol).then((function(){if("true"!==t.mol.getAttribute("has-svg")||"true"!==t.mol.getAttribute("has-cml"))return Promise.reject("Loading of components failed.");var e=t.mol.querySelector("div.svg").children[0],n=t.mol.querySelector("div.cml").children[0];return e&&n?(t.mol.setAttribute("tabindex","0"),t.mol.setAttribute("role","application"),e.setAttribute("aria-hidden","true"),n.setAttribute("aria-hidden","true"),t.mol.hasAttribute("aria-label")||t.mol.setAttribute("aria-label","Navigatable ".concat(n.tagName)),t.molecule=new d.Molecule(t.mol,e,n),Promise.resolve()):Promise.reject("Empty Diagram elements.")})).catch((function(t){console.error("Molecule Structure initialisation failed with:",t)}))]}))}))},e.prototype.update=function(t){t&&(this.activeElement=t),this.controllers.forEach((function(t){t.active&&t.update()}))},e.prototype.activate=function(){t.prototype.activate.call(this),this.addStyles(),this.controllers.forEach((function(t){return t.activate()}))},e.prototype.deactivate=function(){this.controllers.forEach((function(t){return t.deactivate()})),this.removeStyles(),t.prototype.deactivate.call(this)},e.prototype.addStyles=function(){var t,e;try{for(var n=a(this.styles),o=n.next();!o.done;o=n.next()){var r=s(o.value,2)[1];this.molecule.node.appendChild(r)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.removeStyles=function(){var t,e;try{for(var n=a(this.styles),o=n.next();!o.done;o=n.next()){var r=s(o.value,2)[1];this.molecule.node.removeChild(r)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.replaceStyles=function(t){var e,n;this.removeStyles();try{for(var o=a(t),r=o.next();!r.done;r=o.next()){var i=r.value;this.styles.set(i.className,i)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(e)throw e.error}}this.addStyles()},e.prototype.customEvents=function(){var t,e=this;(null===(t=this.molecule)||void 0===t?void 0:t.node)&&(this.registerEvent(this.molecule.node,u.EventType.KEYDOWN,(function(t){return t.keyCode===u.KeyCodes.SPACE&&(e.update(),t.preventDefault(),t.stopPropagation()),!1})),new u.CustomEvent(this.molecule.node,u.EventType.KEYDOWN,(function(t){return e.defaultExplorer&&!e.active&&t.keyCode===u.KeyCodes.ENTER&&(e.defaultExplorer.active=!0,e.activate(),t.preventDefault(),t.stopPropagation()),!1})).add(),new u.CustomEvent(this.molecule.node,u.EventType.CLICK,(function(t){return e.defaultExplorer&&!e.active&&(e.defaultExplorer.active=!0,e.activate(),t.stopPropagation()),!1})).add())},e.prototype.getDefaultExplorer=function(){this.defaultExplorer=this.controllers.find((function(t){return t.name===p.explorers.KEY})),this.defaultExplorer||(this.defaultExplorer=this.controllers.find((function(t){return t.name===p.explorers.MENU})))},e}(h.AbstractController);e.Container=g},88:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Diagram=void 0;var n=function(){function t(t){this.languages=t,this.diagram_={}}return t.prototype.set=function(t,e){this.diagram_[t]=e},t.prototype.get=function(t){return this.diagram_[t]},t.prototype.forEach=function(t){for(var e in this.diagram_)t.call(this,this.diagram_[e])},t.prototype.find=function(t){for(var e in this.diagram_){var n=this.diagram_[e];if(t.call(this,n))return n}return null},t.prototype.translate=function(t){return this.languages?this.languages.translate(t):t},t.prototype.nextLanguage=function(){return this.languages?(this.languages.nextLanguage(),this.languages.active):null},t}();e.Diagram=n},465:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Language=void 0;var o=n(422),r=function(){function t(t){this.cmlDocument=t,this.messages={},this.language=this.getLanguage(),this.insertMessages()}return t.prototype.getLanguage=function(){var t=this.cmlDocument.querySelector("language");return t?t.textContent:""},t.prototype.insertMessages=function(){for(var t=this.cmlDocument.querySelectorAll("message"),e=0,n=void 0;n=t[e];e++)this.messages[(0,o.getAttribute)(n,"msg")]=n.textContent},t.prototype.translate=function(t){return this.messages[t]},t}();e.Language=r},495:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.Languages=void 0;var r=n(807),i=n(465),c=function(){function t(t){this.cmlDocument=t,this.languages={},this.insertLanguages(),this.active=this.defaultActive()}return t.createLanguages=function(e){return 0===Array.from(e.querySelectorAll("messages")).filter((function(t){return t.childNodes.length})).length?null:new t(e)},t.prototype.insertLanguages=function(){var t,e,n=this.cmlDocument.querySelectorAll("messages");try{for(var r=o(Array.from(n)),c=r.next();!c.done;c=r.next()){var a=c.value,s=a.querySelector("language");s&&(this.languages[s.textContent]=new i.Language(a))}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},t.prototype.updateActive=function(){this.active=this.languages[r.config.ACTIVE_LANG]?r.config.ACTIVE_LANG:this.defaultActive()},t.prototype.defaultActive=function(){return this.languages[r.config.VOICE_LANG]?r.config.VOICE_LANG:Object.keys(this.languages)[0]},t.prototype.translate=function(t){return this.languages[this.active].translate(t)},t.prototype.nextLanguage=function(){var t=Object.keys(this.languages),e=t.indexOf(this.active)+1;this.active=t.length>e?t[e]:t[0],r.config.ACTIVE_LANG=this.active},t}();e.Languages=c},229:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,r,i=n.call(t),c=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)c.push(o.value)}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return c};Object.defineProperty(e,"__esModule",{value:!0}),e.ViewBox=e.ZoomOptions=void 0;var i=n(422),c=n(250),a=function(){};e.ZoomOptions=a;var s=function(){function t(t){this.svg=t,this.focusgroups=new Map,this.defaultZoomOptions={xPad:this.svg.width.baseVal.value/5,yPad:this.svg.height.baseVal.value/5,duration:100,delay:10,wait:0,callback:function(){}},this.reset()}return t.prototype.reset=function(){this.setViewBox_(c.Bbox.fromSvgRect(this.svg.getBBox()))},t.prototype.setClass=function(t,e){for(var n=0;n=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.Atom=void 0;var c=n(422),a=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.speech="",e.links=!1,e}return r(e,t),e.prototype.getSpeech=function(){if(this.link&&this.links)return this.speakLinks();var t=[];this.neighbourhood.forEach((function(e){"external"!==e.location&&t.push(e.getSpeech())}));var e=this.getMessage();return this.speech=this.getDiagram().translate(e)+" "+t.join(" "),this.speech},e.prototype.getDrawnElements=function(){if(this.drawnElements)return this.drawnElements;this.drawnElements=[];var t=this.getDrawnElement();t&&this.drawnElements.push(t);for(var e=this.getAnnotation().querySelectorAll("component *"),n=0;n=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AtomSet=void 0;var c=n(422),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.getDrawnElements=function(){var t,e,n=this;if(this.drawnElements)return this.drawnElements;this.drawnElements=[];var o={},r=function(t){o[t.id]||(o[t.id]=!0,n.drawnElements.push(t))},a=this.getDrawnElement();a&&r(a);try{for(var s=i(this.getDown()),l=s.next();!l.done;l=s.next()){(h=l.value).getDrawnElements().forEach(r),(a=h.getDrawnElement())&&r(a)}}catch(e){t={error:e}}finally{try{l&&!l.done&&(e=s.return)&&e.call(s)}finally{if(t)throw t.error}}for(var u=this.getAnnotation().querySelectorAll("component bond,passive"),p=0;p atom,active"),e=0,n=void 0;n=t[e];e++){var o=this.getDiagram().get((0,i.getTextContent)(n));o&&this.ends.push(o)}},e}(n(41).NeighbourHood);e.Bond=c},903:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.ChemObj=void 0;var r=n(422),i=["circular"],c=function(){function t(t,e){var n,c;this.annotation_=t,this.diagram_=e,this.drawnElements=null,this.attributes=new Map,this.up=null,this.down=[],this.link=!1,this.drawn_=null,this.id_=this.getId_(),this.parent_=this.getParent_(),this.position=this.getPosition_();try{for(var a=o(i),s=a.next();!s.done;s=a.next()){var l=s.value,u=r.getAttribute(t,l);u&&this.attributes.set(l,u)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(c=a.return)&&c.call(a)}finally{if(n)throw n.error}}}return t.prototype.getAnnotation=function(){return this.annotation_},t.prototype.getDiagram=function(){return this.diagram_},t.prototype.getId=function(){return this.id_},t.prototype.setDrawnElement=function(t){this.drawn_=t},t.prototype.getDrawnElement=function(){return this.drawn_},t.prototype.getDrawnElements=function(){return this.drawnElements||(this.drawnElements=[],this.drawn_&&this.drawnElements.push(this.drawn_)),this.drawnElements},t.prototype.complete=function(){if(this.down.length&&this.down.sort((function(t,e){return!t.position&&e.position?1:t.position-e.position})),this.parent_){var t=this.getDiagram().get(this.parent_);this.up=t,t.down.push(this)}},t.prototype.getParent=function(){return this.parent_},t.prototype.getKey=function(){return this.id_+this.parent_},t.prototype.getUp=function(){return this.up?[this.up]:[]},t.prototype.getDown=function(){return this.down},t.prototype.getRight=function(){if(!this.up)return[];var t=this.up.getDown(),e=t.indexOf(this);if(t.length>e+1){var n=t[e+1];return n.position?[n]:[]}return this.up.attributes.get("circular")?[t[0]]:[]},t.prototype.getLeft=function(){if(!this.up)return[];var t=this.up.getDown(),e=t.indexOf(this);if(e>0){var n=t[e-1];return n.position?[n]:[]}return this.up.attributes.get("circular")?[t[t.length-1]]:[]},t.prototype.getId_=function(){var t=this.getAnnotation().firstElementChild;return t?t.textContent:""},t.prototype.getParent_=function(){var t=this.getAnnotation().querySelector("parents > *");return t?r.getTextContent(t):""},t.prototype.getPosition_=function(){return parseInt(r.getTextContent(this.getAnnotation().querySelector("position")),10)},t}();e.ChemObj=c},183:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CML=void 0;var r=n(88),i=n(495),c=n(839),a=n(111),s=n(202),l=function(){function t(t){this.cmlDocument=t,this.root=null,this.map=new r.Diagram(i.Languages.createLanguages(t)),this.initMap_()}return t.prototype.getMap=function(){return this.map},t.prototype.getRootElement=function(){return this.root||(this.root=this.map.find((function(t){return!(t instanceof s.Bond||t.up)}))),this.root},t.prototype.initMap_=function(){var t,e,n=Array.from(this.cmlDocument.querySelectorAll("annotations > annotation"));try{for(var r=o(n),i=r.next();!i.done;i=r.next()){var l=i.value,u=l.firstElementChild;if(u){var p=void 0;switch(u.localName.toLowerCase()){case"atom":case"active":p=new c.Atom(l,this.map),this.map.set(p.getKey(),p);break;case"bond":case"passive":p=new s.Bond(l,this.map),this.map.set(p.getId(),p);break;case"atomset":case"grouped":p=new a.AtomSet(l,this.map),this.map.set(p.getId(),p)}}}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}this.map.forEach((function(t){return t.complete()}))},t}();e.CML=l},691:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Molecule=void 0;var o=n(422),r=n(183),i=function(){function t(t,e,n){this.node=t,this.svg=e,this.cml=n,this.id=o.getId(),o.classList.add(this.svg,this.id),o.classList.add(this.cml,this.id),this.cmlStructure=new r.CML(this.cml),this.topLevelDescription=this.cmlStructure.getRootElement().getSpeech(),this.combine_()}return t.prototype.createElement=function(t){var e=document.createElement(t);return e.classList.add(this.id),e},t.prototype.combine_=function(){var t=this;this.cmlStructure.getMap().forEach((function(e){var n=t.svg.getElementById(e.getId());n&&e.setDrawnElement(n)}))},t}();e.Molecule=i},171:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Neighbour=void 0;var o=n(422),r=n(122),i=function(){function t(t,e){var n=this;this.from_=t,this.annotation_=e,this.speech=null,this.speech2=null;var i=o.children(this.annotation_);this.to_=this.from_.getDiagram().get(o.getTextContent(i[0])),this.location=o.getAttribute(this.annotation_,o.attr.LOCATION),this.via_=i.slice(1).map((function(t){return new r.Via(n,t)}))}return t.prototype.from=function(){return this.from_},t.prototype.to=function(){return this.to_},t.prototype.via=function(){return this.via_},t.prototype.getSpeech=function(){return this.from_.getDiagram().translate(this.getMessage())},t.prototype.getMessage=function(){if(o.EXPERT_MODE){if(this.speech2)return this.speech2;if(this.speech2=o.getAttribute(this.annotation_,o.attr.EXPERT_SPEECH),this.speech2)return this.speech2}return this.speech||(this.speech=o.getAttribute(this.annotation_,o.attr.SIMPLE_SPEECH)),this.speech},t}();e.Neighbour=i},41:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.NeighbourHood=void 0;var i=n(422),c=n(903),a=n(171),s=function(t){function e(e,n){var o=t.call(this,e,n)||this;return o.neighbourhood=[],o}return r(e,t),e.prototype.complete=function(){t.prototype.complete.call(this);for(var e=this.getAnnotation().querySelectorAll("neighbours neighbour"),n=0,o=void 0;o=e[n];n++)this.neighbourhood.push(new a.Neighbour(this,o))},e.prototype.getSpeech=function(){return this.getDiagram().translate(this.getMessage())},e.prototype.getMessage=function(){var t=i.getAttribute(this.getAnnotation(),i.attr.EXPERT_SPEECH),e=i.getAttribute(this.getAnnotation(),i.attr.SIMPLE_SPEECH);return i.EXPERT_MODE?t||e:e||t},e.prototype.getNeighbours=function(){return this.neighbourhood},e}(c.ChemObj);e.NeighbourHood=s},122:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Via=void 0;var o=n(422),r=function(){function t(t,e){this.neighbour_=t,this.annotation_=e,this.type_=o.getAttribute(this.annotation_,o.attr.TYPE);var n=o.children(this.annotation_);this.connectedBy_=this.getConnectedBy_(n[0]),"Connecting bond"===this.type_&&"external"===this.neighbour_.location&&(this.neighbour_.from().link=!0),void 0!==this.connectedBy_&&(this.connectedBy_.link=!0),this.position_=parseInt(o.getTextContent(n[1]),10)}return t.prototype.getDrawnElements=function(){return this.connectedBy_.getDrawnElements()||[]},t.prototype.getType=function(){return this.type_||""},t.prototype.getPosition=function(){return this.position_},t.prototype.getConnectedBy_=function(t){var e=this.neighbour_.from().getDiagram(),n=o.getTextContent(t),r=e.get(n);return r||e.get(n+this.neighbour_.from().getId())},t}();e.Via=r},394:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.Sonify=void 0;var r=n(422),i=function(){function t(t){this.path=[],this.points=[],this.context=new AudioContext,this.prepare(t),this.sonifiable=this.path.length}return t.sonify=function(e){var n=e.getAnnotation().querySelectorAll("sonification > *"),o=[];n.length&&(o=Array.from(n).map((function(t){var n=(0,r.getTextContent)(t),o=t.tagName.toLowerCase(),i=n+("active"!==o&&"sre:active"!==o?"":n===e.getId()?e.getParent():e.getId());return e.getDiagram().get(i)})));var i=new t(o);return i.sonifiable?i.sonify():[]},t.prototype.prepare=function(t){var e,n;try{for(var r=o(t),i=r.next();!i.done;i=r.next()){var c=i.value;if(c.getDrawnElement()){for(var a=c.getDrawnElement().querySelectorAll("polyline"),s=0;s20?(r=n/10+.01,i=n/10+.1):(r=n/2+.01,i=n/2+.5),o.start(this.context.currentTime+r),o.stop(this.context.currentTime+i)}return e},t.prototype.sonify=function(){var e,n,o=[],r=this.context.createOscillator();o.push(r),r.type="sine",r.connect(this.context.destination);for(var i=0;i20?(e=i/10+.01,n=i/10):(e=i/2+.01,n=i/2+.5),console.log(e),i?r.frequency.setValueAtTime(this.points[i][1]?t.BASE_FREQUENCY-this.points[i][1]:0,this.context.currentTime+n):(r.frequency.setValueAtTime(t.BASE_FREQUENCY-this.points[i][1],this.context.currentTime),r.start(this.context.currentTime));return r.stop(this.context.currentTime+n),o},t.prototype.smooth=function(){if(this.points.length){for(var e=[this.points[0]],n=0;n{var t=o;Object.defineProperty(t,"__esModule",{value:!0}),t.version=t.Config=t.Base=void 0;var e=n(807),r=n(23);t.Base=r.Base,t.Config=e.config,t.version=e.version})(),o})()})); \ No newline at end of file diff --git a/slides-annotated/_static/pretext/js/edit.js b/slides-annotated/_static/pretext/js/edit.js deleted file mode 100755 index 1d7a66a..0000000 --- a/slides-annotated/_static/pretext/js/edit.js +++ /dev/null @@ -1,4988 +0,0 @@ - -editorLog = console.log; -// editorLog = function(){}; -debugLog = function(){}; -// debugLog = console.log; -//parseLog = function(){}; -parseLog = console.log; -errorLog = console.log; - -/* the structure of each object, and its realization as PreTeXt source or in HTML, - is recorded in the objectStructure dictionary. - -{"xml:id": new_id, "sourcetag": new_tag, "parent": parent_description, "title": ""} - -In pretext, pieces are of the form ["piecename", "tag"], while -in source, pieces are of the form ["piecename", "required_component"], while - -*/ - -editing_mode = 0; - -current_page = location.host+location.pathname; -debugLog("current_page", current_page); -chosen_edit_option_key = "edit_option".concat(current_page); -chosen_edit_option = readCookie(chosen_edit_option_key) || ""; -editing_mode = chosen_edit_option; /* delete one of those variables */ -debugLog("chosen_edit_option", chosen_edit_option, "chosen_edit_option", chosen_edit_option > 0); - - -objectStructure = { - "type": { - "html": { - "tag": "span", - "attributes": ['class="type"', 'data-parent_id="<&>xml:id<;>"', 'data-editable="70XX"', 'tabindex="-1"'], - "pieces": [["(capitalize,sourcetag)", ""]] - } - }, - "type-child": { - "html": { - "tag": "span", - "attributes": ['class="type"', 'data-editable="70YY"', 'tabindex="-1"'], - "pieces": [["(capitalize,sourcetag)", ""]] - // "pieces": [["(capitalize,type-contained)", ""]] - } - }, - "type-proof": { - "html": { - "tag": "span", - "attributes": ['class="type"', 'data-editable="70YY"', 'tabindex="-1"'], - "pieces": [["(literal,Proof)", ""]] - // "pieces": [["(capitalize,type-contained)", ""]] - } - }, - "sectiontype": { - "html": { - "tag": "span", - "attributes": ['class="type"'], // the type of a section is not editable? - "pieces": [["(capitalize,sourcetag)", ""]] - } - }, - "codenumber": { - "html": { - "tag": "span", - "attributes": ['class="codenumber"'], - "pieces": [["(codenumber,)", ""]] // maybe () was a bad idea? do we need a triple? - } - }, - "period": { - "html": { - "tag": "span", - "attributes": ['class="period"'], - "pieces": [["(period,)", ""]] - } - }, - "comma": { // used in bibliography - "html": { - "tag": "span", - "attributes": ['class="comma"'], - "pieces": [["(comma,)", ""]] - } - }, - "titleperiod": { - "html": { - "tag": "span", - "attributes": ['class="period"'], - "pieces": [["(titleperiod,)", ""]] - } - }, - "space": { - "html": { - "tag": "span", - "attributes": ['class="space"'], - "pieces": [["(space,)", ""]] - } - }, - "title": { - "html": { - "tag": "span", - "attributes": ['class="title"', 'data-editable="70"', 'tabindex="-1"'], - "pieces": [["title", ""]] - } - }, - "nbsp": { - "html": { - "tag": "", - "pieces": [["(literal, )", ""]], - }, - "pretext": { - "tag": "nbsp", - "pieces": [] - }, - "source": { - "pieces": [] - } - }, - "idx": { - "html": { - "tag": "", - "pieces": [], - }, - "pretext": { - "tag": "idx", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "h": { - "html": { - "tag": "", - "pieces": [], - }, - "pretext": { - "tag": "h", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "theorem_like_heading": { - "html": { - "tag": "h4", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{type}", ""], ["{space}", ""], ["{codenumber}", ""], ["{period}", ""], ["{space}", ""], ["{title}", ""], ["{titleperiod}", ""]] - // * means editable piece - } - }, - "proof_like_heading": { - "html": { - "tag": "h5", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'xml:id="<&>xml:id<;>"'], - "pieces": [["{type-child}", ""], ["{period}", ""]] - } - }, - "proof_heading": { - "html": { - "tag": "h5", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'xml:id="<&>xml:id<;>"'], - "pieces": [["{type-proof}", ""], ["{period}", ""]] - } - }, - "section_like_heading": { - "html": { - "tag": "h2", - "cssclass": "heading hide-type", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{sectiontype}", ""], ["{codenumber}", ""], ["{space}", ""], ["{title}", ""]] - } - }, - "title_heading": { - "html": { - "tag": "h2", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{title}", ""], ["{period}", ""]] - } - }, - "task_like_heading": { - "html": { - "tag": "h6", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{codenumber}", ""], ["{space}", ""], ["{title}", ""]] - } - }, - "caption_like_heading": { - "html": { - "tag": "h5", - "cssclass": "captionheading", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{type}", ""], ["{space}", ""], ["{codenumber}", ""], ["{period}", ""], ["{space}", ""]] - } - }, - "xref": { - "html": { - "tag": "span", - "attributes": ['class="ref tmp"', 'id="<&>xml:id<;>"', 'ref="<&>ref<;>"'], - "pieces": [["(literal,REFERENCE)", ""]], - }, - "pretext": { - "tag": "xref", - "attributes": ['ref="<&>ref<;>"', 'text="<&>text<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]], - "attributes": [["ref", "*"], ["text", ""],["detail",""],["first",""],["last",""]] - } - }, - "introduction": { - "html": { - "tag": "section", - "attributes": ['class="introduction"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["content", ""]], - }, - "pretext": { - "tag": "introduction", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "conclusion": { - "html": { - "tag": "section", - "attributes": ['class="conclusion"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{proof_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "conclusion", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - - "worksheet": { - "html": { - "tag": "section", - "attributes": ['class="worksheet"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "worksheet", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "section": { - "html": { - "tag": "section", - "attributes": ['class="section"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "section", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "subsection": { - "html": { - "tag": "section", - "attributes": ['class="subsection"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "subsection", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "paragraphs": { - "html": { - "tag": "section", - "attributes": ['class="paragraphs"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{title_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "paragraphs", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "exercises": { - "html": { - "tag": "section", - "attributes": ['class="exercises"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "exercises", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "exercisegroup": { - "html": { - "tag": "section", - "attributes": ['class="exercisegroup"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "exercisegroup", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - - - "page": { - "html": { - "tag": "section", - "attributes": ['class="onepage"', 'id="<&>xml:id<;>"', 'data-editable="PPP"', 'tabindex="-1"'], - "pieces": [["content", ""]], - }, - "pretext": { - "tag": "page", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - "objectives": { - "html": { - "tag": "article", - "cssclass": "objectives", - "pieces": [["{proof_like_heading}", ""], ["content",""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "data_editable": "160" - }, - "pretext": { - "tag": "objectives", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - - - - "p": { - "html": { - "tag": "p", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "99" - }, - "pretext": { - "tag": "p", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, -/* probably there is a better way to do it, but we have separate elements for p - that occur in - text // ip - math - text // mp - math - text // mp - math - text // fp -*/ - "ip": { - "html": { - "tag": "p", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "99" - }, - "pretext": { - "tag_opening": "\n\n'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "mp": { - "html": { - "tag": "p", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="mp"'], - "data_editable": "99" - }, - "pretext": { - "tag_opening": "", - "tag_closing": "", - "attributes": [], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "fp": { - "html": { - "tag": "p", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="fp"'], - "data_editable": "99" - }, - "pretext": { - "tag_opening": "", - "tag_closing": "\n

    \n", - "attributes": [], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "li": { - "html": { - "tag": "li", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"'], - "data_editable": "98aZ" - }, - "pretext": { - "tag": "li", - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", ""], ["content", "p"]] - } - }, - - "blockquote": { - "html": { - "tag": "blockquote", - "pieces": [["content", ""], ["attribution", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "cssclass": "blockquote", - "data_editable": "44?" - }, - "pretext": { - "tag": "blockquote", - "pieces": [["content", ""], ["attribution", "attribution"]], - }, - "source": { - "pieces": [["content", "p"], ["attribution", ""]] // attribution can contain a "line". come back to that - } - }, - - "list": { - "html": { - "tag": "ol", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'list-style-type="a"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "AAA" - }, - "pretext": { - "tag": "ol", - "pieces": [["content", ""]], - "attributes": ['label="A"'] - }, - "source": { - "pieces": [["title", ""], ["content", "li"]], - "attributes": [["label", "A"]] - } - }, - - "figure": { - "html": { - "tag": "figure", - "pieces": [["content",""],["{caption}", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "data_editable": "32", - "cssclass": "figure figure-like" - }, - "pretext": { - "tag": "figure", - "pieces": [["content"], ["{caption}"]], - "attributes": ['xml:id="<&>xml:id<;>"'] - }, - "source": { - "pieces": [["content", ""], ["captiontext", ""]], - "attributes": [] - } - }, - - "image": { - "html": { - "tag": "div", - "pieces": [["{bareimage}",""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"', 'style="width: <&>width<;>%; margin-right: <&>marginright<;>%; margin-left: <&>marginleft<;>%"'], - "data_editable": "31", - "cssclass": "image-box" - }, - "pretext": { - "tag": "image", - "pieces": [], - "attributes": ['xml:id="<&>xml:id<;>"', 'source="<&>source<;>"', 'alt="<&>alt<;>"', 'width="<&>width<;>%"', 'margins="<&>marginleft<;>% <&>marginright<;>%"'] - }, - "source": { - "pieces": [["",""]], - "attributes": [["source", ""], ["width", "40"], ["marginleft", "20"], ["marginright", "40"], ["alt", ""]] - } - }, - - "bareimage": { - "html": { - "tag": "img", - "pieces": [], - "attributes": ['src="<&>source<;>"', 'alt="<&>alt<;>"', 'class="contained"'], - } - }, - - "sidebyside": { - "html": { - "tag": "div", - "pieces": [["{sbsrow}",""]], - "attributes": ['id="<&>xml:id<;>"', 'class="<&>{cssclass}<;>"'], - "cssclass": "sidebyside" - }, - "pretext": { - "tag": "sidebyside", - "pieces": [["content", ""]], - "attributes": ['xml:id="<&>xml:id<;>"', 'margins="<&>marginleft<;>% <&>marginright<;>%"', 'width="<&>(percentlist,widths)<;>"'], - }, - "source": { - "pieces": [["content",""]], - "attributes": [["marginleft", ""], ["marginright", ""], ["widths", ""]] - } - }, - "sbsrow": { - "html": { - "tag": "div", - "pieces": [["content",""]], // ???? - "attributes": ['class="<&>{cssclass}<;>"', 'style="margin-right: <&>marginright<;>%; margin-left: <&>marginleft<;>%"'], - "data_editable": "89", - "cssclass": "sbsrow" - }, - "pretext": { - "tag": "", - "pieces": [["content",""]], - "attributes": [] - }, - "source": { - "pieces": [["content",""]], - "attributes": [["marginleft", "20"], ["marginright", "40"]] - } - }, - "sbspanel": { - "html": { - "tag": "div", - "pieces": [["content",""]], - "attributes": ['id="<&>xml:id<;>"', 'class="<&>{cssclass}<;>"', 'style="width:<&>(nthitem,widths)<;>%"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "90", - "cssclass": "sbspanel" - }, - "pretext": { - "tag": "stack", - "pieces": [["content", ""]], - "attributes": ['xml:id="<&>xml:id<;>"'] - }, - "source": { - "pieces": [["content",""]] - } - }, - - "proof": { - "html": { - "tag": "article", - "cssclass": "proof", - "pieces": [["{proof_heading}", ""], ["proof",""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "data_editable": "60" - }, - "pretext": { - "tag": "proof", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["proof", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - "proof-standalone": { - "html": { - "tag": "article", - "cssclass": "proof", - "pieces": [["{XXXXXnorbeingusedXXXXXXX_proof_heading}", ""], ["content",""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "data_editable": "60" - }, - "pretext": { - "tag": "proof", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - - "caption": { - "html": { - "tag": "figcaption", - "data_editable": "321", - // "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "attributes": ['id="<&>xml:id<;>"'], - "pieces": [["{caption_like_heading}", ""], ["{captiontext}",""]] - // "pieces": [["(literal, caption goes here)",""]] - }, - "pretext": { - "tag": "caption", - "attributes": [], - "pieces": [["captiontext", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "captiontext": { /* not used */ - "html": { - "tag": "p", - "data_editable": "321", - // "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], -// do it like editabe title? - "attributes": ['data-source_id="<&>xml:id<;>"', 'data-component="caption"', 'class="caption"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "pieces": [["captiontext",""]] - }, - "pretext": { - "tag": "", - "attributes": [], - "pieces": [["captiontext", ""]] - }, - "source": { - "pieces": [["captiontext", ""]] - } - }, - - "references": { - "html": { - "tag": "article", - "cssclass": "bib", - "data_editable": "33", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{section_like_heading}", ""], ["content",""]] - }, - "pretext": { - "tag": "references", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", ""], ["content",""]] - }, - "source": { - "pieces": [["title", ""], ["content",""]] - } - }, - -/* biblio, the items directly following it, and the refrences above, - are not usable at this time. references have to be handled in - a text editor. 3 Dec 2021 -*/ - "biblio": { - "html": { - "tag": "div", - "cssclass": "bibentry", - "data_editable": "333", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{bib-title}", ""], ["{journal}",""], ["{volume}",""], ["{number}",""], ["{author}",""], ["{pages}",""]] - }, - "pretext": { - "tag": "biblio", - "attributes": ['xml:id="<&>xml:id<;>"', 'type="raw"'], - "pieces": [["title", ""], ["journal",""], ["volume",""], ["number",""], ["author",""], ["pages",""]] - }, - "source": { - "pieces": [["title", ""], ["journal",""], ["volume",""], ["number",""], ["author",""], ["pages",""]] - } - }, - - "bib-title": { - "html": { - "tag": "i", - "pieces": [["title", "zz"]] - } - }, - "author": { - "html": { - "tag": "", - "pieces": [["author", ""], ["{comma}", ""]] - } - }, - "journal": { - "html": { - "tag": "", - "pieces": [["journal", ""]] - } - }, - "volume": { - "html": { - "tag": "b", - "pieces": [["volume", ""]] - } - }, - "pages": { - "html": { - "tag": "jjj", - "pieces": [["pages", ""]] - } - }, - "number": { - "html": { - "tag_opening": "no. ", - "tag_closing": " ", - "pieces": [["number", ""]] - } - }, - - "remark-like": { - "html": { - "tag": "article", - "cssclass": "remark-like", - "data_editable": "92", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{theorem_like_heading}", ""], ["statement",""]] - }, - "pretext": { - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["statement", "statement"]] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"]] - } - }, - - "project-like-tasks": { - "html": { - "tag": "article", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "cssclass": "project-like", - "data_editable": "194", - "pieces": [["{theorem_like_heading}", ""], ["content",""], ["tasks", ""]] - }, - "pretext": { - "tag": "sourcetag", - "pieces": [["title", "title"], ["content", ""], ["tasks", ""]], - "attributes": ['xml:id="<&>xml:id<;>"'] - }, - "source": { - "pieces": [["title", ""], ["content", "p"], ["tasks", ""]] - // "attributes": [["workspace", "0"]] - } - }, - "project-like": { - "html": { - "tag": "article", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "cssclass": "project-like", - "data_editable": "94", - "pieces": [["{theorem_like_heading}", ""], ["statement",""], ["%hint%", "hint"], ["%answer%", "answer"], ["%solution%", "solution"], ["{workspace}", ""]] - }, - "pretext": { - "tag": "sourcetag", - "pieces": [["title", "title"], ["statement", "statement"], ["hint", "hint"], ["answer", "answer"], ["solution", "solution"]], - "attributes": ['xml:id="<&>xml:id<;>"', 'workspace="<&>workspace<;>"'] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"], ["hint", ""], ["answer", ""], ["solution", ""]], - "attributes": [["workspace", "0"]] - } - }, - - "definition-like": { - "html": { - "tag": "article", - "cssclass": "definition-like", - "data_editable": "95a", - "pieces": [["{theorem_like_heading}", ""], ["statement", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'] - }, - "pretext": { - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["statement", "statement"]] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"]] - } - }, - - "theorem-like": { - "html": { - "tag": "article", - "cssclass": "theorem-like", - "data_editable": "93", - "pieces": [["{theorem_like_heading}", ""], ["statement", ""], ["{proof}", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'] - }, - "pretext": { - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["statement", "statement"], ["{proof}", ""]] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"], ["proof", ""]] - } - }, - - "task": { - "html": { - "tag": "article", - "cssclass": "exercise-like task", - "data_editable": "94ZZZA", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{task_like_heading}", ""], ["statement",""], ["%hint%", "hint"], ["%answer%", "answer"], ["%solution%", "solution"], ["{workspace}", ""]] - }, - "pretext": { - "tag": "task", - "pieces": [["title", "title"], ["statement", "statement"], ["hint", ""], ["answer", ""], ["solution", ""]], - "attributes": ['workspace="<&>workspace<;>"'] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"], ["hint", ""], ["answer", ""], ["solution", ""]], - "attributes": [["workspace", "0"]] - } - }, - -/* consolidate H/A/S */ - "hint": { - "html": { - "tag": "article", - "cssclass": "solution-like hint", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{proof_like_heading}", ""], ["content",""]], -// go back and make the lack of data_editable automatically make the contained p editable -/* "data_editable": "454", */ - "data_editable": "hhhh" - }, - "pretext": { - "tag": "hint", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - "answer": { - "html": { - "tag": "article", - "cssclass": "solution-like answer", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{proof_like_heading}", ""], ["content",""]], -// go back and make the lack of data_editable automatically make the contained p editable -/* "data_editable": "454", */ - "data_editable": "hhhh" - }, - "pretext": { - "tag": "answer", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - "solution": { - "html": { - "tag": "article", - "cssclass": "solution-like solution", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{proof_like_heading}", ""], ["content",""]], -// go back and make the lack of data_editable automatically make the contained p editable -/* "data_editable": "454", */ - "data_editable": "hhhh" - }, - "pretext": { - "tag": "solution", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - - "workspace": { - "html": { - "tag": "div", - "cssclass": "workspace", - "data_editable": "WwW", - "attributes": ['data-parent_id="<&>xml:id<;>"', 'data-space="<&>workspace<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [] - } - }, - - "term": { // need to mark it as inline - "html": { - "tag": "dfn", - "attributes": ['id="<&>xml:id<;>"', 'class="terminology"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "ttt", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "term", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "em": { // need to mark it as inline - "html": { - "tag": "em", - "attributes": ['id="<&>xml:id<;>"', 'class="emphasis"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "eemm", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "em", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "fn": { // need to mark it as inline - "html": { - "tag": "a", - "attributes": ['id="<&>xml:id<;>"', 'class="id-ref fn-knowl original"', 'data-knowl=" "', 'href=" "', 'data-refid="hk-<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "fnfnfn", -// "pieces": [["content", "sup"]] - "pieces": [["(literal,footnote)", "sup"]] - }, - "pretext": { - "tag": "fn", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "alert": { // need to mark it as inline - "html": { - "tag": "em", - "attributes": ['id="<&>xml:id<;>"', 'class="alert"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "aall", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "alert", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "init": { // need to mark it as inline - "html": { - "tag": "abbr", - "attributes": ['id="<&>xml:id<;>"', 'class="initialism"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "iinniitt", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "init", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "c": { // need to mark it as inline - "html": { - "tag": "code", - "attributes": ['id="<&>xml:id<;>"', 'class="code-inline tex2jax_ignore"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "ccoo", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "c", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "ellipsis": { // need to mark it as inline - "html": { - "tag": "span", - "attributes": ['id="<&>xml:id<;>"', 'class="abbrev"', 'contenteditable="false"'], - "data_editable": "abbr", - "pieces": [["(literal,…)", ""]] - }, - "pretext": { - "tag": "ellipsis", - "pieces": [] - }, - "source": { - } - }, - "etc": { // need to mark it as inline - "html": { - "tag": "span", - "attributes": ['id="<&>xml:id<;>"', 'class="abbrev"', 'contenteditable="false"'], - "pieces": [["(literal,etc)", ""]] - }, - "pretext": { - "tag": "etc", - "pieces": [] - }, - "source": { - } - }, - - "q": { // need to mark it as inline - "html": { - "tag": "q", - "attributes": ['id="<&>xml:id<;>"', 'class="quote"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "qqq", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "q", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "m": { // need to mark it as inline - "html": { - "tag_opening": "\\(", - "tag_closing": "\\)", - // "tag": "script", - // "attributes": ['type="math/tex"'], - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "m", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "me": { - "html": { - "tag": "div", - "attributes": ['id="<&>xml:id<;>"', 'class="displaymath process-math"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "42", - "pieces": [["{me_raw}", ""]] - }, - "pretext": { - "tag": "me", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "men": { - "html": { - "tag": "div", - "attributes": ['id="<&>xml:id<;>"', 'class="displaymath process-math"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "42", - "pieces": [["{me_raw}", ""]] - }, - "pretext": { - "tag": "men", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "md": { - "html": { - "tag": "div", - "attributes": ['id="<&>xml:id<;>"', 'class="displaymath process-math"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "42", - "pieces": [["{md_raw}", ""]] - }, - "pretext": { - "tag": "md", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "mdn": { - "html": { - "tag": "div", - "attributes": ['id="<&>xml:id<;>"', 'class="displaymath process-math"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "42", - "pieces": [["{me_raw}", ""]] - }, - "pretext": { - "tag": "mdn", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "me_raw": { - "html": { - "tag_opening": "\\begin{equation*}", - "tag_closing": "\\end{equation*}", - "pieces": [["content", ""]] - } - }, - "md_raw": { - "html": { - "tag_opening": "\\begin{align*}", - "tag_closing": "\\end{align*}", - "pieces": [["content", ""]] - } - }, -// check if mrow is actually used - "mrow": { - "html": { - "tag_opening": "", - "tag_closing": "\\cr", - "data_editable": "422", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "mrow", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - } - -} - -var environment_instances = { - "definition-like": ["definition", "conjecture", "axiom", "principle", "heuristic", "hypothesis", "assumption"], - "theorem-like": ["lemma", "proposition", "theorem", "corollary", "claim", "fact", "identity", "algorithm"], - "remark-like": ["remark", "warning", "note", "observation", "convention", "insight"], - "project-like-tasks": ["investigation", "exploration", "project"], - "project-like": ["exercise", "activity"] -} - -for (const [owner, instances] of Object.entries(environment_instances)) { - var data_editable_base = objectStructure[owner].html.data_editable; - var cssclass_base = objectStructure[owner].html.cssclass; - var source_pieces = objectStructure[owner].source.pieces; - var pretext_pieces = objectStructure[owner].pretext.pieces; - var pretext_attributes = (objectStructure[owner].pretext.attributes || []); - var source_attributes = (objectStructure[owner].source.attributes || []); - for (var j=0; j < instances.length; ++j) { - var this_tag = instances[j]; - objectStructure[this_tag] = { - "owner": owner, - "html": { - "tag": objectStructure[owner].html.tag, - "pieces": objectStructure[owner].html.pieces, - "attributes": objectStructure[owner].html.attributes, - "cssclass": cssclass_base + " " + this_tag, - "data_editable": data_editable_base + j.toString(), - "heading": objectStructure[owner].html.heading - }, - "pretext": { - "tag": this_tag, - "pieces": pretext_pieces, - "attributes": pretext_attributes - }, - "source": { - "tag": this_tag, - "pieces": source_pieces, - "attributes": source_attributes - } - } - } -} - -editorLog('objectStructure["exercise"]', objectStructure["exercise"]); - -var sidebyside_instances = { -"sbs": [["2 panels", "sbs2"], ["3 panels", "sbs3"], ["4 panels", "sbs4"]], -//"sbs2": [["full across XX", "sbs2_0_50_50_0"], ["gap but no margin", "sbs2_0_40_40_0"], ["spaced equally", "sbs2_5_40_40_5"]], -"sbs2": [["full across", "sbs_0_50_50_0"], ["gap but no margin", "sbs_0_45_45_0"], ["spaced equally", "sbs_5_40_40_5"]], -"sbs3": [["full across", "sbs_0_34_32_34_0"], ["gap but no margin", "sbs_0_28_28_38_0"], ["spaced equally", "sbs_5_25_26_25_5"]], -"sbs4": [["full across", "sbs_0_25_25_25_25_0"], ["gap but no margin", "sbs_0_20_20_20_20_0"], ["spaced equally", "sbs_3_18_18_18_18_3"]] -} - -Object.assign(objectStructure, sidebyside_instances); - -// shoudl we distinguish empty tags by format? -var always_empty_tags = ["img", "image", "xref"]; -// eventially xref will move to allowed_empty_tags -var allowed_empty_tags = ["div", "span", "p", "stack"]; -var tag_display = { /* the default is "block" */ - "inline": ["m", "em", "ellipsis", "span", "term", "dfn", "q", "c", "code", "alert", "nbsp", "xref", "idx", "h", "init"], - "title": ["title", "idx", "h1", "h2", "h3", "h4", "h5", "h6", "div", "usage", "image"], - "block-tight": [] // ["mp", "mrow"] -} - -inline_tags = tag_display["inline"]; -inline_math = ["m"]; -inline_abbrev = ["ellipsis", "ie", "eg", "etc"]; - -// contained_objects are a componnet of another object, not just buried in content -var contained_objects =["title", "statement", "caption", "captiontext", "proof", - "author", "journal", "volume", "number", "pages"]; - -function tag_type(tag) { - var this_type; - - if (["p", "ip", "mp", "fp"].includes(tag)) { this_type = "p" } - else if (["me", "men", "md", "mdn"].includes(tag)) { this_type = "md" } - else { this_type = tag } - - return this_type -} - -function process_value_from_source(fcn, piece, src) { - - editorLog(fcn, "process_value_from_source", piece, "in", src); - var content_raw = ""; - if (["literal", "codenumber", "period", "titleperiod", "space"].includes(fcn)) { - content_raw = piece; - } else { - if (piece in src) { - content_raw = src[piece] - } else { - if ("parent" in src) { - var parent_src = internalSource[src["parent"][0]]; - if (piece in parent_src) { - content_raw = parent_src[piece] - } else { - errorLog("Error: piece", piece, "fcn", fcn, "from", parent_src, "not in src or parent_src") - } - } else { - errorLog("at the top, or else there is an error") - } - } - } /* fcn != literal */ - -/* - if (typeof myVar == 'string') { - content_raw = content_raw.replace(/-standalone$/, "") // hack because we need alternate to sourcetag - } -*/ - if (fcn == "capitalize") { - content = content_raw.charAt(0).toUpperCase() + content_raw.slice(1); - } else if (fcn == "literal") { - editorLog("literally", piece); - // alert(piece); - content = piece - } else if (fcn == "space") { - content = content_raw + " " - } else if (fcn == "period") { - content = content_raw + "." - } else if (fcn == "comma") { - content = content_raw + "," - } else if (fcn == "titleperiod") { - if (src.title && !(/[!?]$/.test(src.title))) { - content = content_raw + "." - } - } else if (fcn == "percentlist") { - if (content_raw) { - content = content_raw.join("% ") + "%" - } else { - content = "MISSING" + "%" - } - } else if (fcn == "nthitem") { - - editorLog("calculating nthitem", piece, "from ", content_raw, "within", src); - var item_index = 0; // need to be its location among siblings - content = content_raw[item_index]; - } else if (fcn == "codenumber") { - editorLog(" CODENUMBER", src); - content = internalSource.root_data.number_base; - if (src["xml:id"] == top_level_id) { - // no need to add locan number - } else { - content += ".N" - } - } else { - content = content_raw - } - - return content -} - -$(".autopermalink > a").attr("tabindex", -1); - -var editable_objects = [["p", 99], ["ol", 97], ["ul", 96], ["article", 95], ["blockquote", 80], ["section", 66], - ["title", 20], ["caption", 890]]; -for(var j=0; j < editable_objects.length; ++j) { - $(editable_objects[j][0]).attr("data-editable", editable_objects[j][1]); - $(editable_objects[j][0]).attr("tabindex", -1); -} - -/* the code */ - -editorLog(" enabling edit"); - -user_level = "novice"; - -// we have to keep track of multiple consecutive carriage returns -this_char = ""; -prev_char = ""; -prev_prev_char = ""; - -// for resizing and layout changes -// clobal variables so we can adjust them dynamically -move_scale = 1; -magnify_scale = 1; - -final_added_object = ""; -previous_added_object = ""; - -// sometimes we have to prevent Tab from changing focus -this_focused_element = ""; -prev_focused_element = ""; -prev_prev_focused_element = ""; - -var menu_neutral_background = "#ddb"; -var menu_active_background = "#fdd"; - -var recent_editing_actions = []; // we unshift to this, so most recent edit is first. - // currently just a human-readable list -var ongoing_editing_actions = []; -var old_content = {}; // to hold old versions of changed materials - -// what will happen with internationalization? -var keyletters = ["KeyA", "KeyB", "KeyC", "KeyD", "KeyE", "KeyF", "KeyG", "KeyH", "KeyI", "KeyJ", "KeyK", "KeyL", "KeyM", "KeyN", "KeyO", "KeyP", "KeyQ", "KeyR", "KeyS", "KeyT", "KeyU", "KeyV", "KeyW", "KeyX", "KeyY", "KeyZ"]; - -var movement_location_options = []; -var movement_location = 0; -var first_move = true; // used when starting to move, because object no longer occupies its original location - -Storage.prototype.setObject = function(key, value) { -// this.setItem(key, JSON.stringify(value)); - this.setItem(key, JSON.stringify(value, function(key, val) { -// console.log("key", key, "value", value, "val", val); - return val.toFixed ? Number(val.toFixed(3)) : val; -})); -} - -Storage.prototype.getObject = function(key) { - var value = this.getItem(key); - return value && JSON.parse(value); -} - -function randomstring(len) { - if (!len) { len = 10 } - return "tMP" + (Math.random() + 1).toString(36).substring(2,len) -} - -function removeItemFromList(lis, value) { - var index = lis.indexOf(value); - if (index > -1) { - lis.splice(index, 1); - } - return lis; -} - -function rescale(width, max, margin_left, margin_right) { - var available_width = max - parseFloat(margin_left) - parseFloat(margin_right); - return width * 100 / available_width -} - -function spacemath_to_tex(text) { - thetext = text; - - thetext = thetext.replace(/ d([a-zA-Z])(\s|$)/, " \\,d$1$2"); - thetext = thetext.replace(/ *< */, " < "); - - return thetext -} - -function split_paragraphs(paragraph_content) { - - // does the textbox contain more than one paragraph? - var paragraph_content_list = paragraph_content.split("

    "); - editorLog("there were", paragraph_content_list.length, "paragraphs, but some may be empty"); - for (var j=0; j < paragraph_content_list.length; ++j) { - editorLog("paragraph", j, "begins", paragraph_content_list[j].substring(0,20)) - } - - var paragraph_content_list_trimmed = []; - - for (var j=0; j < paragraph_content_list.length; ++j) { - // probably each paragraph is wrapped in meaningless div tags - var this_paragraph_contents_raw = paragraph_content_list[j]; - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/<\/div>
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/
    /g, ""); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/<\/div>/g, ""); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/ /g, " "); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/ +
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.trim(); - if (!this_paragraph_contents_raw) { editorLog("empty paragraph") } - else { paragraph_content_list_trimmed.push(this_paragraph_contents_raw) } - editorLog("this_paragraph_contents_raw", this_paragraph_contents_raw); - } - - if (!paragraph_content_list_trimmed.length ) { - // empty, so insert it and delete it later - paragraph_content_list_trimmed = [""]; - } - - return paragraph_content_list_trimmed -} - -var submenu_options = { // revise as these are handled previously -"math-like": [["me"], ["chem"], ["code"]], -"image-like": [["image"], ["video"], ["audio"]], -"aside-like": [["aside"], ["historical"], ["biographical"]], -"list-like": [["itemized list", "list"], ["dictionary list", "dl"], ["table"]], -"layout-like": [["side-by-side panels", "sbs"], ["assemblage"], ["biographical aside"], ["titled paragraph", "paragraphs"]], -"section-like": ["section", "subsection", "paragraphs", "rq", "exercises"], -"sbs": [["2 panels", "sbs2"], ["3 panels", "sbs3"], ["4 panels", "sbs4"]], -"list-like": [["itemized list", "list"], ["dictionary list", "dl"], ["table"]], -"example-like": ["example", "question", "problem"] -} - -Object.assign(submenu_options, sidebyside_instances); - -Object.assign(submenu_options, environment_instances); // wrong because string not list - // or not wrong, if the code is more clever - -/* need to distinguish between the list of objects of a type, - and the list of types that can go in a location. - OR, is it okay that these are all in one list? - It seems to not be okay, because the "blockquote" entry - says that only a "p" can go in a blockquote. But blockquote - is an entry under "quoted". -*/ -base_menu_for = { -"section": [["paragraph", "p"], - ["display math/chemistry/code", "math-like", "c"], - ["list or table", "list-like"], - ["example-like", "example-like"], - ["definition-like", "definition-like"], - ["theorem-like", "theorem-like"], - ["remark-like"], - ["project/exercise-like", "project-like", "j"], - ["image/video/sound", "image-like", "v"], - ["blockquote/poem/music/etc", "quoted"], - ["aside-like", "aside-like", "d"], - ["interactives"], - ["proof", "proof-standalone", "o"], - ["layout-like"], - ["section-like"], - // ["Save", "save"], - ["PreTeXt source", "source"]], - // need to unify section with paragraphs (when sections are managed by the CAT) -"paragraphs": [["paragraph", "p"], - ["display math/chemistry/code", "math-like", "c"], - ["list or table", "list-like"], - ["example-like", "example-like"], - ["definition-like", "definition-like"], - ["theorem-like", "theorem-like"], - ["remark-like"], - ["project/exercise-like", "project-like", "j"], - ["image/video/sound", "image-like", "v"], - ["blockquote/poem/music/etc", "quoted"], - ["aside-like", "aside-like", "d"], - ["interactives"], - ["proof", "proof-standalone", "o"], - ["layout-like"], - // ["Save", "save"], - ["PreTeXt source", "source"]], -"blockquote": [["paragraph", "p"]], -// "ol": [["list item", "li"]], -"article": [["paragraph", "p"], // this is for theorem-like and similar - ["math/chemistry/code", "math-like", "c"], - ["list or table", "list-like"], - ["image/video/sound", "image-like", "v"]], -"li": [["new list item", "li", "i"], - ["paragraph", "p"], - ["list or table", "list-like"], - ["math/chemistry/code", "math-like", "c"], - ["image/video/sound", "image-like", "v"]], -"p": [["emphasis-like"], ["formula"], ["abbreviation"], ["symbol"], ["ref or link", "ref"]] -} -base_menu_for["proof"] = base_menu_for["article"]; -base_menu_for["page"] = base_menu_for["section"]; - - -// not currently used -function past_edits() { - - var the_past_edits = []; - if(recent_editing_actions.length) { - the_past_edits = recent_editing_actions.map(x => [x.join(" ")])} - else { the_past_edits = [["no chnages yet"]] } - - return the_past_edits -} - -// this should be created from inner_menu_for -editing_container_for = { "p": 1, "ip": 1, "mp": 1, "fp": 1, - "theorem-like": ["theorem", "proposition", "lemma", "corollary", "claim", "fact", "identity", "algorithm"], - "definition-like": ["definition", "conjecture", "axiom", "hypothesis", "principle", "heuristic", "assumption"], -"remark-like": ["remark", "warning", "note", "observation", "convention", "insight"], -"example-like": ["example", "question", "problem"], -"exercise-like": ["exercise"], -"ol": ["item"], -"li": [""], -"list": [""], -"image": [""], -"sbs2": [""], -"sbs3": [""], -"sbs4": [""], -"source": 1, -"proof-standalone": [""], //just a guess -"proof": [""] //just a guess -} - -function make_current_editing_tree_from_id(theid) { - -//current_editing keeps track of where we are in the tree. maybe need a better name? - - editorLog(" OOOOO make_current_editing_tree_from_id", theid); - editorLog(" which has internalSource", internalSource[theid]); - editorLog(" within", internalSource); - editorLog(" and the DOM object is", document.getElementById(theid)); - // the existing current_editing know the top level id -// var top_id = current_editing["tree"][0][0].id; - var top_id = top_level_id; - - // but now we need to start over and go bottom-up - current_editing = { - "level": -1, - "location": [], - "tree": [ ] - } - - var current_id = theid; - var current_element = document.getElementById(current_id); - console.log("current_id", current_id, "current_element", current_element); - var selectable_parent, current_element_siblings, selectable_parent_id; - var ct=0; - while (current_id != top_id && ct < 10) { - ct += 1; - editorLog("ct", ct); - editorLog("looking to match current_element", current_element, "until we hit", top_id); - selectable_parent = current_element.parentElement.closest("[data-editable]"); - current_element_siblings = next_editable_of(selectable_parent, "children"); - current_id = selectable_parent.id; - editorLog("current_id", current_id); - current_editing["tree"].unshift(current_element_siblings); - editorLog("looking for", current_element, "in", current_element_siblings); - for (var j=0; j < current_element_siblings.length; ++j) { - if (current_element == current_element_siblings[j]) { - current_editing["level"] += 1; - current_editing["location"].unshift(j); - editorLog("this is item", j); - break - } else { - editorLog(current_element == current_element_siblings[j], "aaa", current_element,"zzz", current_element_siblings[j]) - } - } - current_element = selectable_parent - } - current_editing["level"] += 1; - current_editing["location"].unshift(0); - current_editing["tree"].unshift([document.getElementById(top_id)]); - - editorLog("built current_editing after", ct, "levels"); - editorLog("current_editing[level]", current_editing["level"]); - editorLog("current_editing[location]", current_editing["location"]); - editorLog("current_editing[tree]", current_editing["tree"]) - - editorLog(" OOOOO done with make_current_editing_tree_from_id", theid, document.getElementById(theid)); - -} - -function standard_title_form(object_id) { - var the_object = internalSource[object_id]; - var the_title = the_object.title; - - var title_form = '' + the_title + ''; - - return title_form -} -function standard_caption_form(object_id) { - var the_object = internalSource[object_id]; - editorLog("editing caption of object_id", object_id, "which contains", the_object); - var the_caption = the_object.caption; - - var caption_form = '' + the_caption + ''; - - return caption_form -} - - -function menu_options_for(object_id, component_type, level) { - // this should be a function of the object, not just its tag - // p in li vs p child of section, for example - var menu_for; - - if (!component_type) { component_type = internalSource[object_id]["sourcetag"] } - editorLog("component_tag", component_type); - if (level == "base") { - menu_for = base_menu_for - } else if (level == "move-or-delete") { - editorLog("C0 menu options for", component_type); - var m_d_options; - var component_parent = internalSource[object_id]["parent"][0]; - var component_parent_tag = internalSource[component_parent]["sourcetag"]; - if (component_type == "p" && component_parent_tag == "li") { - m_d_options = [ - ["move-local-p", "Move these words within this page"], - ["move-local-li", "Move this list item within this page"], - ["move-global", "Move this another page (not implemented yet)"], - ["delete", "Delete"] // does it matter whether there are other p in this li? - ]; - } else if(tag_type(component_type) == "p") { - m_d_options = [ - ["move-local-p", "Move this text within this page"], - ["move-global", "Move to another page (not implemented yet)"], - ["delete", "Delete"] - ]; - } else { - m_d_options = [ - ["move-local", "Move within this page"], - ["move-global", "Move to another page (not implemented yet)"], - ["delete", "Delete"] - ]; - } - var this_menu = ""; - for (var i=0; i < m_d_options.length; ++i) { - this_menu += '
  • ' + this_item_shortcut + ''); - } - } else { - this_menu += 'data-jump="' + this_item_name.charAt(0) + '"'; - } - if (i==0) { this_menu += ' id="choose_current"'} - this_menu += '>'; - - if (this_item_name.match(/^[a-z]/i)) { - first_character = this_item_name.charAt(0); - this_item_name = this_item_name.replace(first_character, "" + first_character + ""); - } - - this_menu += this_item_name - // little right triangle if there is a submenu - // if (this_item_label in inner_menu_for()) { this_menu += '
    ▻
    ' } - if (this_item_label in submenu_options) { this_menu += '
    ▻
    ' } - this_menu += '
  • '; - } - - return this_menu -} - -function top_menu_options_for(this_obj) { - editorLog("top menu options for aa", this_obj); - var this_id = this_obj.id; - -// maybe the "classList" in this function shoudl instead look at the internalSource? - - var this_list = ""; - - if (this_obj.classList.contains("heading")) { - var this_obj_parent = this_obj.parentElement; - editorLog("heading options for bbb", this_obj_parent); - var this_obj_parent_id = this_obj_parent.id; - var this_obj_parent_source = internalSource[this_obj_parent_id]; - var this_obj_environment = this_obj_parent_source["sourcetag"]; - - editorLog("this_obj_environment", this_obj_environment); - - this_list = '
  • Change the title
  • '; - this_list += '
  • Change "' + this_obj_environment + '" to
    ▻
  • '; - } else { - var this_object_type = this_obj.tagName; // needs to examine other attributes and then look up a reasonable name -//consolidate this redundancy - this_obj_id = this_obj.id; - if (!this_obj_id) { - this_obj_id=this_obj.getAttribute("data-parent_id") - editorLog("now has id", this_obj_id); - } - this_obj_source = internalSource[this_obj_id]; - editorLog("this_obj_source", this_obj_source); - editorLog("this_obj", this_obj, "classList", this_obj.classList, "T/F", this_obj.classList.contains("image-box")); - this_obj_environment = this_obj_source["sourcetag"]; - if (this_object_type == "P" || this_obj.classList.contains("displaymath")) { - this_list = '
  • Edit ' + this_obj_environment + '
  • '; - var editable_children = next_editable_of(this_obj, "children"); - editorLog("editable_children", editable_children); - if (editable_children.length && !(this_object_type == "P")) { - this_list += '
  • Enter ' + this_obj_environment + '
  • '; - } - if (editable_children.length > 2 && (this_object_type == "SECTION")) { - this_list += '
  • Go to end of ' + this_obj_environment + '
  • '; - } - } else if (this_obj.classList.contains("image-box")) { - editorLog("found an image-box"); - this_list = '
  • Modify layout
    ▻
  • '; - } else if (this_obj.classList.contains("sbspanel")) { - this_list = '
  • Modify layout
    ▻
  • '; - } else { - this_list += '
  • Enter ' + this_obj_environment + '
  • '; - if (this_object_type == "SECTION") { - this_list += '
  • Go to end of ' + this_obj_environment + '
  • '; - } - } - - if (this_obj.classList.contains("sbspanel")) { - this_list += '
  • Insert in panel
    ▻
  • '; - } - - if (this_obj.classList.contains("project-like")) { - this_list += '
  • Add a task
  • '; - } - - if (this_id != top_level_id) { - this_list += '
  • Insert before
    ▻
  • '; - this_list += '
  • Insert after
    ▻
  • '; - - this_list += '
  • Move or delete
    ▻
  • '; - } - this_list += '
  • Metadata
    ▻
  • '; - if (this_id != top_level_id) { - this_list += '
  • Revert
    ▻
  • '; - } - if (previous_editing() && this_id == top_level_id) { - this_list += '
  • Resume previous editing
  • '; - } - this_list += '
  • Save
  • '; - this_list += '
  • Stop editing
  • '; - } - return this_list -} - -function edit_menu_from_current_editing(motion) { - // obviously we need to think a bit about current_editing and how it is used - var object_of_interest = current_editing["tree"][ current_editing["level"] ][ current_editing["location"][ current_editing["level"] ] ]; - edit_menu_for(object_of_interest, motion); -} - -function edit_menu_for(this_obj_or_id, motion) { - editorLog("make edit menu", motion, "for", this_obj_or_id); - - // delete the old menu, if it exists - if (document.getElementById('edit_menu_holder')) { - var current_menu = document.getElementById('edit_menu_holder'); - editorLog("current_menu", current_menu); - editorLog("this_choice", document.getElementById('enter_choice')); - if (this_choice = document.getElementById('enter_choice')) { - if (this_choice.getAttribute("data-location") == "stay") { - current_menu.previousSibling.classList.remove("may_leave") - } else { - current_menu.parentElement.classList.remove("may_select"); - current_menu.parentElement.classList.remove("may_enter"); - } - } - current_menu.parentElement.classList.remove("may_select"); - current_menu.parentElement.classList.remove("may_enter"); - current_menu.remove(); - } - - if (!this_obj_or_id) { - errorLog("error: empty this_obj_or_id", motion); - return "" - } else { - editorLog("this_obj_or_id", this_obj_or_id, "string?", typeof this_obj_or_id === 'string'); - editorLog("which has parent", this_obj_or_id.parentElement) - } - - console.log("this_obj_or_id", this_obj_or_id, typeof this_obj_or_id); - if (typeof this_obj_or_id === 'string') { - this_obj = document.getElementById(this_obj_or_id) - } else { - this_obj = this_obj_or_id - } - console.log("this_obj", this_obj); - var this_id = this_obj.id; -// this_obj = document.getElementById(this_obj); // because is is an id? Maybe need cases here - - if (motion == "entering") { - menu_location = "afterbegin"; - this_obj.classList.remove("may_leave"); - if (next_editable_of(this_obj, "children").length && !(this_obj.tagName == "P")) { - this_obj.classList.add("may_enter"); - } else { - this_obj.classList.add("may_select"); - } - if (inline_tags.includes(this_obj.tagName.toLowerCase())) { - this_obj.classList.add("inline"); - } - } else { menu_location = "afterend"; - this_obj.classList.remove("may_select"); - this_obj.classList.remove("may_enter"); - this_obj.classList.add("may_leave"); - editorLog("added may_leave to", this_obj) - } // when motion is 'leaving' - - var edit_menu_holder = document.createElement('div'); - edit_menu_holder.setAttribute('id', 'edit_menu_holder'); - edit_menu_holder.setAttribute('class', 'edit_menu_holder'); - edit_menu_holder.setAttribute('tabindex', '-1'); - editorLog("adding menu for", this_obj_or_id, "menu_location", menu_location); - editorLog("which has tag", this_obj.tagName); - editorLog("does", this_obj.classList, "include type", this_obj.classList.contains("type")); - - this_obj.insertAdjacentElement(menu_location, edit_menu_holder); - editorLog("added edit_menu_holder", document.getElementById("edit_menu_holder"), motion); - - var edit_option = document.createElement('span'); - edit_option.setAttribute('id', 'enter_choice'); - - if (motion == "entering") { - editorLog("inline_tags", inline_tags, "tag", this_obj.tagName.toLowerCase()); - editorLog("next_editable_of(this_obj, children)", next_editable_of(this_obj, "children")); - if (false && inline_tags.includes(this_obj.tagName.toLowerCase())) { - edit_option.innerHTML = "change this?"; - edit_option.setAttribute('data-location', 'inline'); - } else if (this_obj.classList.contains("type")) { - // e.g., changing "proposition" to "theorem" - // need to code this better: over-writing edit_option - edit_option = document.createElement('ol'); - edit_option.setAttribute('id', 'edit_menu'); - edit_option.setAttribute('class', 'edit_menu'); - this_obj_parent_id = this_obj.parentElement.parentElement.id; - this_obj_environment = internalSource[this_obj_parent_id]["sourcetag"]; - edit_option.innerHTML = '
  • Change "' + this_obj_environment + '" to
    ▻
  • '; - edit_option.setAttribute('data-location', 'inline'); - } else if (this_obj.classList.contains("image-box")) { - edit_option.innerHTML = "modify this image layout, or add near here?"; - } else if (this_obj.classList.contains("sbspanel")) { - edit_option.innerHTML = "modify this panel layout, or change panel contents?"; - } else if (this_obj.classList.contains("title") || this_obj.classList.contains("caption")) { - var this_contained_type = "title"; - if (this_obj.classList.contains("caption")) { this_contained_type = "caption" } - edit_option = document.createElement('ol'); - edit_option.setAttribute('id', 'edit_menu'); - edit_option.setAttribute('class', 'edit_menu'); - editorLog("this_obj", this_obj); - editorLog("this_obj.innerHTML", this_obj.innerHTML); - editorLog("menu only?", this_obj.innerHTML == '
    '); - this_obj_parent_id = this_obj.parentElement.parentElement.id; - this_obj_environment = internalSource[this_obj_parent_id]["sourcetag"]; - if (this_obj.innerHTML == '
    ') { - edit_option.innerHTML = '
  • Add a ' + this_contained_type + '
  • '; - } else { - edit_option.innerHTML = '
  • Change ' + this_contained_type + '
  • '; - } - edit_option.setAttribute('data-location', 'inline'); - } else if ((this_obj.classList.contains("placeholder") && (this_obj.classList.contains("hint") || - this_obj.classList.contains("answer") || - this_obj.classList.contains("solution") || - this_obj.classList.contains("proof")) ) ) { - var theverb = "add" - var thenoun = this_obj.getAttribute("data-HAS"); - edit_option.setAttribute('id', 'choose_current'); - edit_option.setAttribute('data-env', thenoun); - edit_option.setAttribute('data-parent_id', this_obj.getAttribute("data-parent_id")); - edit_option.innerHTML = "" + theverb + "" + " " + thenoun; - } else if (this_obj.classList.contains('workspace')) { - edit_option.setAttribute('id', 'choose_current'); - edit_option.setAttribute('data-env', 'workspace'); - edit_option.setAttribute('data-action', 'modify'); - edit_option.setAttribute('data-parent_id', this_obj.getAttribute("data-parent_id")); - - edit_option.innerHTML = "" + "adjust" + "" + " " + "workspace"; - } else { - if (next_editable_of(this_obj, "children").length && this_obj.tagName != "P") { - editorLog("this_obj", this_obj); - if (this_id == top_level_id) { - edit_option.innerHTML = "enter this " + internalSource[this_obj.id]["sourcetag"] + "?"; - } else { - edit_option.innerHTML = "enter this " + internalSource[this_obj.id]["sourcetag"] + ", or add near here?"; - } - } else { - edit_option.innerHTML = "edit this passage, or add near here?"; - } - edit_option.setAttribute('data-location', 'next'); - } - } else { - edit_option.setAttribute('data-location', 'stay'); - edit_option.innerHTML = "continue editing this " + internalSource[this_obj.id]["sourcetag"]; - } - editorLog("edit_option", edit_option); - document.getElementById("edit_menu_holder").insertAdjacentElement("afterbegin", edit_option); - document.getElementById('edit_menu_holder').focus(); -} - -function next_editable_of(obj, relationship) { - var next_to_edit; - editorLog("finding", relationship, "editable of", obj); - if (relationship == "children") { - next_to_edit = $(obj).find(' > [data-editable], > .sidebyside > .sbsrow > [data-editable], > li > [data-editable], > .heading > [data-editable], > .hint > [data-editable], > .answer > [data-editable]') - } else if (relationship == "outer-block") { // for example, a direct child of a section - next_to_edit = $(obj).find(' > [data-editable]') - } else if (relationship == "inner-block") { // typically a paragraph - next_to_edit = $(obj).find('section > [data-editable], [data-editable="99"], [data-editable="42"]') - } else if (relationship == "li-only") { // typically a paragraph - next_to_edit = $(obj).find('li') - } else { - editorLog("unimplemented next_editable_of") - } - - editorLog("next_to_edit", next_to_edit); - return next_to_edit -} - -function create_new_internal_object(new_tag, new_id, parent_description) { - - var new_source = {"xml:id": new_id, "sourcetag": new_tag, "parent": parent_description, "title": ""} - - editorLog("create new internal object", new_tag, "new_id", new_id, "parent_description", parent_description); - editorLog("within", internalSource[parent_description[0]]); - if (new_tag.startsWith("sbs")) { // creating an sbs, which contains one sbsrow, which contains several sbspanels - new_source.sourcetag = "sidebyside"; - var sbs_layout = new_tag.split("_"); - var [margin_left, margin_right] = [sbs_layout[1], sbs_layout[sbs_layout.length - 1]]; - editorLog("sbs side margins", margin_left, "jj", margin_right); - new_source.marginleft = margin_left; - new_source.marginright = margin_right; - - var col_content = ""; - var widths = []; - for (var j=2; j <= sbs_layout.length - 2; ++j) { - widths.push(sbs_layout[j]); - var new_col_id = randomstring(); - col_content += "<&>" + new_col_id + "<;>"; - internalSource[new_col_id] = {"xml:id": new_col_id, "sourcetag": "sbspanel", - "content": "", "parent": [new_id, "content"]} - } - new_source.widths = widths; - new_source.content = col_content; - - editorLog("new sbs", new_source); - - } else { - - editorLog("new_tag", new_tag); - var thisstructure = objectStructure[new_tag]; - var thisownersourcestructure = {}; - if (!thisstructure) { errorLog(new_tag + " not implemented yet"); return "" } - if ("owner" in thisstructure) { - var thisownerstructure = objectStructure[thisstructure.owner]; - thisownersourcestructure = thisownerstructure.source; - } - var thissourcestructure = Object.assign({},thisownersourcestructure, thisstructure.source); - - editorLog("thissourcestructure", thissourcestructure); - - if ("attributes" in thissourcestructure) { - these_source_attributes = thissourcestructure.attributes; - for (var j=0; j < these_source_attributes.length; ++j) { - editorLog("adding", j, "attribute", these_source_attributes[j]); - new_source[these_source_attributes[j][0]] = these_source_attributes[j][1] - } - } - -/* here need to also use the owner structure */ - var these_source_pieces = thissourcestructure.pieces; - for (var j=0; j < these_source_pieces.length; ++j) { - editorLog("adding a piece", these_source_pieces[j]); - var [this_piece, this_piece_contains] = these_source_pieces[j]; - - if (this_piece_contains) { - var new_child_id = randomstring(); - new_source[this_piece] = "<&>" + new_child_id + "<;>"; - create_new_internal_object(this_piece_contains, new_child_id, [new_id, this_piece]); - } else { - new_source[this_piece] = "" - } - } - } - - editorLog("made the new_source", new_source); - - internalSource[new_id] = new_source; - - editorLog("parent_description", parent_description, "new_tag", new_tag, "new_id", new_id); - editorLog("internalSource", internalSource); - if (new_tag == "list") { - // do nothing, because it is the child "li" which we are really creating - // chack that: maybe do add, if the stack is in the proper order - } else if (tag_type(new_tag) == "p"){ - // p is the default, so no need to keep track of it - } else if (new_tag == "source"){ - // not really a tag - } else if (new_tag.startsWith("sbs")){ - ongoing_editing_actions.push(["new", "sbs", new_id]); - } else { - ongoing_editing_actions.push(["new", new_tag, new_id]); - } - return new_tag -} - -function show_source(sibling, relative_placement) { -// var current_source = document.getElementById("newpretextsource"); -// if (current_source) { editorLog("curr sou", current_source); alert("curr sour"); current_source.remove() } - var edit_placeholder = document.createElement("span"); - edit_placeholder.setAttribute('id', "newsource"); - sibling.insertAdjacentElement(relative_placement, edit_placeholder); - - editorLog("just added", edit_placeholder); - - var the_pretext_source = output_from_id("", top_level_id, "pretext"); - - the_pretext_source = the_pretext_source.replace(/\n\n/g, '\n'); - - // remove temporary ids - the_pretext_source = the_pretext_source.replace(/ xml:id="tMP[0-9a-z]+"/g, ''); - the_pretext_source = the_pretext_source.replace(/^ +$/mg, ''); // m = multiline - -// var the_old_source = document.getElementById("newsource"); -// if (the_old_source) { the_old_source.remove() } - edit_placeholder.insertAdjacentHTML('afterend', ''); -} - -// unify with show_source, and maybe make the clean up part of output_from_id -function save_source() { -// var current_source = document.getElementById("newpretextsource"); -// if (current_source) { editorLog("curr sou", current_source); alert("curr sour"); current_source.remove() } - editorLog(" QQ saving"); - - var the_pretext_source = output_from_id("", top_level_id, "pretext"); - - the_pretext_source = the_pretext_source.replace(/\n\n/g, '\n'); - // remove temporary ids - the_pretext_source = the_pretext_source.replace(/ xml:id="tMP[0-9a-z]+"/g, ''); - the_pretext_source = the_pretext_source.replace(/^ +$/mg, ''); // m = multiline - - editorLog(" RR saving", top_level_id, "which begins", the_pretext_source.substring(0,50)); - parent.save_file(top_level_id, the_pretext_source) -} - -function create_object_to_edit(new_tag, new_objects_sibling, relative_placement) { - - // when relative_placement is "afterbegin", the new_objects_sibling is actually its parent - editorLog("create object to edit", new_tag, new_objects_sibling, relative_placement); - // first insert a placeholder to edit-in-place - var new_id = randomstring(); - recent_editing_actions.push(["new", new_tag, new_id]); - // we won;t need all of these, so re-think when these are created - var edit_placeholder = document.createElement("span"); - edit_placeholder.setAttribute('id', new_id); - - // when adding an li, you are actually focused on somethign inside an li - // but, maybe that distinction shoud be mede before calling create object to edit ? - if (new_tag == "li") { new_objects_sibling = new_objects_sibling.parentElement } - - var sibling_id, parent_description, object_neighbor; - - if (["hint", "answer", "solution", "proof"].includes(new_tag)) { // this is only for the case that a solution does not already exist -// create_new - - sibling_id = new_objects_sibling.parentElement.id; - parent_description = [sibling_id, new_tag] - - editorLog(new_tag, "parent_description", parent_description); - object_neighbor = "" ; // will not be used - - } else if(new_objects_sibling.classList.contains("sbspanel")) { //bad hack! use internalCOntents! - sibling_id = new_objects_sibling.id; - editorLog("special case for empty sbspanel",sibling_id); - // alert("special sbspanel case"); - parent_description = [sibling_id, "content"] - object_neighbor = "" ; // will not be used??? - } else { - // and describe where it goes - editorLog("new_objects_sibling",new_objects_sibling); - sibling_id = new_objects_sibling.id; - parent_description = internalSource[sibling_id]["parent"]; - object_neighbor = new RegExp('(<&>' + sibling_id + '<;>)'); - } - - if (relative_placement == "afterbegin" && new_tag != "image") { // when adding to a sbs panel - // redo the condition so that it explicitly uses sbs - // redundant with the "special case" above? - // parent_description = [new_id, "content"]; - } - var object_neighbor = new RegExp('(<&>' + sibling_id + '<;>)'); - if (new_tag == "task" && !(new_objects_sibling.classList.contains("task"))) { - // when task is being added by selecting from the parent exercise - relative_placement = "atend"; - parent_description = [sibling_id, "tasks"]; - } - if (["hint", "answer", "solution", "proof"].includes(new_tag)) { // this is only for the case that a solution does not already exist - relative_placement = "replace"; - } - editorLog(new_tag, "parent_description", parent_description); - - // then create the empty internalSource for the new object - var new_obj = create_new_internal_object(new_tag, new_id, parent_description); - if (!new_obj) { return "" } - - // we have made the new object, but we still have to put it in the correct location - - var the_current_arrangement = internalSource[parent_description[0]][parent_description[1]]; - editorLog(" the_current_arrangement", the_current_arrangement); - editorLog(" from parent_description", parent_description, "internalSource[parent_description[0]]", internalSource[parent_description[0]]); - editorLog(" current_editing", current_editing); - -// maybe the changes to current_editing is different for lists? - - var neighbor_with_new = ''; - var current_level = current_editing["level"]; - var current_location = current_editing["location"][current_level]; - editorLog(" UUU current_editing", current_editing["level"], current_editing["location"].length, current_editing["tree"].length, current_editing["tree"][current_editing["level"]]) - if (relative_placement == "beforebegin" || relative_placement == "afterbegin") { - neighbor_with_new = '<&>' + new_id + '<;>' + '$1'; - } - else if (relative_placement == "afterend" || relative_placement == "beforeend"){ - neighbor_with_new = '$1' + '<&>' + new_id + '<;>' - current_location += 1 - } - editorLog("makking new_arrangement from", object_neighbor, "by", neighbor_with_new); - - if (relative_placement == "atend" || relative_placement == "replace" ) { - // this is not quire gight, but it works for hint/answer/solution - new_arrangement = the_current_arrangement + '<&>' + new_id + '<;>'; - } else if(the_current_arrangement) { - new_arrangement = the_current_arrangement.replace(object_neighbor, neighbor_with_new); - } else { - new_arrangement = '<&>' + new_id + '<;>'; - } - editorLog("which became", new_arrangement); -// alert("here"); - internalSource[parent_description[0]][parent_description[1]] = new_arrangement; - if (new_tag == "list") { - // current_editing["level"] += 1; - // current_editing["location"].push(0); - // current_editing["tree"].push([document.getElementById(new_p_id)]) - } else { - current_editing["location"][current_level] = current_location; - } - editorLog(" new_arrangement", new_arrangement); - editorLog("tried to insert", new_id, "next to", sibling_id, "in", the_current_arrangement) - editorLog(" updated current_editing", current_editing); - editorLog(" VVV current_editing", current_editing["level"], current_editing["location"].length, current_editing["tree"].length, current_editing["tree"][current_editing["level"]]) - editorLog("relative_placement", relative_placement, "edit_placeholder", edit_placeholder); - - if (relative_placement == "atend") { - new_objects_sibling.insertAdjacentElement("beforeend", edit_placeholder); - } else if (relative_placement == "replace") { - new_objects_sibling.replaceWith(edit_placeholder); - } else { - new_objects_sibling.insertAdjacentElement(relative_placement, edit_placeholder); - } - - return edit_placeholder -} - -function edit_in_place(obj, oldornew) { - // currentlt old_or_new is onlu use as "new" for a new li, so that we know - // to immediately make a new li to edit - // previous comment probebly wrong/out of date - - var thisID; - editorLog("in edit in place", obj); - if (thisID = obj.getAttribute("id")) { - editorLog("will edit in place id", thisID, "which is", obj); - thisTagName = obj.tagName.toLowerCase(); - } else { // editing somethign without an id, so probably is a title or caption - if (obj.classList.contains("heading")) { - editorLog("changing a heading"); - editorLog("except we don;t know how to do that") - } else { - errorLog("error: I don't know how to edit", obj) - } - return "" - } - - // this only works for paragraphs, - // which may be right, because existing content is mostly titles and paragraphs - if ( internalSource[thisID] ) { - var new_tag = internalSource[thisID]["sourcetag"]; - var new_id = thisID; // track down why new_id is in the code - editorLog("new_tag is", new_tag, "from thisID", thisID, "from", internalSource[thisID]); - if (tag_type(new_tag) == "p" || tag_type(new_tag) == "md") { // make into a category? - var this_content_container = document.createElement('div'); - this_content_container.setAttribute('id', "actively_editing"); - this_content_container.setAttribute('data-age', oldornew); - editorLog("thing with thisID", thisID, "is",document.getElementById(thisID)); - $("#" + thisID).replaceWith(this_content_container); - - var idOfEditText = 'editing' + '_input_text'; - var paragraph_editable = document.createElement('div'); - paragraph_editable.setAttribute('contenteditable', 'true'); - if (tag_type(new_tag) == "md") { - paragraph_editable.setAttribute('class', 'text_source displaymath_input'); - } else { - paragraph_editable.setAttribute('class', 'text_source paragraph_input'); - } - paragraph_editable.setAttribute('id', idOfEditText); - paragraph_editable.setAttribute('data-source_id', thisID); - paragraph_editable.setAttribute('data-parent_id', internalSource[thisID]["parent"][0]); - paragraph_editable.setAttribute('data-parent_component', internalSource[thisID]["parent"][1]); - - document.getElementById('actively_editing').insertAdjacentElement("afterbegin", paragraph_editable); - - editorLog("setting", $('#' + idOfEditText), "to have contents", internalSource[thisID]["content"]); - -// from https://stackoverflow.com/questions/21257688/paste-rich-text-into-content-editable-div-and-only-keep-bold-and-italics-formatt - -// figure out better how to do this as needed. - $('[contenteditable]').on('paste',function(e) { - e.preventDefault(); - var text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('Paste something..'); - document.execCommand('insertText', false, text); - }); - the_contents = internalSource[thisID]["content"]; - the_contents = expand_condensed_source_html(the_contents, "edit"); - the_contents = the_contents.replace(/\\cr/g, "

    "); - $('#' + idOfEditText).html(the_contents); - document.getElementById(idOfEditText).focus(); - editorLog("made edit box for", thisID); - editorLog("which is", document.getElementById(idOfEditText)); - editorLog("Whth content CC" + document.getElementById(idOfEditText).innerHTML + "DD"); - editorLog("Whth content EE" + document.getElementById(idOfEditText).innerText + "FF"); - editorLog("Whth content GG" + document.getElementById(idOfEditText).textContent + "HH"); - this_char = ""; - prev_char = ""; - - } else if (new_tag == "image") { - var this_content_container = document.createElement('div'); - this_content_container.setAttribute('id', "actively_editing"); - this_content_container.setAttribute('data-age', oldornew); - this_content_container.setAttribute('style', "width:50%; margin-left:auto; margin-right: auto; padding: 2em 3em 3em 3em; background: #fed"); - $("#" + thisID).replaceWith(this_content_container); - - var idOfEditText = 'editing' + '_input_image'; - var image_editable = document.createElement('div'); - image_editable.setAttribute('contenteditable', 'true'); - image_editable.setAttribute('class', 'image_source'); - image_editable.setAttribute('id', idOfEditText); - image_editable.setAttribute('style', "background: #fff"); - image_editable.setAttribute('data-source_id', thisID); - image_editable.setAttribute('data-parent_id', internalSource[thisID]["parent"][0]); - image_editable.setAttribute('data-parent_component', internalSource[thisID]["parent"][1]); - - document.getElementById('actively_editing').insertAdjacentElement("afterbegin", image_editable); - - var edit_instructions = document.createElement('span'); - edit_instructions.setAttribute('style', "font-size: 90%"); - edit_instructions.innerHTML = "URL of image:" - document.getElementById('actively_editing').insertAdjacentElement("afterbegin", edit_instructions); - - document.getElementById(idOfEditText).focus(); - editorLog("made edit box for", thisID); - editorLog("which is", document.getElementById(idOfEditText)); - editorLog("Whth content CC" + document.getElementById(idOfEditText).innerHTML + "DD"); - editorLog("Whth content EE" + document.getElementById(idOfEditText).innerText + "FF"); - editorLog("Whth content GG" + document.getElementById(idOfEditText).textContent + "HH"); - this_char = ""; - prev_char = ""; - - } else { - - editorLog(new_tag, "create the object, then edit p in place", obj); - - var this_object = html_from_internal_id(new_id, ""); - var where_it_goes = document.getElementById(thisID); - where_it_goes.insertAdjacentHTML('afterend', this_object[0]); - where_it_goes.remove(); - var where_it_is = document.getElementById(thisID); - - - editorLog("added this_object", this_object); - editorLog("where it is", where_it_is); - - var this_source = internalSource[thisID]; - if (this_source.sourcetag == "sidebyside") { // generalize to container was added - editorLog("added an sbs", document.getElementById(thisID)); - editorLog("its .firstChild", document.getElementById(thisID).firstElementChild); - editorLog("its .firstChild.firstchild", document.getElementById(thisID).firstElementChild.firstElementChild); - var first_panel_id = document.getElementById(thisID).firstElementChild.firstElementChild.id; - editorLog("first_panel_id", first_panel_id, document.getElementById(first_panel_id)); - make_current_editing_tree_from_id(first_panel_id); - edit_menu_from_current_editing("entering"); - } else { - var empty_p_child = $(where_it_is).find("p"); - if (empty_p_child[0]) { - editorLog("found the empty p", empty_p_child); - editorLog("found the empty p[0]", empty_p_child[0]); - edit_in_place(empty_p_child[0], "new"); - } else { - errorLog("error: no empty p to edit") - } - } - } - - } else { - editorLog("Error: edit in place of object that is not already known", obj); - editorLog("What is known:", internalSource) - } -} - -function resume_editing() { - internalSource = previous_editing(); - replace_by_id(internalSource["root_data"]["id"], "html"); - edit_menu_for(top_level_id, "entering"); - console.log("editing resumed"); -} - -function replace_by_id(theid, format) { - - if (format != "html") { return "" } - - var this_object_new = output_from_id("",theid, format); - - console.log("id", theid); -// GO BACK AND REVISIT THE NEXT 3 LINES -// document.getElementById(theid).setAttribute("id", "delete_me"); -// document.getElementById("delete_me").insertAdjacentHTML('beforebegin', this_object_new); -// document.getElementById("delete_me").remove(); - -// need to also work with MJ3 -// MathJax.Hub.Queue(['Typeset', MathJax.Hub, document.getElementById(theid)]); - console.log("MathJax on", theid, document.getElementById(theid)); -// MathJax.typesetPromise(document.getElementById(theid)); - MathJax.typesetPromise(); - - console.log("adjusting workspace"); -window.setTimeout(adjustWorkspace, 1000); -} - -// temporary: need to unify img and sbs layout -function modify_by_id(theid, modifier) { - editorLog("modifying by id", theid); - if (internalSource[theid]["sourcetag"] == "sbspanel") { - modify_by_id_sbs(theid, modifier) - } else if (environment_instances["project-like"].includes(internalSource[theid]["sourcetag"]) - || internalSource[theid]["sourcetag"] == "task") { - modify_by_id_workspace(theid, modifier) - } else { - modify_by_id_image(theid, modifier) - } - save_edits() -} - -function modify_by_id_workspace(theid, modifier) { - - var the_height = internalSource[theid]["workspace"]; - editorLog("the_height", the_height, "from", internalSource[theid]); - -//modify: enlarge, shrink, enlargeslightly, shrinkslightly, done - - the_height = parseInt(the_height); - editorLog('the_height, ', the_height); - - if (modifier == "enlarge") { the_height += 10 } - else if (modifier == "shrink") { the_height -= 10 } - else if (modifier == "enlargeslightly") { the_height += 1 } - else if (modifier == "shrinkslightly") { the_height -= 1 } - - if (the_height < 0) { the_height = 0 } - - internalSource[theid]["workspace"] = the_height; - editorLog("the_height is now", the_height); - - var this_workspace = document.getElementById(theid).querySelector(".workspace"); - this_workspace.setAttribute("style", "height:" + the_height*10 + "px"); - this_workspace.setAttribute("data-space", the_height); -} - -function modify_by_id_image(theid, modifier) { - - var width = internalSource[theid]["width"]; - var marginleft = internalSource[theid]["marginleft"]; - var marginright = internalSource[theid]["marginright"]; - editorLog('width, , marginright, , marginleft', width, "mr", marginright, "ml", marginleft); - width = parseInt(width); - marginright = parseInt(marginright); - marginleft = parseInt(marginleft); - - var scale_direction = 1; - var moving_direction = 1; - if (modifier == "shrink") { scale_direction = -1 } - else if (modifier == "left") { moving_direction = -1 } - if ("enlarge shrink".includes(modifier)) { - if ((width >= 100 && scale_direction == 1) || (width <= 0 && scale_direction == -1)) { - editorLog("can't go above 100 or below 0"); - return - } else { - width += 2*scale_direction*magnify_scale; - } - if (marginleft > 0 && marginright > 0) { - marginleft += -1*scale_direction*magnify_scale; - marginright += -1*scale_direction*magnify_scale; - } else if (marginleft > 0) { - marginleft += -2*scale_direction*magnify_scale; - } else if (marginright > 0) { - marginright += -2*scale_direction*magnify_scale; - } else if (scale_direction < 0) { // applies when we shrink a 100 width image - marginleft += -1*scale_direction*magnify_scale; - marginright += -1*scale_direction*magnify_scale; - } else { - // do nothing: this is a placeholder which is reached when both margins are 0 - editorLog("already have no margins, width is", width); - } - } else if ("left right".includes(modifier)) { - editorLog("marginleft*moving_direction", marginleft*moving_direction, "marginright*moving_direction", marginright*moving_direction); - if ((marginleft > 0 && marginright > 0) || (marginright*moving_direction > 0) || (marginleft*moving_direction < 0)) { - marginleft += moving_direction*move_scale; - marginright += -1*moving_direction*move_scale; - } else { - // do nothing: this is a placeholder which is reached when both margins are 0 - // we choose to prioritize scale, so a 100% image cannot be shifted - editorLog("already at 100%, width is", width); - } - } - - var the_new_sizes = "width: " + width + "%;"; - the_new_sizes += "margin-right: " + marginright + "%;"; - the_new_sizes += "margin-left: " + marginleft + "%;"; - - internalSource[theid]["width"] = width; - internalSource[theid]["marginleft"] = marginleft; - internalSource[theid]["marginright"] = marginright; - - document.getElementById(theid).setAttribute("style", the_new_sizes); -} - -function modify_by_id_sbs(theid, modifier) { - - var this_panel_source = internalSource[theid]; -// var this_width = this_panel_source["width"]; - var this_sbs_id = this_panel_source["parent"][0]; - var this_sbs_source = internalSource[this_sbs_id]; - editorLog("this_sbs_source", this_sbs_source); - var marginleft = parseInt(this_sbs_source["marginleft"]); - var marginright = parseInt(this_sbs_source["marginright"]); - var these_siblings = this_sbs_source["content"]; - these_siblings = these_siblings.replace(/^\s*<&>\s*/, ""); - these_siblings = these_siblings.replace(/\s*<;>\s*$/, ""); - these_siblings = these_siblings.replace(/>\s*<"); - editorLog("these_siblings", these_siblings); - var these_siblings_list = these_siblings.split("<;><&>"); - var this_panel_index = these_siblings_list.indexOf(theid); - editorLog("this panel", theid, "is", this_panel_index, "within", these_siblings_list); - var these_panel_widths = this_sbs_source.widths; - var this_width = parseInt(these_panel_widths[this_panel_index]); - var total_width = 0; - editorLog("these html siblings",document.getElementById(these_siblings_list[0])," and ", document.getElementById(these_siblings_list[1])) - editorLog("these siblings source", internalSource[these_siblings_list[0]], "and", internalSource[these_siblings_list[1]]); - for(var j=0; j < these_siblings_list.length; ++j) { - // var t_wid = parseInt(internalSource[these_siblings_list[j]]["width"]); - var t_wid = parseInt(these_panel_widths[j]); - these_panel_widths[j] = t_wid; // put it back as an integer - editorLog("adding width", t_wid); - total_width += t_wid; - // these_panel_widths.push(t_wid); - } -// if (this_width != these_panel_widths[this_panel_index]) { -// errorLog("error: width", this_width, "not on list", these_panel_widths) -// } else { -// editorLog("width", this_width, "on list", these_panel_widths) -// } - - editorLog("occ", marginleft, "u", total_width, "pi", marginright, "total", marginleft + total_width + marginright, "ratio", marginright/total_width) - var remaining_space = 100 - (marginleft + total_width + marginright); - editorLog("remaining_space", remaining_space); - -//modify: enlarge, shrink, left, right, ??? done - -// make the data structure better, then delete this comment -// currently style looks like "width: 66%; margin-right: 17%; margin-left: 17%" - editorLog('width', this_width, "mr", marginright, "ml", marginleft); - - editorLog("modifier", modifier); - - var scale_direction = 1; - var moving_direction = 1; - - if (modifier == "enlargeall") { - editorLog("enlarging all", "remaining space", remaining_space); - if (remaining_space >= these_panel_widths.length) { - for (var j=0; j < these_panel_widths.length; ++j) { - these_panel_widths[j] += 1 - } - // probablu the next case handles the first case - } else if (remaining_space + marginleft + marginright >= these_panel_widths.length) { - for (var j=0; j < these_panel_widths.length; ++j) { - these_panel_widths[j] += 1 - } - var missing_length = these_panel_widths.length - remaining_space; - while (missing_length) { - missing_length -= 1; - if (missing_length % 2) { - if (marginleft) { marginleft -= 1 } - else { marginright -= 1 } - } else { - if (marginright) { marginright -= 1 } - else { marginleft -= 1 } - } - } - } else { - editorLog("Problem: not implemented yet") - } - } else if (modifier == "shrinkall") { - for (var j=0; j < these_panel_widths.length; ++j) { - if (these_panel_widths[j]) { these_panel_widths[j] -= 1 } - } - } else if (modifier == "enlarge") { - editorLog("enlarging one"); - if (remaining_space) { these_panel_widths[this_panel_index] += 1 } - } else if (modifier == "shrink") { - editorLog("shrinking one"); - if (these_panel_widths[this_panel_index]) { these_panel_widths[this_panel_index] -= 1 } - } else if (modifier == "leftplus") { - if (remaining_space) { marginleft += 1 } - } else if (modifier == "leftminus") { - if (marginleft) { marginleft -= 1 } - } else if (modifier == "rightplus") { - if (remaining_space) { marginright += 1 } - } else if (modifier == "rightminus") { - if (marginright) { marginright -= 1 } - } - editorLog("now these_panel_widths", these_panel_widths); - -// missing cases?? - - internalSource[this_sbs_id]["marginleft"] = marginleft; - internalSource[this_sbs_id]["marginright"] = marginright; - internalSource[this_sbs_id]["widths"] = these_panel_widths; - -// next is wrong, becuase the sbsrow does not have an id -/* - document.getElementById(this_sbs_id).style.marginLeft = marginleft + "%"; - document.getElementById(this_sbs_id).style.marginRight = marginright + "%"; -*/ - document.getElementById(theid).parentElement.style.marginLeft = marginleft + "%"; - document.getElementById(theid).parentElement.style.marginRight = marginright + "%"; - - for (var j=0; j < these_siblings_list.length; ++j) { - var this_id = these_siblings_list[j]; -// internalSource[this_id]["width"] = these_panel_widths[j]; - var width = rescale(these_panel_widths[j], 100, marginleft, marginright) - // document.getElementById(this_id).style.width = these_panel_widths[j] + "%"; - document.getElementById(this_id).style.width = width + "%"; - } - editorLog("NOW these html siblings",document.getElementById(these_siblings_list[0])," and ", document.getElementById(these_siblings_list[1])) - editorLog("NOW these siblings source", internalSource[these_siblings_list[0]], "and", internalSource[these_siblings_list[1]]); - editorLog("and internalSource[this_id]", internalSource[this_id]); - editorLog("and also internalSource[this_sbs_id]", internalSource[this_sbs_id]); -} - -function move_by_id_local(theid, thehandleid) { - // when moving an object within a page, we create a phantomobject that is manipulated - // the actual movement is handled by move_object(e) - - first_move = true; - - document.getElementById("edit_menu_holder").remove() - document.getElementById(theid).classList.remove("may_select"); - - moved_content = internalSource[theid]; - moved_content_tag = moved_content["sourcetag"]; - ongoing_editing_actions.push(["moved", moved_content_tag, theid]); - moved_parent_and_location = moved_content["parent"]; - editorLog("moving", theid); - editorLog("moved_parent_and_location", moved_parent_and_location); - // code duplicated elsewhere - var where_it_was = internalSource[moved_parent_and_location[0]][ moved_parent_and_location[1] ]; - editorLog("where_it_was", where_it_was); - var object_in_parent = '<&>' + theid + '<;>'; - var where_it_is = where_it_was.replace(object_in_parent, ""); - editorLog("where_it_is ZZ" + where_it_is + "EE"); - internalSource[moved_parent_and_location[0]][ moved_parent_and_location[1] ] = where_it_is; - - // but first, remember the initial location of the object - - moving_object = document.getElementById(theid); - editorLog("moving", moving_object, "within this page"); - editorLog("moving_id", theid); - editorLog("current_editing[tree][0]", current_editing["tree"][0]); - if (moved_content_tag == "li") { - movement_location_neighbors = next_editable_of(current_editing["tree"][0][0], "li-only"); - } else if (tag_type(moved_content_tag) == "p") { - movement_location_neighbors = next_editable_of(current_editing["tree"][0][0], "inner-block"); - } else { - movement_location_neighbors = next_editable_of(current_editing["tree"][0][0], "outer-block"); - } - editorLog("movement_location_neighbors", movement_location_neighbors); - var foundit = false; - var movement_location_tmp = 0; - for (var j=0; j < movement_location_neighbors.length; ++j) { - if (movement_location_neighbors[j] == moving_object) { - movement_location_tmp = j; - // delete the one which is being moved, because - // we are making a list of slots to place it, and its slot will still be there - // isn't there a better way to delete one item from a list? - movement_location_neighbors.splice(j, 1); - foundit = true; - break; - } - } - - if (!foundit) { errorLog("serious error: trying to move an object that is not movable", theid) } - - editorLog("movement_location_tmp", movement_location_tmp); - // a paragraph by itself in an item or a statement can have a new paragraph before or after it - movement_location_options = [[movement_location_neighbors[0], "beforebegin"], - [movement_location_neighbors[0], "afterend"]]; - movement_location = 0; - var movement_location_ct = 1; - for (var j=1; j < movement_location_neighbors.length; ++j) { - if (movement_location_tmp == j) { movement_location = movement_location_ct } - movement_location_ct += 1; - if (movement_location_neighbors[j-1].parentElement == movement_location_neighbors[j].parentElement) { - movement_location_options.push([movement_location_neighbors[j], "afterend"]) - } else { - movement_location_ct += 1; - movement_location_options.push([movement_location_neighbors[j], "beforebegin"]) - movement_location_options.push([movement_location_neighbors[j], "afterend"]) - } - } - editorLog("movement_location_ct", movement_location_ct); - editorLog("movement_location", movement_location); - - editorLog("made", movement_location_options.length, "movement_location_options", movement_location_options); - editorLog("from", movement_location_neighbors.length, "movement_location_neighbors", movement_location_neighbors); - - var the_phantomobject = document.createElement('div'); - the_phantomobject.setAttribute("id", "phantomobject"); - the_phantomobject.setAttribute("data-moving_id", theid); - the_phantomobject.setAttribute("data-handle_id", thehandleid); - the_phantomobject.setAttribute("class", "phantomobject move"); - the_phantomobject.setAttribute("tabindex", "-1"); - var these_instructions = '
    ↑

    "shift-tab", or "up arrow", to move up

    '; - these_instructions += '

    "return" or "escape" to set in place

    '; - these_instructions += '
    ↓

    "tab" or "down arrow" to move down

    '; - the_phantomobject.innerHTML = these_instructions; - // if we are moving a p which has parent li, and it is the only p there, then delete the parent li - // note: this will be wrong if there is other non-p siblings inside the li - var moving_object_replace = moving_object; - if (tag_type(moved_content_tag) == "p" && internalSource[moved_parent_and_location[0]]["sourcetag"] == "li") { - // check if that p is the only thing inside the li (so the li is empty when we move the p), and if so, - // remove that li from internalSource and also the HTML, and the reverence to it in internalSource - if (moving_object.parentElement.getElementsByTagName("p").length == 1) { - moving_object_replace = moving_object.parentElement - var now_empty_li_id = moved_parent_and_location[0]; - editorLog("list item now empty:", now_empty_li_id); - var now_empty_li_parent_and_location = internalSource[now_empty_li_id]["parent"]; - var where_it_was = internalSource[now_empty_li_parent_and_location[0]][ now_empty_li_parent_and_location[1] ]; - var object_in_parent = '<&>' + now_empty_li_id + '<;>'; - var where_it_is = where_it_was.replace(object_in_parent, ""); - delete internalSource[now_empty_li_id]; - editorLog("where_it_is II" + where_it_is + "OO"); - internalSource[now_empty_li_parent_and_location[0]][ now_empty_li_parent_and_location[1] ] = where_it_is; - } - } - moving_object_replace.replaceWith(the_phantomobject) - document.getElementById("phantomobject").focus(); -} - -function move_object(e) { - // we have alread set movement_location_options and movement_location - editorLog("movement_location",movement_location); - if ((e.code == "Tab" && e.shiftKey) || e.code == "ArrowUp") { // Shift-Tab up the page - e.preventDefault(); - if (movement_location == 0) { - alert("can't move past the top") - } else { - if (first_move) { first_move = false; } - movement_location -= 1 - } - } else if ((e.code == "Tab" || e.code == "ArrowDown") && !e.shiftKey) { - e.preventDefault(); - if (first_move) { first_move = false; editorLog("did first move") } - if (movement_location == movement_location_options.length - 1) { - alert("can't move past the bottom") - } else { - movement_location += 1 - } - } else if (e.code == "Escape" || e.code == "Enter" || e.code == "ArrowRight") { - e.preventDefault(); - editorLog(" decided where to put moving_object", moving_object); - var id_of_moving_object = document.getElementById('phantomobject').getAttribute("data-moving_id"); - editorLog("moving object started as", internalSource[id_of_moving_object]); - var handle_of_moving_object = document.getElementById('phantomobject').getAttribute("data-handle_id"); - document.getElementById('phantomobject').remove(); - var new_anchor_and_position = movement_location_options[movement_location] - editorLog("new_location_anchor",new_anchor_and_position); - new_anchor_and_position[0].insertAdjacentElement(new_anchor_and_position[1], moving_object); - - // the html appears to be updated, but we still need to update both the internal source: - var new_neighbor_id = new_anchor_and_position[0].id; - editorLog("new_neighbor_id", new_neighbor_id); - editorLog("which has source", internalSource[new_neighbor_id]); - var new_neighbor_rel_pos = new_anchor_and_position[1]; - var [new_neighbor_parent, new_neighbor_location] = internalSource[new_neighbor_id]["parent"]; - var new_neighbor_in_context = internalSource[new_neighbor_parent][new_neighbor_location]; - editorLog("new_neighbor_in_context was", new_neighbor_in_context); - var neighbor_tag = '<&>' + new_neighbor_id + '<;>'; - var neighbor_tag_re = new RegExp(neighbor_tag); - - var moving_object_tag = '<&>' + id_of_moving_object + '<;>'; - if (new_neighbor_rel_pos == "beforebegin") { - // new_neighbor_in_context.replace(neighbor_tag, moving_object_tag + "\n" + neighbor_tag) -// RegExp - new_neighbor_in_context = new_neighbor_in_context.replace(neighbor_tag_re, moving_object_tag + "\n" + neighbor_tag) - } else { - new_neighbor_in_context = new_neighbor_in_context.replace(neighbor_tag_re, neighbor_tag + "\n" + moving_object_tag) - } - editorLog("new_neighbor_in_context is", new_neighbor_in_context); - internalSource[new_neighbor_parent][new_neighbor_location] = new_neighbor_in_context; - internalSource[id_of_moving_object]["parent"] = [new_neighbor_parent, new_neighbor_location]; - editorLog("moving object ended as", internalSource[id_of_moving_object]); - - save_edits(); - - // and the navigation information - make_current_editing_tree_from_id(handle_of_moving_object); - - var most_recent_edit = ongoing_editing_actions.pop(); - recent_editing_actions.unshift(most_recent_edit); - - edit_menu_from_current_editing("entering"); - return - - } else { - editorLog("don't know how to move with", e.code) - } - - editorLog("now movement_location", movement_location); - var the_phantomobject = document.getElementById('phantomobject'); - movement_location_options[movement_location][0].insertAdjacentElement(movement_location_options[movement_location][1], the_phantomobject); - document.getElementById("phantomobject").focus(); -} - -function delete_by_id(theid, thereason) { - // reasons to delete something: author wants it deleted, it is empty, ... - // first delete the specific object - final_added_object = ""; - editorLog("deleting by theid", theid, "with content", internalSource[theid]); - var deleted_content = internalSource[theid]; - var parent_and_location = deleted_content["parent"]; - delete internalSource[theid]; - editorLog("deleted", theid, "so", theid in internalSource, "now", internalSource); - // and save what was deleted - if (theid in old_content) { - old_content[theid].push(deleted_content) - } else { - old_content[theid] = [deleted_content] - } - if (thereason != "newempty") { // not sure newempty can still happen - ongoing_editing_actions.push(["deleted ", deleted_content["sourcetag"], theid]); - } - // update the parent of the object - var current_level = current_editing["level"]; - var where_it_was = internalSource[parent_and_location[0]][ parent_and_location[1] ]; - var object_in_parent = '<&>' + theid + '<;>'; - var where_it_is = where_it_was.replace(object_in_parent, ""); - editorLog("where_it_is ZZ" + where_it_is + "EE"); - internalSource[parent_and_location[0]][ parent_and_location[1] ] = where_it_is; - // if the parent is empty, delete it - if (!(where_it_is.trim()) && (parent_and_location[1] == "content" || parent_and_location[1] == "statement")) { - editorLog(" deleted from within", internalSource[parent_and_location[0]]); - document.getElementById(theid).removeAttribute("data-editable"); // so it is invisible to next-editable-of as we delete its parent - if (internalSource[parent_and_location[0]][ "sourcetag" ] == "li") { - editorLog("not going up a level, because it is a list element") - } else { - current_editing["level"] -= 1; - } - delete_by_id(parent_and_location[0], thereason) - } else { // else, because the parent is going to be deleted, so no need to delete the child - // delete from the html - var current_index = current_editing["location"][current_level] + 1; // +1 because the deleted item is still in the current_editing tree - if (thereason == "empty" || thereason == "newempty") { - editorLog("removing from DOM", document.getElementById(theid)); - document.getElementById(theid).remove(); - current_index -= 1; - editorLog("current_index", current_index, "current_level", current_level); - editorLog(current_editing["tree"][ current_level ]); - // hack because adding a list (inside a defn?) is not updating the tree properly - if (current_index > current_editing["tree"][ current_level ].length - 1) { - current_index = current_editing["tree"][ current_level ].length - 1 - } - if (current_editing["tree"][ current_level ][ current_index ].id == theid) { - current_editing["tree"][ current_level ].splice(current_index, 1) - } - editorLog("empty or newempty", thereason) - } else { - editorLog("deleting for another reason", thereason) - document.getElementById("edit_menu_holder").remove() - document.getElementById(theid).setAttribute("id", "deleting"); - document.getElementById("deleting").removeAttribute("data-editable"); // so it is invisible to next-editable-of - setTimeout(() => { document.getElementById("deleting").remove(); }, 600); - } - - if (current_index >= current_editing["tree"][ current_level ].length) { - current_index = current_editing["tree"][ current_level ].length - 2; - } - editorLog("current_index", current_index, "in", current_editing["tree"][ current_level ]); - editorLog("object of interest", current_editing["tree"][ current_level ][ current_index ]); - editorLog("current_level", current_level, "on", current_editing["tree"]); - make_current_editing_tree_from_id(current_editing["tree"][ current_level ][ current_index].id); - edit_menu_from_current_editing("entering"); - } - save_edits() -} - - -var internalSource = { // currently the key is the HTML id - "root_data": {"id": "page-1", "number_base": "0.1" } -} - -/* top_level_id is a mistake: just use internalSource.root_data.id */ -var top_level_id = internalSource["root_data"]["id"]; - -var current_editing = { - "level": 0, - "location": [0], - "tree": [ [document.getElementById(top_level_id)] ] -} - - -function create_local_menu() { - -// this does not work, but local menu navigator would not have worked either - - editorLog("make local edit menu for", this_obj_id); - var local_menu_holder = document.createElement('div'); - local_menu_holder.setAttribute('id', 'local_menu_holder'); - local_menu_holder.setAttribute('tabindex', '-1'); - editorLog("adding local menu for", this_obj_id); - document.getElementById(this_obj_id).insertAdjacentElement("afterbegin", local_menu_holder); - - var enter_option = document.createElement('ol'); - enter_option.setAttribute('id', 'edit_menu'); - enter_option.setAttribute('class', 'edit_menu'); - - enter_option.innerHTML = menu_options_for(this_obj_id, "XunusedX", "base"); - - document.getElementById("local_menu_holder").insertAdjacentElement("afterbegin", enter_option); - -} - -function extract_internal_contents(some_text) { - - // some_text must be a paragraph with mixed content only contining - // non-nested tags - the_text = some_text; - editorLog(" xxxxxxxxxx the_text is", the_text); - editorLog("extract_internal_contents"); - - // delete class information - the_text = the_text.replace(/ class="[^"]"/g, ""); - - // inline from previous editing - editorLog("extracting where 'data-editable...'"); - the_text = the_text.replace(/<([^<]+) data-editable="[^"]+" tabindex="-1">(.*?)<[^<]+>/g, save_internal_cont); - editorLog("extracting where 'contenteditable...'"); - the_text = the_text.replace(/<([^<]+) contenteditable="false">(.*?)<[^<]+>/g, save_internal_cont); - // new $math$ - editorLog("extracting new $math$"); - the_text = the_text.replace(/(^|\s)\$([^\$]+)\$(\s|$|[.,!?;:])/mg, extract_new_math); - // new \\(math\\) - editorLog("extracting new \\(math\\)"); - the_text = the_text.replace(/(^|.)\\\(([^\$]+)\\\)(.|$)/g, extract_new_math); - // new math - editorLog("extracting new math"); - the_text = the_text.replace(/(^|.)<m>(.*?)<\/m>(.|$)/g, extract_new_math); - - // "..." to , which will then be processed - the_text = the_text.replace(/\.\.\./g, '<ellipsis\/>'); - // same for etc - the_text = the_text.replace(/(\s)etc\.?([^a-zA-Z])/g, '$1<etc\/>$2'); - - for (var j=0; j < inline_abbrev.length; ++j) { - var this_tag = inline_abbrev[j]; - editorLog("this_tag", this_tag); - var this_tag_search = "<(" + this_tag + ")\\/>"; - editorLog("searching for", this_tag_search); - var this_tag_search_re = new RegExp(this_tag_search,"g"); - the_text = the_text.replace(this_tag_search_re, extract_new_inline) - } - - // "quote" to quote, which will then be processed - the_text = the_text.replace(/(^|\s)"([^"]+)"(\s|$|[.,!?;:])/g, '$1<q>$2<\/q>$3'); - the_text = the_text.replace(/(^|\s)“([^”]+)”(\s|$|[.,!?;:])/g, '$1<q>$2<\/q>$3'); - the_text = the_text.replace(/(^|\s)‘([^’]+)’(\s|$|[.,!?;:])/g, '$1<q>$2<\/q>$3'); - - for (var j=0; j < inline_tags.length; ++j) { - var this_tag = inline_tags[j]; - editorLog("this_tag", this_tag); - var this_tag_search = "<(" + this_tag + ") *>" + "(.*?)" + "<\\/" + this_tag + ">"; - editorLog("searching for", this_tag_search); - var this_tag_search_re = new RegExp(this_tag_search,"g"); - the_text = the_text.replace(this_tag_search_re, extract_new_inline) - } - - return the_text -} - -function extract_new_math(match, sp_before, math_content, sp_after) { - var new_math_id = randomstring(); - internalSource[new_math_id] = { "xml:id": new_math_id, "sourcetag": "m", - "content": math_content} - return sp_before + "<&>" + new_math_id + "<;>" + sp_after -} -function extract_new_inline(match, the_tag, the_content) { - var new_id = randomstring(); - editorLog("extracting", the_content, "inside", the_tag); - internalSource[new_id] = { "xml:id": new_id, "sourcetag": the_tag, - "content": the_content}; - return "<&>" + new_id + "<;>" -} -function extract_new_abbrev(match, the_tag) { - var new_id = randomstring(); - editorLog("extracting", the_content, "inside", the_tag); - internalSource[new_id] = { "xml:id": new_id, "sourcetag": the_tag}; - return "<&>" + new_id + "<;>" -} - -// rename this next function -function save_internal_cont(match, contains_id, the_contents) { - this_id = contains_id.replace(/.*id="(.+?)".*/, '$1'); - - editorLog("id", this_id, "now has contents", the_contents); - if ("content" in internalSource[this_id]) { // not all objects have content - internalSource[this_id]["content"] = the_contents; - } else if (internalSource[this_id]["sourcetag"] == "xref") { - // this needs work once we have text="custom" references - internalSource[this_id]["ref"] = the_contents; - } - editorLog("all of it is now", internalSource[this_id]); - return "<&>" + this_id + "<;>" -} -function assemble_internal_version_changes(object_being_edited) { - editorLog("in assemble_internal_version_changes"); - editorLog("current active element to be saved", object_being_edited); - editorLog("which has parent", object_being_edited.parentElement); - editorLog("whose age is", object_being_edited.parentElement.getAttribute("data-age")); - - var oldornew = object_being_edited.parentElement.getAttribute("data-age"); - if (!oldornew) { oldornew = object_being_edited.getAttribute("data-age") } - editorLog(" OLDorNEW", oldornew); - - var possibly_changed_ids_and_entry = []; - var nature_of_the_change = ""; - -// var object_being_edited = document.activeElement; - var location_of_change = object_being_edited.parentElement; - var this_arrangement_of_objects = ""; - - if (object_being_edited.classList.contains("paragraph_input")) { - editorLog("found paragraph_input"); - nature_of_the_change = "replace"; - var paragraph_content = object_being_edited.innerHTML; - // editorLog("paragraph_content from innerHTML", paragraph_content); - paragraph_content = paragraph_content.trim(); - - var cursor_location = object_being_edited.selectionStart; - - editorLog("cursor_location", cursor_location, "out of", paragraph_content.length, "paragraph_content", paragraph_content); - - var parent_and_location = [object_being_edited.getAttribute("data-parent_id"), object_being_edited.getAttribute("data-parent_component")]; - editorLog("parent_and_location", parent_and_location); - editorLog("of ", object_being_edited); - - var prev_id = object_being_edited.getAttribute("data-source_id"); - editorLog("prev_id", prev_id); - editorLog("which contains", internalSource[prev_id]); - - // need to replace the below by split_paragraphs - - // does the textbox contain more than one paragraph? - var paragraph_content_list = paragraph_content.split("

    "); - editorLog("there were", paragraph_content_list.length, "paragraphs, but some may be empty"); - for (var j=0; j < paragraph_content_list.length; ++j) { - editorLog("paragraph", j, "begins", paragraph_content_list[j].substring(0,20)) - } - - var paragraph_content_list_trimmed = []; - - for (var j=0; j < paragraph_content_list.length; ++j) { - // probably each paragraph is wrapped in meaningless div tags - var this_paragraph_contents_raw = paragraph_content_list[j]; - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/<\/div>
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/
    /g, ""); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/<\/div>/g, ""); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/ /g, " "); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/ +
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.trim(); - if (!this_paragraph_contents_raw) { editorLog("empty paragraph") } - else { paragraph_content_list_trimmed.push(this_paragraph_contents_raw) } - // editorLog("this_paragraph_contents_raw", this_paragraph_contents_raw); - editorLog("done transforming paragraph", j, "with object_being_edited",object_being_edited); - editorLog("which has contents", this_paragraph_contents_raw) - } - - if (!paragraph_content_list_trimmed.length ) { - // empty, so insert it and delete it later - paragraph_content_list_trimmed = [""]; - } - - for (var j=0; j < paragraph_content_list_trimmed.length; ++j) { - editorLog("_trimmed paragraph", j, "begins", paragraph_content_list_trimmed[j].substring(0,20)) - } - for (var j=0; j < paragraph_content_list_trimmed.length; ++j) { - var this_paragraph_contents = paragraph_content_list_trimmed[j]; - editorLog("this_paragraph_contents", this_paragraph_contents.substring(0,20)); - if (j == 0 && prev_id) { - if (prev_id in internalSource) { - // the content is referenced, so we update the referenced content - // need to check internal content, such as em or math - this_paragraph_contents = extract_internal_contents(this_paragraph_contents); - if (internalSource[prev_id]["content"] != this_paragraph_contents) { - if (internalSource[prev_id]["content"]) { - ongoing_editing_actions.push(["changed", "p", prev_id]); - } else if (this_paragraph_contents) { - ongoing_editing_actions.push(["new", "p", prev_id]); - } - internalSource[prev_id]["content"] = this_paragraph_contents; - editorLog("changed content of", prev_id) - } else if (!this_paragraph_contents) { // adding an empty paragraph - ongoing_editing_actions.push(["empty", "p", prev_id]); - } else { - // this means the contents are nonempty and unchanged, so don't record is as a change - } - possibly_changed_ids_and_entry.push([prev_id, "content", oldornew]); - this_arrangement_of_objects = internalSource[parent_and_location[0]][parent_and_location[1]]; - } else { - errorLog("error: existing tag from input", prev_id, "not in internalSource") - } - } else { // a newly created paragraph - var this_object_internal = {"sourcetag": "p", "title": ""}; //p don't have title - this_object_label = randomstring(); - this_object_internal["xml:id"] = this_object_label; - this_object_internal["parent"] = parent_and_location; - - // put the new p after the previous p in the string describing the neighboring contents - var object_before = new RegExp('(<&>' + prev_id + '<;>)'); - this_arrangement_of_objects = this_arrangement_of_objects.replace(object_before, '$1' + '\n<&>' + this_object_label + '<;>'); - prev_id = this_object_label; - - this_paragraph_contents = extract_internal_contents(this_paragraph_contents); - this_object_internal["content"] = this_paragraph_contents; - internalSource[this_object_label] = this_object_internal - editorLog("just inserted at label", this_object_label, "content starting", this_paragraph_contents.substring(0,11), "which is now", internalSource[this_object_label]); - ongoing_editing_actions.push(["added", "p", this_object_label]); -// here is where we can record that somethign is empty, hence should be deleted - possibly_changed_ids_and_entry.push([this_object_label, "content", "new"]); - } - } - editorLog("parent_and_location", parent_and_location); - editorLog("this_arrangement_of_objects was", internalSource[parent_and_location[0]][parent_and_location[1]]); - internalSource[parent_and_location[0]][parent_and_location[1]] = this_arrangement_of_objects; - editorLog("this_arrangement_of_objects is", this_arrangement_of_objects); - } else if (object_being_edited.classList.contains("displaymath_input")) { - editorLog("found displaymath_input"); - nature_of_the_change = "replace"; - var paragraph_content = object_being_edited.innerHTML; - // editorLog("paragraph_content from innerHTML", paragraph_content); - paragraph_content = paragraph_content.trim(); - - var cursor_location = object_being_edited.selectionStart; - - editorLog("cursor_location", cursor_location, "out of", paragraph_content.length, "paragraph_content", paragraph_content); - - var parent_and_location = [object_being_edited.getAttribute("data-parent_id"), object_being_edited.getAttribute("data-parent_component")]; - - editorLog("parent_and_location", parent_and_location); - editorLog("of ", object_being_edited); - - var prev_id = object_being_edited.getAttribute("data-source_id"); - editorLog("prev_id", prev_id); - editorLog("which contains", internalSource[prev_id]); - - // textbox may contain more than one paragraph - var paragraph_content_list = split_paragraphs(paragraph_content); - var this_paragraph_contents = paragraph_content_list.join("\n\\cr\n"); - this_paragraph_contents = extract_internal_contents(this_paragraph_contents); - - if (!internalSource[prev_id]["content"]) { - ongoing_editing_actions.push(["new", "md", prev_id]); - } else { - ongoing_editing_actions.push(["changed", "md", prev_id]); - } - - internalSource[prev_id]["content"] = this_paragraph_contents - possibly_changed_ids_and_entry.push([prev_id, "content", oldornew]); - - } else if (object_being_edited.getAttribute('data-component') == "title" || - object_being_edited.getAttribute('data-component') == "caption") { - - var this_content_type = object_being_edited.getAttribute('data-component'); - nature_of_the_change = "replace"; - var line_being_edited = object_being_edited; - var line_content = line_being_edited.innerHTML; - line_content = line_content.trim(); - editorLog("the content (is it a title or caption?) is", line_content); - var owner_of_change = object_being_edited.getAttribute("data-source_id"); - var component_being_changed = object_being_edited.getAttribute("data-component"); - editorLog("component_being_changed", component_being_changed, "within", owner_of_change); - if (internalSource[owner_of_change][component_being_changed]) { - ongoing_editing_actions.push(["changed", this_content_type, owner_of_change]); - } else { - ongoing_editing_actions.push(["added", this_content_type, owner_of_change]); - } - // update the title of the object - internalSource[owner_of_change][component_being_changed] = line_content; - possibly_changed_ids_and_entry.push([owner_of_change, this_content_type]); - - } else if (object_being_edited.classList.contains("image_source")) { - // currently this only handles images by URL. - // later do the case of uploading an image. - var image_src = object_being_edited.innerHTML; - - // what is the right way to do this? - image_src = image_src.replace(/
    /g, ""); - image_src = image_src.replace(/<\/div>/g, ""); - image_src = image_src.trim(); - editorLog("changing image src to", image_src); - - var image_being_changed = object_being_edited.getAttribute("data-source_id"); - editorLog("image_being_changed ", image_being_changed); - - if (internalSource[image_being_changed]["source"]) { - ongoing_editing_actions.push(["changed", "source", image_being_changed]); - } else { - ongoing_editing_actions.push(["added", "source", image_being_changed]); - } - internalSource[image_being_changed]["source"] = image_src; - editorLog("image being changed is", internalSource[image_being_changed]); - // possibly_changed_ids_and_entry.push([owner_of_change, "image"]); - possibly_changed_ids_and_entry.push([image_being_changed, "image"]); - - - } else if (inline_tags.includes(object_being_edited.tagName.toLowerCase())) { - editorLog(object_being_edited, "is inline, so processing parent"); - return assemble_internal_version_changes(object_being_edited.parentElement) - } else if (object_being_edited.classList.contains("edit_math_row")) { - nature_of_the_change = "replace"; - var line_being_edited = object_being_edited; - var line_content = line_being_edited.innerHTML; - line_content = line_content.trim(); - editorLog("the content (is it a title?) is", line_content); - var owner_of_change = object_being_edited.getAttribute("id"); - // var component_being_changed = object_being_edited.getAttribute("data-component"); - var component_being_changed = "content"; - editorLog("component_being_changed", component_being_changed, "within", owner_of_change); - // update the title of the object - if (internalSource[owner_of_change][component_being_changed]) { - ongoing_editing_actions.push(["changed", "mrow", owner_of_change]); - } else { - ongoing_editing_actions.push(["added", "mrow", owner_of_change]); - } - internalSource[owner_of_change][component_being_changed] = line_content; - possibly_changed_ids_and_entry.push([owner_of_change, "mrow"]); - - } else { - errorLog("trouble editing", object_being_edited, "AAA", object_being_edited.tagName.toLowerCase(), "not in", inline_tags); - alert("don;t know how to assemble internal_version_changes of " + object_being_edited.tagName) - } - editorLog("finished assembling internal version, which is now:",internalSource); - editorLog(" NUMBER of things chagnged:", possibly_changed_ids_and_entry.length); - return [nature_of_the_change, location_of_change, possibly_changed_ids_and_entry] -} - -function wrap_tag(tag, content, attribute_values) { - // tag is either an XML tag name, or [opening_tag, closing_tag] - - // layout: inline or block or title - // is this the right place to handle empty content? -// editorLog("calling wrap_tag", "tag", tag, "content", content, "attribute_values", attribute_values); - if (!content && !tag) { return "" } - if (!content && !always_empty_tags.includes(tag) && !allowed_empty_tags.includes(tag)) { return "" } - if (!tag) { return content } - - var opening_tag = closing_tag = ""; - - if (typeof tag == "string") { - if (tag) { - opening_tag = "<" + tag; - for (var j=0; j < attribute_values.length; ++j) { - opening_tag += ' ' + attribute_values[j] - } - closing_tag = ""; - } - if (!content && (always_empty_tags.includes(tag) || allowed_empty_tags.includes(tag))) { - opening_tag += "/>"; - closing_tag = ""; - } else { - opening_tag += ">"; - } - - if (tag_display["inline"].includes(tag)) { - // do nothing - } else if (tag_display["title"].includes(tag)) { - opening_tag = "\n" + opening_tag; - closing_tag = closing_tag + "\n" - } else if (tag_display["block-tight"].includes(tag)) { - // do nothing - } else { //the default - opening_tag = "\n" + opening_tag + "\n"; - if (closing_tag) { - closing_tag = "\n" + closing_tag + "\n" - } - } - } else if (tag) { - [opening_tag, closing_tag] = tag - for (var j=0; j < attribute_values.length; ++j) { - opening_tag += ' ' + attribute_values[j] - } - } else { - opening_tag = ""; - closing_tag = ""; - } - if (!opening_tag) { opening_tag = "" } - if (!closing_tag) { closing_tag = "" } - - if (content.includes("N.m")) { editorLog("3 ----- content",content); editorLog("opening_tag", opening_tag) } - - if (opening_tag.startsWith("(.*?)<;>/g, function (match, newid) { - if (newid.startsWith("{")) { - newid = newid.slice(1,-1); - if (newid in output_structure) { - return output_structure[newid] - } else { // don't want to return 'undefined' - return "" - } - } else if (newid.startsWith("(")) { - var this_piece = newid.slice(1,-1); - var this_fcn; - [this_fcn, this_piece] = this_piece.split(","); - return process_value_from_source(this_fcn, this_piece, the_object) - } else { - if (newid in the_object) { - return the_object[newid] - } else { - return "" - } - } - }); - editorLog(" attr_val", attr_val); - if (attr_val && !attr_val.includes('""')) { - output_attributes_values.push(attr_val) - } - } - - editorLog("output_structure", output_tag, "is", output_structure); - editorLog("output_attributes_values", output_attributes_values); - editorLog("output_structure.pieces", output_structure.pieces); - for (var j=0; j < output_structure.pieces.length; ++j) { - var this_piece_output = ""; - var [this_piece, this_tag] = output_structure.pieces[j]; - editorLog("output_structure", output_structure); - // when this_piece is provisional, then this_tag is actually the key for the required content - editorLog(j, "this_piece", this_piece, "this_tag", this_tag, "output_tag", output_tag); - if (this_piece.startsWith("{")) { - this_piece = this_piece.slice(1,-1); - this_piece_output += output_from_source(the_object, objectStructure[this_piece][format], format); - editorLog("wrapping in bracketed tag", this_tag); - the_answer += wrap_tag(this_tag, this_piece_output, []) - } else if (this_piece.startsWith("%")) { - // need to distinguish between the case where this object exists, - // and when it does not exist and we want a placeholder - this_piece = this_piece.slice(1,-1); - editorLog("% % % % % % % % % ", this_piece, "this_tag", this_tag, "the_object", the_object); - editorLog("% % % % % % % % % ", the_object[this_piece]); - editorLog("% % % % % % % % % ", the_object[this_tag]); - if (the_object[this_tag]) { - // var sub_object = {}; - -// Object.assign(sub_object, the_object); - - // sub_object['type-contained'] = this_tag; - // editorLog("sub_object", sub_object); - // this_piece_output = output_from_source(sub_object, objectStructure[this_piece][format], format); - this_piece_output = expand_condensed_source_html(the_object[this_tag],"html?"); - // this_piece_output = output_from_source(sub_object, objectStructure[this_piece][format], format); - the_answer += this_piece_output; - editorLog("this piece exists", this_piece, "this_piece_output", this_piece_output) - } else { - editorLog("making placeholder for", this_piece); - the_answer += wrap_tag("div", "", ['class="placeholder ' + this_piece + '"', 'data-parent_id="' + the_object['xml:id'] + '"', 'data-has="' + this_piece + '"', 'tabindex="-1"', 'data-editable="123456"', 'data-placeholder=""']) - } - } else if (this_piece.startsWith("(")) { - editorLog("whole this_piece", this_piece); - this_piece = this_piece.slice(1,-1); - var this_fcn; - [this_fcn, this_piece] = this_piece.split(","); - var this_content = process_value_from_source(this_fcn, this_piece, the_object) - editorLog(j, "parenthesized content", this_content, "this_piece", this_piece, "XX", this_tag) - the_answer += wrap_tag(this_tag, this_content, []) - } else if (this_piece in the_object) { - this_piece_output = output_from_text(the_object[this_piece], format); - if (format == "pretext" && output_tag == "md" && this_piece == "content") { - // convert \cr to mrow - this_piece_output = this_piece_output.replace(/\s*\\cr\b\s*/g, "\n\n"); - this_piece_output = "\n" + this_piece_output + "\n"; - } - the_answer += wrap_tag(this_tag, this_piece_output, []) - } else { - editorLog("missing piece:", this_tag, "with no", this_piece) - } - } - - // pretty print the output - if (format == "pretext" && !(inline_tags.includes(output_tag)) && !(inline_math.includes(output_tag))) { - the_answer = the_answer.replace(/(^|\n)( *(\w|<))/g, "$1 $2"); - } - the_answer = wrap_tag(output_tag, the_answer, output_attributes_values) -// editorLog("now the answer is", the_answer); - - return the_answer -} - -function output_from_text(text, format) { - editorLog("output_from_text of ", text, "with format", format); - if (text.includes("<&>")) { - // return text.replace(/\s*<&>(.*?)<;>\s*/g, function (match, newid) { return output_from_id(match, newid, format)}) - return text.replace(/<&>(.*?)<;>/g, function (match, newid) { return output_from_id(match, newid, format)}) - } else { - return text - } -} - -function output_from_id(match, the_id, format) { - var the_answer = ""; - editorLog("expanding the_id", the_id); - debugLog("expanding the_id", the_id); - var the_object = internalSource[the_id]; - if (!the_object) { - errorLog("error: no content for", the_id); - return the_id - } - var src_tag = the_object.sourcetag; - editorLog("the_object",the_object); - var output_structure; - if (src_tag in objectStructure) { - output_structure = objectStructure[src_tag][format]; - } else { - errorLog("error: unknown structure:", src_tag); - // so make reasonable assumptions about the structure - output_structure = { - "tag": src_tag, - "pieces": [["content", ""]] - } - } - - editorLog("output_structure", output_structure); - // var output_tag = output_structure.tag; - - the_answer = output_from_source(the_object, output_structure, format); - - return the_answer -} - -function expand_condensed_source_html(text, context) { - editorLog("iiiiiii in expand_condensed_source_html"); - if (text.includes("<&>")) { - editorLog(" qqqqq expand_condensed_source_html", text); - if (context == "edit") { - return text.replace(/<&>(.*?)<;>/g,expand_condensed_src_edit) - } else { - return text.replace(/<&>(.*?)<;>/g,expand_condensed_src_html) - } - } else { - editorLog("returning text XX" + text.substring(0,17) + "YY"); - editorLog("returning from expand_condensed_source_html"); - return text - } -} -function expand_condensed_src_html(match, the_id) { - return html_from_internal_id(the_id, "inner") -} -function expand_condensed_src_edit(match, the_id) { - return html_from_internal_id(the_id, "edit") -} - -function html_from_internal_id(the_id, is_inner) { - // the outer element needs to be constructed as document.createElement - // but the inner content is just plain text - // maybe saying it better: sometimes we want to create an object and - // insert it into the DOM. Other times we just want to construct the - // HTML markup fo rthe object and return that. - var the_object = internalSource[the_id]; - editorLog("making html of", the_object, "is_inner", is_inner, "the_id", the_id); - var sourcetag = the_object["sourcetag"]; - editorLog("which has tag", sourcetag); - - editorLog("m in inline_math", inline_math.includes("m")); - - var html_of_this_object; - var the_html_objects = []; - - if (sourcetag == "image") { - html_of_this_object = output_from_id("", the_id, "html"); - editorLog("html_of_this_object", html_of_this_object); - the_html_objects.push(html_of_this_object); - } else if (tag_type(sourcetag) == "p") { - html_of_this_object = output_from_id("", the_id, "html"); - editorLog("html_of_this_object", html_of_this_object); - the_html_objects.push(html_of_this_object); - } else if (inline_math.includes(sourcetag) && is_inner == "edit") { - // here we are assuming the tag is 'm' - var opening_tag = ''; - return opening_tag + spacemath_to_tex(the_object["content"]) + closing_tag - } else if (["me","men"].includes(sourcetag) && is_inner == "edit") { - var opening_tag = '
    '; - return opening_tag + spacemath_to_tex(the_object["content"]) + closing_tag - } else if (["md","mdn"].includes(sourcetag) && is_inner == "edit") { - var opening_tag = '
    '; - this_content = the_object["content"].replace(/<&>(.*?)<;>/g,expand_condensed_src_edit); - this_content = this_content.replace("MROWsepARATOR", "\n yyyy \n"); - return opening_tag + this_content + closing_tag - } else if (["mrow"].includes(sourcetag) && is_inner == "edit") { - var opening_tag = '
    '; - return opening_tag + "MROW" + spacemath_to_tex(the_object["content"]) + closing_tag - } else if (sourcetag == "xref" && is_inner == "edit") { - // here we are assuming the tag is 'm' - var opening_tag = ''; - return opening_tag + the_object["ref"] + closing_tag - } else { - html_of_this_object = output_from_id("", the_id, "html"); - editorLog("html_of_this_object", html_of_this_object); - the_html_objects.push(html_of_this_object); - - } - - editorLog(" RRRR returning the_html_objects", the_html_objects); - -// the_html_objects = the_html_objects.replace("MROWsepARATOR", "\n\\cr\n"); - return the_html_objects -} - -function insert_html_version(these_changes) { - - var nature_of_the_change = these_changes[0]; - var location_of_change = these_changes[1]; - var possibly_changed_ids_and_entry = these_changes[2]; - - editorLog("nature_of_the_change", nature_of_the_change); - editorLog("location_of_change", location_of_change); - editorLog("possibly_changed_ids_and_entry", possibly_changed_ids_and_entry); - - if (!possibly_changed_ids_and_entry.length) { - editorLog("nothing to change"); - // return "" - } - // we make HTML version of the objects with ids possibly_changed_ids_and_entry, - // and then insert those into the page. - -// here is where we detect deleting? -// or is that after this function is done? - if (nature_of_the_change != "replace") { - editorLog("should be replace, since it is the edit form we are replacing"); - } - - var object_as_html = ""; - var this_object_id, this_object_entry, this_object_oldornew, this_object; - - editorLog(" there are", possibly_changed_ids_and_entry.length, "items to process"); - - for (var j=0; j < possibly_changed_ids_and_entry.length; ++j) { - this_object_id = possibly_changed_ids_and_entry[j][0]; - this_object_entry = possibly_changed_ids_and_entry[j][1]; - this_object_oldornew = possibly_changed_ids_and_entry[j][2]; - editorLog("j=", j, "this thing", possibly_changed_ids_and_entry[j]); - this_object = internalSource[this_object_id]; - editorLog(j, "this_object", this_object); - if (tag_type(this_object["sourcetag"]) == "p" || this_object["sourcetag"] == "li" || tag_type(this_object["sourcetag"]) == "md") { - - var this_new_object = html_from_internal_id(this_object_id); - editorLog("inserting",this_new_object,"before",location_of_change); - location_of_change.insertAdjacentHTML('beforebegin', this_new_object[0]); - object_as_html = document.getElementById(this_object_id); - - } else if (this_object_entry == "title") { - var object_as_html = document.createElement('span'); - object_as_html.setAttribute("class", "title"); - object_as_html.setAttribute('data-editable', 20); - object_as_html.setAttribute('tabindex', -1); - // next line should apply a transform to the source - object_as_html.innerHTML = this_object[this_object_entry]; - editorLog("inserting",object_as_html,"before",location_of_change); - // location_of_change is the .header . We want it to be the .title - location_of_change = location_of_change.querySelector("#actively_editing"); - editorLog("now location_of_change",location_of_change); - location_of_change.insertAdjacentElement('beforebegin', object_as_html); - } else if (this_object_entry == "caption") { - console.log("Error: don't know what to do with 'caption'") - } else if (this_object_entry == "image") { - editorLog("image, this_object", this_object); - var this_new_object = html_from_internal_id(this_object_id); - editorLog("inserting",this_new_object,"before",location_of_change); - location_of_change.insertAdjacentHTML('beforebegin', this_new_object[0]); - object_as_html = document.getElementById(this_object_id); - - } else { - editorLog("trouble making", this_object); - } - MathJax.typesetPromise(); -// MathJax.Hub.Queue(['Typeset', MathJax.Hub, this_object_id]); - } - location_of_change.remove(); - - editorLog("returning from insert html version", object_as_html); - // call mathjax, in case the new content contains math - return object_as_html // the most recently added object, which we may want to - // do something, like add an editing menu -} // insert html version - -function save_edits() { - - var currentState = internalSource; - - editorLog("saving", currentState); - localStorage.setObject("savededits", currentState); - return ""; -} - -function previous_editing() { - var old_internal_source = localStorage.getObject("savededits"); - return (old_internal_source || "") -} - -function local_editing_action(e) { - editorLog("in local editing action for" ,e.code); - var most_recent_edit; - if (e.code == "Escape" || e.code == "Enter") { - editorLog("I saw a Rettttt"); - if (document.activeElement.getAttribute('data-component') == "title" || - document.activeElement.getAttribute('data-component') == "caption") { - editorLog("probably saving a ", document.activeElement.getAttribute('data-component')); - e.preventDefault(); - these_changes = assemble_internal_version_changes(document.activeElement); - final_added_object = insert_html_version(these_changes); - most_recent_edit = ongoing_editing_actions.pop(); - recent_editing_actions.unshift(most_recent_edit); - editorLog("most_recent_edit should be title change", most_recent_edit); - editorLog("final_added_object", final_added_object); - this_char = ""; - prev_char = ""; - save_edits(); - - // .title is in a .heading, and neither have an id - make_current_editing_tree_from_id(final_added_object.parentElement.parentElement.id); - edit_menu_from_current_editing("entering"); - -// editing_input_image - } else if (e.code == "Escape" || (prev_char.code == "Enter" && prev_prev_char.code == "Enter") || document.getElementById("editing_input_image")) { - editorLog("need to save"); -editorLog(" HHH current_editing", current_editing, "with active element", document.activeElement); - - e.preventDefault(); - this_char = ""; - prev_char = ""; - these_changes = assemble_internal_version_changes(document.activeElement); - editorLog(" CCC these_changes", these_changes); - editorLog(" CCC0 these_changes[0]", these_changes[0]); - editorLog("ongoing_editing_actions", ongoing_editing_actions); - editorLog("actively_editing", document.getElementById("actively_editing")); -editorLog(" III current_editing", current_editing, current_editing["tree"][current_editing["level"]]); - previous_added_object = final_added_object; - final_added_object = insert_html_version(these_changes); - editorLog("final_added_object, previous_added_object", final_added_object, previous_added_object); -editorLog(" LLL current_editing", current_editing, current_editing["tree"][current_editing["level"]]); - editorLog("the final_added_object", final_added_object); - editorLog("the actively_editing", document.getElementById("actively_editing")); - editorLog("OO", ongoing_editing_actions.length, " ongoing_editing_actions", ongoing_editing_actions); -/* - editorLog("ongoing_editing_actions[0]", ongoing_editing_actions[0]); - editorLog("ongoing_editing_actions[0][2]", ongoing_editing_actions[0][2]); -*/ - // maybe this next if only handles when we delete by removing the letters in a p? - if (these_changes[0] == "empty") { - editorLog("NN", ongoing_editing_actions.length, " ongoing_editing_actions", ongoing_editing_actions); - editorLog("ongoing_editing_actions[0]", ongoing_editing_actions[0]); - editorLog("ongoing_editing_actions[0][2]", ongoing_editing_actions[0][2]); - editorLog(" going to delete", these_changes[2][0]); - // this is sort-of a hack to detext the end of inserting li - if (ongoing_editing_actions.length == 2 && - ongoing_editing_actions[1][0] == "empty" && - ongoing_editing_actions[1][1] == "p" && - ongoing_editing_actions[0][0] == "new" && - ongoing_editing_actions[0][1] == "li") { - ongoing_editing_actions.pop(); // content was empty, so there is no editing action - ongoing_editing_actions.pop(); - delete_by_id(these_changes[2][0][0], "newempty"); - current_editing["location"][current_editing["level"]] -= 1 - final_added_object = previous_added_object; // this approach makes the updating of current_editing moot? - } else { - delete_by_id(these_changes[2][0][0], "empty"); - } - editorLog("MM", ongoing_editing_actions.length, " ongoing_editing_actions", ongoing_editing_actions); - for (var j=0; j= 0; --j) { - editorLog(" X", j, "the_whole_object[j]", the_whole_object[j]); - document.getElementById("actively_editing").insertAdjacentElement("afterend", the_whole_object[j]) - MathJax.typesetPromise(); - // MathJax.Hub.Queue(['Typeset', MathJax.Hub, the_whole_object[j]]); - } - - editorLog("here is where we need to update current_editing", "parent:", this_parent,"which is",document.getElementById(this_parent[0]), "level:", current_editing["level"], "loation:", current_editing["location"], "tree:", current_editing["tree"]); - $("#actively_editing").remove(); - -editorLog(" DDD current_editing", current_editing, current_editing["tree"][current_editing["level"]]); - - } - - most_recent_edit = ["","",""]; - while (ongoing_editing_actions.length) { - most_recent_edit = ongoing_editing_actions.pop(); - recent_editing_actions.unshift(most_recent_edit); - editorLog(" most_recent_edit", most_recent_edit); - } - editorLog(" 8888 final_added_object", final_added_object); - - save_edits() - - // is this in the right place? - editorLog("most_recent_edit", most_recent_edit); - - // sometimes, such as when adding items to a list, you want to - // automatically start adding something else. - // maybe refactor theorem to add proof after? - if (most_recent_edit[1] == "li") { // added to a list, so try adding again - // note that when adding an li, the neichbor is a p within the actual li neighbor - var new_obj = create_object_to_edit("li", document.getElementById(most_recent_edit[2]).firstElementChild, "afterend") - edit_in_place(new_obj, "new"); - editorLog("now editing the assumed new li"); -editorLog(" GGG current_editing", current_editing, current_editing["tree"][current_editing["level"]]); - - } else { - - editorLog("re-making the tree from final_added_object", final_added_object); - make_current_editing_tree_from_id(final_added_object.id); - editorLog("and then adding a menu"); - edit_menu_from_current_editing("entering"); - } - - } else if ( document.getElementById("actively_editing")) { - document.getElementById("actively_editing").remove(); - // were actively editing, and now just re-making the menu - edit_menu_from_current_editing("entering"); - } else { - // default makng the menu - edit_menu_from_current_editing("entering"); - } - } // esc or enter enter enter - editorLog ("processed an enter"); - } // esc or enter - else { - editorLog("e.code was not one of those we were looking for", e) - } - editorLog("leaving local editing action") -} - -function main_menu_navigator(e) { // we are not currently editing - // so we are building the menu, and possibly moving aroung the document, - //for the user to decide what/how to edit - -// There are 3 modes: -// #enter_choice, data-location="next" -// #enter_choice, data-location="stay" -// above means we are deciding whenter to edit/enter/leave and object, or to move on -// #choose_current -// 3rd option means we already have a menu - - if (document.getElementById("enter_choice")) { - theEnterChoice = document.getElementById("enter_choice"); - editorLog("enter_choice", e); - var theMotion = theEnterChoice.getAttribute("data-location"); - var object_of_interest; - if (theMotion == "stay") { - object_of_interest = theEnterChoice.parentElement.previousSibling; - } else { - object_of_interest = theEnterChoice.parentElement.parentElement; - } - editorLog(" MMN: want to", theMotion, "on", object_of_interest, "from", theEnterChoice) - - editorLog("current_editing", current_editing); - editorLog("theEnterChoice", theEnterChoice); - var current_level = current_editing["level"]; - var current_location = current_editing["location"][current_level]; - var current_siblings = current_editing["tree"][current_level]; - editorLog("current_level", current_level, "current_location", current_location, "current_siblings", current_siblings); - - if ((e.code == "Tab" || e.code == "ArrowDown") && !e.shiftKey) { - e.preventDefault(); - if (current_level == 0) { // at the top, so no "next" object - return "" - } - // go to next sibling, or stage to exit if on last sibling - if (current_location == (current_siblings.length - 1)) { // on last sibling - editorLog("on last sibling, level was", current_level,"siblings was", current_siblings, "tree", current_editing["tree"]); - editorLog("current_location was", current_location); - current_level -= 1; - current_location = current_editing["location"][current_level]; - current_editing["level"] = current_level; - current_editing["location"][current_level] = current_location; - current_siblings = current_editing["tree"][current_level]; - editorLog("current_location is", current_location); - editorLog("stay menu A"); - object_of_interest.classList.remove("may_leave"); - object_of_interest.classList.remove("may_elect"); - edit_menu_from_current_editing("leaving") - } else { - editorLog("moving to the next editable sibling"); - editorLog("level was", current_level,"siblings was", current_siblings, "tree", current_editing["tree"]); - editorLog("current_location was", current_location); - editorLog(current_location, "was", current_editing); - current_location += 1; - object_of_interest.classList.remove("may_leave"); - object_of_interest.classList.remove("may_elect"); - editorLog("current_location is", current_location); - editorLog("stay menu B"); - current_editing["location"][current_level] = current_location; - editorLog(current_location, "is", current_editing); - edit_menu_from_current_editing("entering") - } - } else if ((e.code == "Tab" && e.shiftKey) || e.code == "ArrowUp") { // Shift-Tab to prevous object - e.preventDefault(); - // go to previous sibling, or up one if on first sibling - editorLog("Arrow Up:", "current_location", current_location, "current_level", current_level); - if (theMotion == "stay") { // about to leave, to return to the top of that region - edit_menu_from_current_editing("entering") - } else if (current_location == 0) { - if (!current_level) { // already at the top, so nowhere to go, so do nothing - editorLog("at the top, so can't go up"); - return "" - } - current_level -= 1; - current_editing["level"] = current_level; - current_location = current_editing["location"][current_level]; - editorLog("AA new current_location", current_location, " current_editing['tree']", current_editing["tree"]); - editorLog(" current_editing['tree'][0]", current_editing["tree"][0]); - current_siblings = current_editing["tree"][current_level]; - editorLog("current_siblings", current_siblings); - edit_menu_from_current_editing("entering") - } else { - current_location -= 1; - current_editing["location"][current_level] = current_location; - editorLog("current_siblings", current_siblings); - editorLog("BB new current_location", current_location, "at level", current_level, " current_editing['tree']", current_editing["tree"]); - edit_menu_from_current_editing("entering") - } - } else if (e.code == "Escape" || e.code == "ArrowLeft") { - e.preventDefault(); - if (current_level == 0) { return "" } // already at the top, so nowhere to go, so do nothing -// copied from A1 - editorLog("At ArrowLeft, level was", current_level, "with location", current_editing["location"], "and tree", current_editing["tree"][current_level]); - current_level -= 1; - current_editing["level"] = current_level; - current_location = current_editing["location"][current_level]; - current_siblings = current_editing["tree"][current_level]; - editorLog("now level id", current_level, "with location", current_editing["location"], "and tree", current_editing["tree"][current_level]); - edit_menu_from_current_editing("entering") - } else if (e.code == "Enter" || e.code == "ArrowRight") { - e.preventDefault(); - if (theMotion == "stay") { - edit_menu_from_current_editing("entering"); - return "" - } - var edit_submenu = document.createElement('ol'); - edit_submenu.setAttribute('id', 'edit_menu'); - edit_submenu.setAttribute('class', 'edit_menu'); - - var to_be_edited = object_of_interest; - editorLog("to_be_edited", to_be_edited); - edit_submenu.innerHTML = top_menu_options_for(to_be_edited); - $("#enter_choice").replaceWith(edit_submenu); - document.getElementById('choose_current').focus(); - } - editorLog(" Just handled the case of enter_choice"); - return "" - - } else if (document.getElementById("choose_current")) { - var theChooseCurrent = document.getElementById("choose_current"); - var dataLocation = theChooseCurrent.getAttribute("data-location"); // may be null - var dataAction = theChooseCurrent.getAttribute("data-action"); // may be null - var dataModifier = theChooseCurrent.getAttribute("data-modifier"); // may be null - var dataEnv = theChooseCurrent.getAttribute("data-env"); // may be null - // a hack because of how the menus were originally set up - if (dataEnv == "save") { dataAction = "save" } - var dataEnvParent = theChooseCurrent.getAttribute("data-env-parent"); // may be null - var object_of_interest; - if (document.getElementById("edit_menu_holder")) { - object_of_interest = document.getElementById("edit_menu_holder").parentElement - } else if (document.getElementById("local_menu_holder")) { - object_of_interest = document.getElementById("local_menu_holder").parentElement - } else { - editorLog("something is confused: should be a menu, but isn't"); - if (theChooseCurrent.id) { - make_current_editing_tree_from_id(theChooseCurrent.id); - object_of_interest = theChooseCurrent - } else { - make_current_editing_tree_from_id(theChooseCurrent.parentElement.id); - object_of_interest = theChooseCurrent.parentElement - } - editorLog("made entering menu for", object_of_interest); - edit_menu_from_current_editing("entering") - } - current_level = current_editing["level"]; - current_location = current_editing["location"][current_level]; - current_siblings = current_editing["tree"][current_level]; - editorLog("in choose_current", dataLocation, "of", object_of_interest); - editorLog("dataAction ", dataAction); - editorLog("dataLocation ", dataLocation); - // we have an active menu, and have selected an item - // there are three main sub-cases, depending on whether there is a data-location attribute, - // a data-action attribute, or a data-env attribute. - // That is the primary order in which those attributes are considered - // however, some actions (such as Tab and shift-Tab) are the same - // in each sub-case (because all we are doing is moving up and down the - // current list of options), so we handle those first. - - if ((e.code == "Tab" || e.code == "ArrowDown") && !e.shiftKey) { - e.preventDefault(); - next_menu_item = theChooseCurrent.nextSibling; - editorLog("theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - if (!next_menu_item) { next_menu_item = theChooseCurrent.parentNode.firstChild } - editorLog("theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - if (theChooseCurrent == next_menu_item) { //only one item on menu, so Tab shold move to the next editable item - // if last editable child, go up one - if (current_location == (current_siblings.length - 1)) { - current_level -= 1; - current_location = current_editing["location"][current_level]; - current_editing["level"] = current_level; - current_editing["location"][current_level] = current_location; - edit_menu_from_current_editing("leaving") - } else { - current_location += 1; - editorLog("single item menu, current_location now", current_location); - current_editing["location"][current_level] = current_location; - edit_menu_from_current_editing("entering"); - } - } - theChooseCurrent.removeAttribute("id"); - editorLog("theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - next_menu_item.setAttribute("id", "choose_current"); - editorLog("setting focus on",next_menu_item); - next_menu_item.focus(); - } // Tab - else if ((e.code == "Tab" && e.shiftKey) || e.code == "ArrowUp") { // Shift-Tab to prevous object - e.preventDefault(); - editorLog("just saw a", e.code); - editorLog("focus is on", $(":focus")); - editorLog("saw an",e.code); - next_menu_item = theChooseCurrent.previousSibling; - editorLog("W1 theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - if (!next_menu_item) { next_menu_item = theChooseCurrent.parentNode.lastChild } - editorLog("W2 theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - if (theChooseCurrent == next_menu_item) { //only one item on menu, so Shift-Tab shold move to previous or up one level - if (current_editing["location"][ current_editing["level"] ] == 0) { - current_editing["level"] -= 1; - } else { - current_editing["location"][ current_editing["level"] ] -= 1; - } - editorLog("single item menu, current_level now", current_level); - edit_menu_from_current_editing("entering"); - } else { - theChooseCurrent.removeAttribute("id"); - editorLog("W3 theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - theChooseCurrent.classList.remove("chosen"); - next_menu_item.setAttribute("id", "choose_current"); - editorLog("setting focus on",next_menu_item); - next_menu_item.focus(); - } - } - else if (e.code == "Escape" || e.code == "ArrowLeft") { - editorLog("processing ESC"); - editorLog("At ArrowLeft, level was", current_level, "xx", current_editing["level"], "with location", current_editing["location"], "and tree", current_editing["tree"][current_level]); - // I think the next if can never be true, because of how to route keystrokes - if (document.getElementById("local_menu_holder")) { // hack for when the interface gets confused - document.getElementById("local_menu_holder").remove() - } else { - editorLog("W4 theChooseCurrent", theChooseCurrent); - // need to go up one level in the menu - var previous_menu_item = theChooseCurrent.parentElement.parentElement; // li > ol > li - if (previous_menu_item.id == "edit_menu_holder") { - var thenewchoice = ''; - thenewchoice += 'edit or add nearby'; - thenewchoice += ''; - previous_menu_item.innerHTML = thenewchoice - } else { - theChooseCurrent.parentElement.remove(); - previous_menu_item.classList.remove('chosen'); - previous_menu_item.parentElement.classList.remove('past'); - previous_menu_item.setAttribute("id", "choose_current"); - previous_menu_item.focus(); - } - } - } - else if (keyletters.includes(e.code)) { - key_hit = e.code.toLowerCase().substring(3); // remove forst 3 characters, i.e., "key" - editorLog("key_hit", key_hit); - theChooseCurrent = document.getElementById('choose_current'); - editorLog('theChooseCurrent', theChooseCurrent ); - editorLog( $(theChooseCurrent) ); - // there can be multiple data-jump, so use ~= to find if the one we are looking for is there - // and start from the beginning in case the match is earlier (make the second selector better) - if ((next_menu_item = $(theChooseCurrent).nextAll('[data-jump~="' + key_hit + '"]:first')[0]) || - (next_menu_item = $(theChooseCurrent).prevAll('[data-jump~="' + key_hit + '"]:last')[0])) { // check there is a menu item with that key - theChooseCurrent.removeAttribute("id", "choose_current"); - next_menu_item.setAttribute("id", "choose_current"); - next_menu_item.focus(); - } else { - // not sure what to do if an irrelevant key was hit - editorLog("that key does not match any option") - } - } - -// Now only Enter and ArrowRight are meaningful in this context. -// The effect will depend on the other attributes of #choose_current: -// dataLocation, dataAction, dataEnv - - else if (e.code == "Enter" || e.code == "ArrowRight") { - e.preventDefault(); - if (dataLocation) { - if (dataLocation == "enter") { // we are moving down into an object - - editorLog("theChooseCurrent", theChooseCurrent); - var object_to_be_entered = object_of_interest; - editorLog("object_to_be_entered", object_to_be_entered); - object_to_be_entered.classList.remove("may_select"); - object_to_be_entered.classList.remove("may_enter"); - object_to_be_entered.classList.remove("may_leave"); - editorLog('next_editable_of(object_to_be_entered, "children")'); - editableChildren = next_editable_of(object_to_be_entered, "children"); - current_level += 1; - current_editing["level"] = current_level; - current_editing["location"][current_level] = 0; - current_editing["tree"][current_level] = editableChildren; - editorLog("current_editing", current_editing); - - editorLog("object_to_be_entered", object_to_be_entered); - editorLog("with some children", editableChildren); - // put menu on the item at the top of the block_we_are_reentering - // this is a repeat of a Tab case, so consolidate - editorLog("menu place 10"); - editorLog("document.activeElement", document.activeElement); - - editorLog("menu on", editableChildren[0]); - edit_menu_for(editableChildren[0], "entering"); - - return "" - // combine the next with previous, because the ony difference is which object receives focus - } else if (dataLocation == "end") { // move to the end of an object - - editorLog("theChooseCurrent", theChooseCurrent); - var object_to_be_entered = object_of_interest; - editorLog("object_to_be_entered", object_to_be_entered); - object_to_be_entered.classList.remove("may_select"); - object_to_be_entered.classList.remove("may_enter"); - object_to_be_entered.classList.remove("may_leave"); - editorLog('next_editable_of(object_to_be_entered, "children")'); - editableChildren = next_editable_of(object_to_be_entered, "children"); - var num_editableChildren = editableChildren.length; - current_level += 1; - current_editing["level"] = current_level; - // current_editing["location"][current_level] = 0; - current_editing["location"][current_level] = num_editableChildren - 1; - current_editing["tree"][current_level] = editableChildren; - editorLog("current_editing", current_editing); - - editorLog("object_to_be_entered", object_to_be_entered); - editorLog("with some children", editableChildren); - // put menu on the item at the top of the block_we_are_reentering - // this is a repeat of a Tab case, so consolidate - editorLog("menu place 10end"); - editorLog("document.activeElement", document.activeElement); - - editorLog("menu on", editableChildren[num_editableChildren - 1]); - edit_menu_for(editableChildren[num_editableChildren - 1], "entering"); - - return "" - } else if ((dataLocation == "beforebegin") || (dataLocation == "afterend") || (dataLocation == "afterbegin")) { // should be the only other options - theChooseCurrent.parentElement.classList.add("past"); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.classList.add("chosen"); - - var parent_id = document.getElementById('edit_menu_holder').parentElement.parentElement.id; - if (!parent_id) { - editorLog(document.getElementById('edit_menu_holder').parentElement.parentElement, "has no id, so going down one level"); - parent_id = document.getElementById('edit_menu_holder').parentElement.id; - } - editorLog("making a menu for", parent_id); - var edit_submenu = document.createElement('ol'); - edit_submenu.innerHTML = menu_options_for(parent_id, "", "base"); - editorLog("just inserted inner menu_options_for(" + parent_id + ")", menu_options_for(parent_id, "", "base")); - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - document.getElementById('choose_current').focus(); - editorLog("focus is on", $(":focus")); - - return "" - } else { - editorLog("Error: unknown dataLocation:", dataLocation) - } - } // dataLocation - - else if (dataAction) { - if (dataAction == "edit") { - editorLog("going to edit", object_of_interest); - edit_in_place(object_of_interest, "old"); - } else if (dataAction == "replace") { // no longer used? - editorLog("replace", object_of_interest, "by id", object_of_interest.id); - replace_by_id(object_of_interest.id, "html") - } else if (dataAction == "stop_editing") { - editorLog("stop_editing", object_of_interest, "by id", object_of_interest.id); - replace_by_id(object_of_interest.id, "html") - eraseCookie(chosen_edit_option_key) - } else if (dataAction == "save") { - save_source(); - edit_menu_from_current_editing("entering"); - } else if (dataAction == "resume") { - editorLog("resuming previous editing session"); - resume_editing() - } else if (dataAction == "change-env-to") { - // shoudl use dataEnv ? - var new_env = theChooseCurrent.getAttribute("data-env"); - editorLog("changing environment to", new_env); - // #edit_menu_holder is in span.type, inside .heading, inside article - to_be_edited = document.getElementById('edit_menu_holder').parentElement.parentElement.parentElement; - editorLog("to_be_edited", to_be_edited); - var id_of_object = to_be_edited.id; - var this_object_source = internalSource[id_of_object]; - editorLog("current envoronemnt", this_object_source); - var old_env = internalSource[id_of_object]["sourcetag"]; - internalSource[id_of_object]["sourcetag"] = new_env; - recent_editing_actions.push([old_env, new_env, id_of_object]); - editorLog("the change was", "changed " + old_env + " to " + new_env + " " + id_of_object); - var the_whole_object = html_from_internal_id(id_of_object); - editorLog("B: the_whole_object", the_whole_object); - $("#" + id_of_object).replaceWith(the_whole_object[0]); // later handle multiple additions - editorLog("just edited", $("#" + id_of_object)); - // since we changed an object which is in - editorLog("curent_editing level", current_editing["level"], "with things", current_editing["tree"][current_editing["level"]]); - current_editing["level"] -= 1; - current_editing["tree"][current_editing["level"]] = next_editable_of(document.getElementById(id_of_object).parentElement, "children"); - editorLog("now curent_editing level", current_editing["level"], "with things", current_editing["tree"][current_editing["level"]]); - edit_menu_from_current_editing("entering"); - return "" - - } else if (dataAction == 'change-env') { - // #edit_menu_holder is in span.type, inside .heading, inside article - current_env = document.getElementById('edit_menu_holder').parentElement.parentElement.parentElement; - current_env_id = current_env.id; - - theChooseCurrent.parentElement.classList.add("past"); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.classList.add("chosen"); - - var edit_submenu = document.createElement('ol'); - editorLog("J1 lookinh for menu options for", current_env_id); - edit_submenu.innerHTML = menu_options_for(current_env_id, "", "change"); - editorLog("just inserted inner menu_options_for(parent_type)", menu_options_for(current_env_id, "", "change")); - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - document.getElementById('choose_current').focus(); - editorLog("focus is on", $(":focus")); - } else if (dataAction == 'modify') { - // #edit_menu_holder is in span.type, inside .heading, inside article - current_env = document.getElementById('edit_menu_holder').parentElement; - current_env_id = current_env.id; - - if (!dataModifier) { - theChooseCurrent.parentElement.classList.add("past"); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.classList.add("chosen"); - - var edit_submenu = document.createElement('ol'); - // this may only hapen when adjusting workspace: - if (!current_env_id) { - edit_submenu.setAttribute('id', 'edit_menu'); - edit_submenu.setAttribute('class', 'edit_menu'); - current_env_id = current_env.getAttribute("data-parent_id"); - editorLog("current_env_id", current_env_id); - } - editorLog("J2a looking for menu options for", current_env_id); - edit_submenu.innerHTML = menu_options_for(current_env_id, "", "modify"); - editorLog("just inserted inner menu_options_for(parent_type)", menu_options_for(current_env_id, "", "modify")); - if (theChooseCurrent.tagName == "SPAN") { // when adjusting workspace - theChooseCurrent.replaceWith(edit_submenu); - } else { - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - } - document.getElementById('choose_current').focus(); - editorLog("focus is on", $(":focus")); - } else if (dataModifier == "done") { - edit_menu_from_current_editing("entering"); - } else if (dataModifier == "arrows") { - // setup_arrow_modify() // is different for images and SBSs - } else { - // this may only hapen when adjusting workspace: - if (!current_env_id) { - current_env_id = current_env.getAttribute("data-parent_id"); - editorLog("current_env_id from parent", current_env_id); - } - modify_by_id(current_env_id, dataModifier) - } - } else if (dataAction == "move-or-delete") { - // almost all repeats from dataAction == 'change-env' - // except for current_env and menu options for. Consolidate - // maybe also separate actions which give anotehr menu, from actions which change content - current_env = document.getElementById('edit_menu_holder').parentElement; - editorLog("current_env", current_env); - current_env_id = current_env.id; - - theChooseCurrent.parentElement.classList.add("past"); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.classList.add("chosen"); - - var edit_submenu = document.createElement('ol'); - editorLog("J3 looking for menu options for", current_env_id); - edit_submenu.innerHTML = menu_options_for(current_env_id, "", "move-or-delete"); - editorLog("just inserted inner menu_options_for(parent_type)", menu_options_for(current_env_id, "", "move-or-delete")); - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - document.getElementById('choose_current').focus(); - editorLog("focus is on", $(":focus")); - } else if (dataAction == "delete") { - current_env = document.getElementById('edit_menu_holder').parentElement; - editorLog("current_env", current_env); - current_env_id = current_env.id; - delete_by_id(current_env_id, "choice") - } else if (["move-local", "move-local-p", "move-local-li"].includes(dataAction)) { - current_env = document.getElementById('edit_menu_holder').parentElement; - current_env_id = current_env.id; - handle_env_id = current_env_id; // we were focused on that p, even though - // we are moving an li. Later refocus on p - if (dataAction == "move-local-li") { - current_env.classList.remove("may_select"); - current_env = current_env.parentElement; - current_env.classList.add("may_select"); - current_env_id = current_env.id; - } - editorLog("current_env", current_env); - move_by_id_local(current_env_id, handle_env_id) - } else if (dataAction == "change-title") { - var this_heading = document.getElementById('edit_menu_holder').parentElement.parentElement; - var this_env_id = this_heading.getAttribute("data-parent_id"); - var new_title_form = standard_title_form(this_env_id); - document.getElementById('edit_menu_holder').parentElement.insertAdjacentHTML("afterend",new_title_form); - document.getElementById('edit_menu_holder').parentElement.remove(); - editorLog("change-title in progress") - document.getElementById('actively_editing').focus(); - } else if (dataAction == "change-caption") { - alert("editing captions not implemented yet"); - return ; - var this_caption = document.getElementById('edit_menu_holder').parentElement; - var this_env_id = this_caption.getAttribute("data-source_id"); - var new_title_form = standard_caption_form(this_env_id); - document.getElementById('edit_menu_holder').parentElement.insertAdjacentHTML("afterend",new_title_form); - document.getElementById('edit_menu_holder').parentElement.remove(); - editorLog("change-caption in progress") - document.getElementById('actively_editing').focus(); - } else { - editorLog("unknown dataAction", dataAction); - alert("I don;t know what to do llllllll dataAction " + dataAction) - } - } // dataAction - else if (dataEnv) { // this has to come after dataAction, because if both occur, - // dataAction says to do something, and dataEnv says what to do - e.preventDefault(); // was this handled earlier? - editorLog("in dataEnv", dataEnv); - editorLog("selected a menu item with no action and no location"); - $("#choose_current").parent().addClass("past"); - editorLog("apparently selected", theChooseCurrent); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.setAttribute('class', 'chosen'); - - // if (dataEnv in inner_menu_for()) { // object names a collection, so make submenu - if (dataEnv in submenu_options) { // object names a collection, so make submenu - editorLog("making a menu for", dataEnv); - var edit_submenu = document.createElement('ol'); - edit_submenu.innerHTML = menu_options_for("", dataEnv, "inner"); - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - document.getElementById('choose_current').focus(); - - // determine whether both of these next cases can occur - } else if (dataEnv in objectStructure || dataEnvParent in objectStructure) { - // we just selected an action, so do it - // that probably involves adding something before or after a given object - editorLog("making a new", dataEnv, "within", dataEnvParent); - - var before_after = $("#edit_menu_holder > #edit_menu > .chosen").attr("data-location"); - - if (dataEnv == "source") { - alert(" making source"); - show_source(object_of_interest, before_after); - edit_menu_from_current_editing("entering"); - return - // } else if (dataEnv == "save") { - // save_source(); - // edit_menu_from_current_editing("entering"); - } - editorLog("create object to edit",dataEnv, object_of_interest, before_after); - var new_obj = create_object_to_edit(dataEnv, object_of_interest, before_after); - if (!new_obj) { edit_menu_from_current_editing("entering"); return "" } - editorLog("new_obj", new_obj); - edit_in_place(new_obj, "new"); - var new_obj_id = new_obj.id; - editorLog("are we editing id", new_obj_id); - editorLog("are we editing", new_obj); - editorLog(" JJJ current_editing", current_editing["level"], current_editing["location"].length, current_editing["tree"].length, current_editing["tree"][current_editing["level"]]); - editorLog(" current_editing", current_editing); - object_of_interest.classList.remove("may_select"); - object_of_interest.classList.remove("may_enter"); - if (tmp = document.getElementById('edit_menu_holder')) { tmp.remove() } - if (dataEnv.startsWith("sbs")) { - editorLog("added sbs, now add to it", new_obj_id); - editorLog("document.getElementById(new_obj_id)", document.getElementById(new_obj_id)); - var first_panel_id = document.getElementById(new_obj_id).firstElementChild.firstElementChild.id; - editorLog("first_panel_id", first_panel_id, document.getElementById(first_panel_id)); - make_current_editing_tree_from_id(first_panel_id); - edit_menu_from_current_editing("entering"); - } - } else { - editorLog("Error: unknown dataEnv", dataEnv); - editorLog("Or maybe unknown dataEnvParent", dataEnvParent); - editorLog("moving up the menu -- not"); - alert("Sorry, not implemented yet!"); - theChooseCurrent.classList.remove("chosen"); - theChooseCurrent.parentElement.classList.remove("past"); - theChooseCurrent.setAttribute("id", "choose_current"); - } - } - } // // dataEnv - else { - editorLog("key that is not meaningful when navigating a menu:", e.code) - } - } -} // main menu navigator - -editorLog("adding tab listener"); - -document.addEventListener('keydown', logKeyDown); - -function logKeyDown(e) { - if (e.code == "ShiftLeft" || e.code == "ShiftRight" || e.code == "Shift") { return } - prev_prev_char = prev_char; - prev_char = this_char; - this_char = e; - editorLog("logKey",e,"XXX",e.code); - editorLog("are we editing", document.getElementById('actively_editing')); - editorLog("is there already an edit menu?", document.getElementById('edit_menu_holder')); - - var input_region = document.activeElement; - editorLog("input_region", input_region); - // if we are writing something, keystrokes usually are just text input - if (document.getElementById('actively_editing')) { - editorLog(" we are actively editing"); - - if (e.code == "Tab" && !document.getElementById('local_menu_holder')) { - // disabled for now - e.preventDefault(); - return "" - create_local_menu() - } else if (document.getElementById('local_menu_holder')) { - main_menu_navigator(e); - } else { - local_editing_action(e) - } - - } else if (document.getElementById('phantomobject')) { - var the_phantomobject = document.getElementById('phantomobject'); - - if (the_phantomobject.classList.contains('move')) { - move_object(e) - } else { - alert("do not know what to do with that") - } - } else { - main_menu_navigator(e); - } -} - -document.addEventListener('focus', function() { -// editorLog('focused:', document.activeElement) -// editorLog('which has content XX' + document.activeElement.innerHTML + "VV") - prev_prev_focused_element = prev_focused_element; - prev_focused_element = this_focused_element; - this_focused_element = document.activeElement; - $('.in_edit_tree').removeClass('in_edit_tree'); -// $(':focus').parent().addClass('in_edit_tree'); - $('#edit_menu_holder:first-child').parent().addClass('in_edit_tree'); - $('#edit_menu_holder').prev().addClass('in_edit_tree'); -/* - var edit_tree = $(':focus').parents(); - // put little lines on teh right, to show the local heirarchy - for (var i=0; i < edit_tree.length; ++i) { - if (edit_tree[i].getAttribute('id') == "content") { break } - edit_tree[i].classList.add('in_edit_tree') - } -*/ -}, true); - -function initialize_editing(xml_st) { - - createCookie(chosen_edit_option_key,1,0.01); - // console.log("QQQQQQQQ", xml_st, "PPPPPPPPPP"); - // Space Math uses a blank line to indicate mrows - xml_st = xml_st.replace(/<\/mrow>\s*/g, " \n\\cr\n "); - xml_st = xml_st.replace(//g, " "); - xml_st = xml_st.replace(/<\/mrow>/g, " "); - - xmlToObject(xml_st); - record_children(sourceobj); - internalSource = re_transform_source(); - - console.log("mostly done initializing"); - console.log(internalSource); - - current_editing = { - "level": 0, - "location": [0], - // "tree": [ [document.getElementById(top_level_id)] ] - "tree": [ [internalSource.root_data.id] ] - } - console.log("initial current_editing", current_editing); - - e_tree = current_editing["tree"]; - editorLog("e_tree", e_tree); - e_level = current_editing["level"]; - editorLog("e_level", e_level); - e_location = current_editing["location"]; - editorLog("e_location", e_location); - console.log(" making the initial menu for", e_tree[e_level][e_location]); - -// document.getElementById("content").firstElementChild.setAttribute("id", internalSource.root_data.id); - - console.log("replacing by id", internalSource.root_data.id); - replace_by_id(internalSource.root_data.id, "html"); - - edit_menu_for(e_tree[e_level][e_location], "entering") - - console.log("internalSource internalSource internalSource internalSource internalSource internalSource", internalSource); - - // done rebulding HTML, so now process math - // NOT CURRENTLY DOING ANYTHING???? - console.log("ready to edit, so typeset the math"); - document.getElementById("content").classList.add("canedit"); - MathJax.typesetPromise(); -} - -var this_source_txt; -var source_url = window.location.href; -source_url = source_url.replace(/(#|\?).*/, ""); -source_url = source_url.replace(/html$/, "ptx"); -fetch(source_url).then( - function(u){ return u.text();} - ).then( - function(text){ - this_source_txt = text; - // console.log("ppppppppppp this_source_txt",this_source_txt) - if (this_source_txt.includes("404 Not")) { - console.log("Error: source unavailable") - } else if (this_source_txt.includes(" 0) { -// bad code because I dopied and was too lazy to rewrite - parseLog(xml.nodeName, "has attributes", xml.attributes); - for (var j = 0; j < xml.attributes.length; j++) { - var attribute = xml.attributes.item(j); - if (attribute.nodeName == "permid") { this_id = attribute.nodeValue } - // these look backward, but that seems to be how PTX does it currently - if (!this_id && attribute.nodeName == "xml:id") { this_id = attribute.nodeValue } - } - } - if (!this_id) { - this_id = randomstring() - } - return this_id -} - -var sourceobj = {}; -var new_top_id = ""; - -function xmlToObject(xml_st) { - var xml; - if (typeof xml_st == "string") { - // parseLog("xml starts", xml_st.slice(0,50)); - parser = new DOMParser(); - xml = parser.parseFromString(xml_st, "text/xml"); -// xml = $.parseXML(xml_st); - } else { - xml = xml_st - } - - parseLog("xml", xml); - parseLog("xml.nodeName", xml.nodeName, "xml.nodeType", xml.nodeType); -// var obj = {}; - var this_id = ""; - var this_node_content = xml.nodeValue; - - if (xml.nodeType == 9) { // document - xml = xml.documentElement; - } - - parseLog("this_node_content", this_node_content); - - if (xml.nodeType == 1) { // element - this_id = xml_id_of(xml); - if (!new_top_id) { - new_top_id = this_id; - top_level_id = new_top_id; - sourceobj["root_data"] = {"id": new_top_id, "number_base": "X.Y"} - } - parseLog("found this_id", this_id); - var this_entry = {}; - this_entry["xml:id"] = this_id; - if (["ol", "ul", "dl"].includes(xml.nodeName)) { - this_entry["sourcetag"] = "list" -/* - } else if (["me", "men"].includes(xml.nodeName)){ - this_entry["sourcetag"] = "displaymath" -*/ - } else { - this_entry["sourcetag"] = xml.nodeName; - } - - this_node_content = ""; - if (xml.hasChildNodes()) { - for (var i = 0; i < xml.childNodes.length; i++) { - var item = xml.childNodes.item(i); - if (item.nodeType == 8) { - //comment, so skip - } else if (item.nodeType == 3) { // text - this_node_content += item.nodeValue - } else if (item.nodeType == 1) { // element - var sub_node_id = xmlToObject(item); // the contents, in certain cases - if (contained_objects.includes(item.nodeName)) { - this_entry[item.nodeName] = sub_node_id - } else { - this_node_content += "<&>" + sub_node_id + "<;>" - } - } else { - parseLog("what to do with this node?", item) - } - } - } - if (this_node_content) { - this_entry["content"] = this_node_content.trim(); - } - - if (xml.attributes.length > 0) { - // parseLog(xml.nodeName, "has attributes", xml.attributes); - for (var j = 0; j < xml.attributes.length; j++) { - var attribute = xml.attributes.item(j); - if (attribute.nodeName == "source") { this_entry["source"] = attribute.nodeValue } - else if (attribute.nodeName == "ref") { this_entry["ref"] = attribute.nodeValue } - else if (attribute.nodeName == "text") { this_entry["text"] = attribute.nodeValue } - // width for images, widths for sbs - else if (attribute.nodeName == "width") { - var widthvalue = attribute.nodeValue; - if (widthvalue.endsWith("%")) { widthvalue = widthvalue.slice(0,-1); } - this_entry["width"] = widthvalue - } else if (attribute.nodeName == "margins") { - var marginsvalues = attribute.nodeValue.split(' '); - if (marginsvalues.length == 1) { - var margin = marginsvalues[0]; - if (margin.endsWith("%")) { margin = margin.slice(0,-1); } - this_entry["marginleft"] = margin; - this_entry["marginright"] = margin; - } else if (marginsvalues.length == 2) { - var [marginleft, marginright] = marginsvalues; - if (marginleft.endsWith("%")) { marginleft = marginleft.slice(0,-1); } - if (marginright.endsWith("%")) { marginright = marginright.slice(0,-1); } - this_entry["marginleft"] = marginleft; - this_entry["marginright"] = marginright; - } else { - console.log("Error: too many margins in", xml) - } - } - } - } - // The CAT expects a width and margins on an image, but those myght not be - // specified in the source. So add those if not present. - if (xml.nodeName == "image") { - console.log("image attributes", xml.attributes, "ddd", xml.attributes["source"]); - if (!xml.attributes["width"]) { - console.log("no width"); - this_entry["width"] = 100; - } - if (!xml.attributes["margins"]) { - console.log("no margins"); - this_entry["marginleft"] = 0; - this_entry["marginright"] = 0; - } - } - - if (xml.attributes) { - parseLog(xml, "has attributes", xml.attributes) - } -// parseLog("item", item); - if (contained_objects.includes(xml.nodeName)) { - return this_node_content - } else { - sourceobj[this_id] = this_entry - return this_id - } - } else if (xml.nodeType == 8) { - // comment node, so do nothing - this_node_content = "" - } else if (xml.nodeType == 3) { // text - // can this, or the previous case, actually happen? - } else { - console.log("failed to deal with", xml) - } -} - -function record_children(internal_src) { - for (key in internal_src) { - var this_item = internal_src[key]; - if ("content" in this_item) { // skip empty tags - var this_content = this_item["content"]; - parseLog("this_content", this_content); - var child_items = this_content.match(/<&>.*?<;>/g) || ""; - for (var j=0; j < child_items.length; ++j) { - var this_child = child_items[j].slice(3,-3); - parseLog("this_child", this_child, "has a parent", key); - internal_src[this_child]["parent"] = [key, "content"] - } - } - // need to handle content and statement better - if ("statement" in this_item) { // skip empty tags - var this_statement = this_item["statement"]; - // parseLog("this_statement", this_statement); - var child_items = this_statement.match(/<&>.*?<;>/g) || ""; - for (var j=0; j < child_items.length; ++j) { - var this_child = child_items[j].slice(3,-3); - // parseLog("this_child", this_child, "has a parent", key); - internal_src[this_child]["parent"] = [key, "statement"] - } - } - if ("proof" in this_item) { // skip empty tags - var this_proof = this_item["proof"]; - // parseLog("this_statement", this_statement); - var child_items = this_proof.match(/<&>.*?<;>/g) || ""; - for (var j=0; j < child_items.length; ++j) { - var this_child = child_items[j].slice(3,-3); - // parseLog("this_child", this_child, "has a parent", key); - internal_src[this_child]["parent"] = [key, "proof"] - } - } - } - return internal_src -} - -// transofrm again, to un-wrap list in p - -/* rewrite with sourceobj not global */ -function re_transform_source() { - var ids_to_delete = []; - for (var id in sourceobj) { - var this_item = sourceobj[id]; - if (this_item["sourcetag"] == "list") { - // I think this takes the list out of its parent p, - // but I forgot to write this comment when I first wrote the code. - parseLog("found a list", this_item); - var [parent_id, parent_content] = this_item["parent"]; - parseLog("with parent", sourceobj[parent_id]); - if (sourceobj[parent_id]["sourcetag"] == "p") { - var [parent_parent_id, parent_parent_content] = sourceobj[parent_id]["parent"]; - parseLog("with parents parent", sourceobj[parent_parent_id]); - // need to skip the intermediate parent - var old_p_p_content = sourceobj[parent_parent_id][parent_parent_content]; - var new_p_p_content = old_p_p_content.replace("<&>" + parent_id + "<;>", "<&>" + id + "<;>"); - sourceobj[parent_parent_id][parent_parent_content] = new_p_p_content; - sourceobj[id]["parent"] = [parent_parent_id, parent_parent_content]; - // then eliminate the intermediate parent - parseLog("deleting", parent_id); - // delete sourceobj[parent_id]; - ids_to_delete.push(parent_id); - parseLog("now sourceobj[parent_parent_id]", sourceobj[parent_parent_id]) - } - } else if (this_item["sourcetag"] == "image") { - if ("width" in this_item && !("marginleft" in this_item)) { - parseLog("no width in" + this_item["xml:id"]) - var width = parseInt(this_item["width"]); - var margins = (100 - width)*0.5; - this_item["marginleft"] = margins; - this_item["marginright"] = margins; - } - } else if (["md", "mdn", "me", "men"].includes(this_item["sourcetag"])) { - // to handle the case of more than one displaymath in a p, - // we do it in two passes. First we just record the ids of the me/men's. - // Then we simplify the problem by handling the displaymath in the - // order they occur. - parseLog("found displaymath", this_item); - parseLog("with parent", sourceobj[this_item["parent"][0]]); - var displaymath_id= this_item["xml:id"]; - if ("includedmath" in sourceobj[this_item["parent"][0]]) { - sourceobj[this_item["parent"][0]]["includedmath"].push("<&>" + displaymath_id + "<;>") - } else { - sourceobj[this_item["parent"][0]]["includedmath"] = ["<&>" + displaymath_id + "<;>"] - } - } else if (["caption"].includes(this_item["sourcetag"])) { - parseLog("found a caption", this_item); - var [parent_id, parent_content] = this_item["parent"]; - parseLog("with parent", sourceobj[parent_id]); - if (sourceobj[parent_id]["sourcetag"] == "figure") { - var old_p_content = sourceobj[parent_id][parent_content]; - var new_p_content = old_p_content.replace("<&>" + id + "<;>", ""); - sourceobj[parent_id][parent_content] = new_p_content; - sourceobj[parent_id]["captiontext"] = sourceobj[id]["content"]; - // then eliminate the caption object, because now it is an attribute of a figure - // delete sourceobj[id]; - ids_to_delete.push(id); - parseLog("now sourceobj[parent_id]", sourceobj[parent_id]) -alert("testing") - } else { alert("error: caption not in figure") } - } - } - // now go through and fix the "p" containing displaymath - for (var id in sourceobj) { - var this_item = sourceobj[id]; - if (this_item["sourcetag"] == "p") { - if ("includedmath" in this_item) { - console.log("found includedmath", this_item); - var outer_parent = this_item["parent"]; - var context_of_outer_parent = sourceobj[outer_parent[0]][outer_parent[1]]; - console.log("this item id", id, "with parent", outer_parent, "in context", context_of_outer_parent); - var these_includedmath = this_item["includedmath"]; - var this_content = this_item["content"]; - var these_includedmath_index = []; - for (var j=0; j < these_includedmath.length; ++j) { - var this_math_tag = these_includedmath[j]; - these_includedmath_index.push([this_content.indexOf(this_math_tag),this_math_tag]); - console.log("this_math_tag", this_math_tag, "has index", this_content.indexOf(this_math_tag)) - } - these_includedmath_index.sort(); - parseLog("sorted list", these_includedmath_index) - - // var displaymath_parent_original_content = sourceobj[outer_parent[0]]["content"]; - parseLog("ocntent before splitting up", context_of_outer_parent); - this_math_tag = these_includedmath_index[0][1]; - parseLog("this_math_tag", this_math_tag); - var this_math_id = this_math_tag.slice(3,-3); - parseLog("this_math_id", this_math_id); - parseLog("with source", sourceobj[this_math_id]); - // move punctuation inside the display math - // (for easier editing. move it back out later) - var find_char_after = new RegExp('^(.*' + this_math_tag + ")(.)\s*(.*)$", "s"); - var char_after = this_content.replace(find_char_after, "$2"); - if ([".", ",", ";", ":"].includes(char_after)) { - console.log("found punctuation", char_after); - this_content = this_content.replace(find_char_after, "$1$3"); // go back an omit white space - sourceobj[this_math_id]["content"] += char_after - } - // the original p ends at the first displaymath - var displaymath_id_and_before = new RegExp('^.*' + this_math_tag, "s"); // s = dotAll - var displaymath_id_and_after = new RegExp(this_math_tag + '.*$', "s"); - sourceobj[id]["content"] = - this_content.replace(displaymath_id_and_after, ""); - sourceobj[id]["sourcetag"] = "ip" - this_content = this_content.replace(displaymath_id_and_before, ""); - parseLog("updated this_content", this_content); - // the first displaymath now has a different parent - sourceobj[this_math_id]["parent"] = outer_parent; - // that parent needs to know where to put the first displaymath - context_of_outer_parent = context_of_outer_parent.replace("<&>" + id + "<;>", "<&>" + id + "<;>" + "\n" + this_math_tag); - parseLog("updated context_of_outer_parent", context_of_outer_parent); - sourceobj[outer_parent[0]][outer_parent[1]] = context_of_outer_parent; - // here need to check if this_content is nonempty (after removing trailing white space - var new_id = "XXXX" + randomstring(); - sourceobj[new_id] = {"xml:id":new_id, "sourcetag": "mp"}; - sourceobj[new_id]["content"] = this_content; - sourceobj[new_id]["parent"] = outer_parent; - context_of_outer_parent = context_of_outer_parent.replace(this_math_tag, this_math_tag + "\n" + "<&>" + new_id + "<;>"); - sourceobj[outer_parent[0]][outer_parent[1]] = context_of_outer_parent; - for (var j=1; j < these_includedmath_index.length; ++j) { - this_math_tag = these_includedmath_index[j][1]; - this_math_id = this_math_tag.slice(3,-3); - - // move punctuation inside the display math - // (for easier editing. move it back out later) - var find_char_after = new RegExp('^(.*' + this_math_tag + ")(.)\s*(.*)$", "s"); - var char_after = this_content.replace(find_char_after, "$2"); - if ([".", ",", ";", ":"].includes(char_after)) { - console.log("found punctuation", char_after); - this_content = this_content.replace(find_char_after, "$1$3"); // go back an omit white space - sourceobj[this_math_id]["content"] += char_after - } - - displaymath_id_and_before = new RegExp('^.*' + this_math_tag, "s"); // s = dotAll - displaymath_id_and_after = new RegExp(this_math_tag + '.*$', "s"); - sourceobj[new_id]["content"] = this_content.replace(displaymath_id_and_after, ""); - this_content = this_content.replace(displaymath_id_and_before, ""); - // this displaymath now has a different parent - sourceobj[this_math_id]["parent"] = outer_parent; - // that parent needs to know where to put the first displaymath - context_of_outer_parent = context_of_outer_parent.replace("<&>" + new_id + "<;>", "<&>" + new_id + "<;>" + "\n" + this_math_tag); - sourceobj[outer_parent[0]][outer_parent[1]] = context_of_outer_parent; - // omit next if this_content is only white space - new_id = "XXXX" + randomstring(); - sourceobj[new_id] = {"xml:id":new_id, "sourcetag": "mp"}; - sourceobj[new_id]["content"] = this_content; - sourceobj[new_id]["parent"] = outer_parent; - context_of_outer_parent = context_of_outer_parent.replace(this_math_tag, this_math_tag + "\n" + "<&>" + new_id + "<;>"); - sourceobj[outer_parent[0]][outer_parent[1]] = context_of_outer_parent; - } - sourceobj[new_id]["sourcetag"] = "fp" - } - } - } - // trim leading white space in paragraph content - for (var id in sourceobj) { - var this_item = sourceobj[id]; - if (["p", "ip", "mp", "fp"].includes(this_item["sourcetag"])) { - var this_content = sourceobj[id]["content"]; - this_content = this_content.replace(/\n +/g, "\n"); - sourceobj[id]["content"] = this_content; - } else if (["me", "men", "md", "mdn"].includes(this_item["sourcetag"])) { - var this_content = sourceobj[id]["content"]; - this_content = this_content.replace(/\n +/g, "\n "); - sourceobj[id]["content"] = this_content; - } - // next also needs table (or whatever it is that has a caption) - if (["figure"].includes(this_item["sourcetag"])) { - editorLog("adjusting a figure", this_item); - // ??? next line should involve captiontext instead of caption ? - var this_caption = sourceobj[id]["caption"]; - this_caption = this_caption.replace(/\n +/g, "\n"); - sourceobj[id]["captiontext"] = this_caption; - } - } - - for (var j=1; j < ids_to_delete.length; ++j) { - // delete sourceobj[ids_to_delete[j]] - } - - return sourceobj; -} - diff --git a/slides-annotated/_static/pretext/js/highlight.js b/slides-annotated/_static/pretext/js/highlight.js deleted file mode 100755 index 98f906a..0000000 --- a/slides-annotated/_static/pretext/js/highlight.js +++ /dev/null @@ -1,480 +0,0 @@ - -/* -highlight_css = document.createElement('style'); -highlight_css.type = "text/css"; -highlight_css.id = "highlight_css"; -document.head.appendChild(highlight_css); -var css_for_hl = 'span.hl { background: yellow; }\n'; -css_for_hl += '#hlmenu { position: absolute; top: 300px; left: 200px;}\n'; -css_for_hl += '#hlmenu { padding: 8px; background: #FFF; }\n'; -css_for_hl += '#hlmenu { box-shadow: 8px 10px 5px #888; border: 1px solid #aaa;}\n'; -css_for_hl += '#hlmenu .hldelete { background: #fdd; }'; -css_for_hl += '#hlmenu .hldelete:hover { background: #fbb; }'; -css_for_hl += '#hlmenu .hlcopy { background: #ddf; }'; -css_for_hl += '#hlmenu .hlcopy:hover { background: #bbf; }'; -css_for_hl += '#hlmenu .dismiss:hover { background: #ff9; }'; -css_for_hl += '#hlmenu > div { padding: 4px; font-size: 90%}'; -highlight_css.innerHTML = css_for_hl; -*/ - -hlmenu = document.createElement('div'); -hlmenu.id = "hlmenu"; -hlmenu.style.display = "none"; -hlmenu_contents = '
    copy to clipboard
    \n'; -hlmenu_contents += '
    delete highlight
    \n'; -hlmenu_contents += '
    dismiss menu
    '; -hlmenu.innerHTML = hlmenu_contents; -document.body.appendChild(hlmenu); - -var all_highlights = localStorage.getObject("all_highlights"); -if (!all_highlights) { - console.log("no highlights on this page",all_highlights); - all_highlights= {}; -} else { - console.log("highlights already",all_highlights); -} - -console.log("all_highlights.keys()", Object.keys(all_highlights)); -console.log("waiting for MathJax"); -MathJax.Hub.Register.StartupHook("End",function () { - // need to wait for MathJax, because MathJax changes the number of nodes in a paragraph - console.log("MathJax is done"); - display_all_highlights(all_highlights, Object.keys(all_highlights), 0); -}); - - -/* -for (var key in all_highlights) { - var this_key = key; - var these_highlights = all_highlights[key]; - console.log("adding highlights to", key); -// await display_highlights_on(key, all_highlights[key], 0) - for (var i=0; i< these_highlights.length; ++i) { - hl = these_highlights[i]; - console.log("inserting highlight",i,"which is",hl, "on", key); - // display_one_highlight(key, hl); -//fails because - setTimeout(function() { display_one_highlight(this_key, hl)}, i*2000); - - } -} -*/ - -function index_of_child(child) { - var i = 0; - while( (child = child.previousSibling) != null ) - {i++ } - return i -} - -function increment_id(list_of_things_with_ids) { // assume ids are of the form xxxxNN with N a digit and x a non-digit - console.log("incrementing id on", list_of_things_with_ids); - if (list_of_things_with_ids.length == 0) { - return 0 - } - - id_start = list_of_things_with_ids[0]["id"].replace(/^(.*?)[0-9]+$/, "$1"); - current_endings = []; - for (var i=0; i < list_of_things_with_ids.length; ++i) { - current_endings.push(list_of_things_with_ids[i]["id"].replace(/^.*?([0-9]+)$/, "$1")); - } - console.log("existing id endings", current_endings); - current_max = Math.max(...current_endings); - return id_start + (parseInt(current_max) + 1) -} - -function enclosing_p_or_li(obj) { - console.log("obj.tagName", obj.tagName, "ggg",obj); - if (!obj) { - console.log("problem with previous object"); - return null - } - else if (obj.tagName == 'P' || obj.tagName == 'LI') { - return obj - } - return enclosing_p_or_li(obj.parentNode) -} - -// If you just loop ofer the highlights to add them, -// you end up with a race condition because each highlight changes -// the structure of the paragraph. -async function display_one_highlight(parent_id, hl) { - var the_parent = document.getElementById(parent_id); - if (!the_parent) { - console.log("this id not on this page:", parent_id); - return - } - console.log("setting", hl, "on", parent_id); - var st_node_ind = hl['start_nn']; - var st_offset = hl['start_offset']; - var end_node_ind = hl['end_nn']; - var end_offset = hl['end_offset']; - console.log("st_node_ind", st_node_ind, "st_offset", st_offset, "end_node_ind", end_node_ind, "end_offset", end_offset); - // other error checks: same parent - if (st_offset < 0 || st_node_ind > the_parent.childNodes.length || end_node_ind > the_parent.childNodes.length || st_offset > the_parent.childNodes[st_node_ind].textContent.length || end_offset < 0 || end_offset > the_parent.childNodes[end_node_ind].textContent.length) { - console.log("highlight data inconsistent with paragraph structure that contains", the_parent.childNodes.length, "nodes"); - return - } - - let this_range = document.createRange(); - console.log("setting this_range.setStart", the_parent.childNodes[st_node_ind], "with offset", st_offset, "out of", the_parent.childNodes[st_node_ind].textContent.length); - this_range.setStart(the_parent.childNodes[st_node_ind], st_offset); - this_range.setEnd(the_parent.childNodes[end_node_ind], end_offset); - var inside_part = document.createElement("span") - inside_part.classList.add("hl"); - inside_part.id = hl['id']; - console.log("inside_part", inside_part, "going inside this_range",this_range); - console.log("in the_parent",the_parent); - this_range.surroundContents(inside_part); - return; -} - -//var display_highlights_on = function(parent_id, highlights_on, ind) { -async function display_highlights_on(parent_id, highlights_on, ind) { - console.log("display_highlights_on", parent_id, "xxxx", ind, "out of", highlights_on.length); - if (ind < highlights_on.length) { - console.log("about to display one highlight, number", ind, "on", parent_id); - await display_one_highlight(parent_id, highlights_on[ind]); - ++ind; - await display_highlights_on(parent_id, highlights_on, ind) - } - return; -} - -async function display_all_highlights(every_highlight, hl_p_keys, i) { - console.log("making hl on", hl_p_keys[i]); - if (i < hl_p_keys.length) { - await display_highlights_on(hl_p_keys[i], every_highlight[hl_p_keys[i]], 0); - ++i; - await display_all_highlights(every_highlight, hl_p_keys, i) - } - return; -} - -var DELAY = 500, clicks = 0, timer = null; -$("p[id], li[id]").on("click", function(e) { - clicks++; //count clicks - - if(clicks === 1) { - - if (e.target.classList.contains("hl")) { - modifyhighlight(e); - clicks = 0; - } else { - timer = setTimeout(function() { - newhighlight() - clicks = 0; //after action performed, reset counter - }, DELAY); - - } - - - } else if (clicks === 2) { - timer2 = setTimeout(function() { - clearTimeout(timer); - // alert("Double Click"); - clicks = 0; - }, DELAY/2); - } else { - clearTimeout(timer); //prevent single-click action - clearTimeout(timer2); //prevent double-click action - // alert("Triple Click"); //perform triple-click action - clicks = 0; //after action performed, reset counter - } -}); - -function save_highlights() { - hl_data = {"action": "save", "user": uname, "pw": emanu, "bookID": bodyID, "type": "highlights", "hl": JSON.stringify(all_highlights)} - $.ajax({ - url: "https://aimath.org/cgi-bin/u/highlights.py", - type: "post", - data: JSON.stringify(hl_data), - dataType: "json", - success: function(data) { - console.log("something", data, "back from highlight"); - // alert(data); - }, - error: function(errMsg) { - console.log("seems to be an error?",errMsg); - // alert("Error\n" + errMsg); - } - }); - - console.log("just ajax sent", JSON.stringify(reading_questions_object)); -} - -function newhighlight() { - var this_selection = window.getSelection(); - console.log("UUUUUUUUUUUUUUUUUUUUUUUUUUU"); - console.log("selection", this_selection, "as string", this_selection.toString(), "length", this_selection.toString().length); - if(this_selection.toString().length >= 3) { - console.log("this_selection", this_selection); - console.log("this_selection parentNode", this_selection.parentNode); - - num_selected_ranges = this_selection.rangeCount; - console.log("this_selection.rangeCount", this_selection.rangeCount); - console.log("this_selection.getRangeAt(0)", this_selection.getRangeAt(0)); - console.log("this_selection.getRangeAt(num_selected_ranges)", this_selection.getRangeAt(num_selected_ranges-1)); - console.log("this_selection.getRangeAt(0).startContainer", this_selection.getRangeAt(0).startContainer); - console.log("this_selection.getRangeAt(0).endContainer", this_selection.getRangeAt(0).endContainer); - console.log("this_selection.getRangeAt(-1).startContainer", this_selection.getRangeAt(num_selected_ranges-1).startContainer); - console.log("this_selection.getRangeAt(-1).endContainer", this_selection.getRangeAt(num_selected_ranges-1).endContainer); - console.log("start equals end", this_selection.getRangeAt(0).startContainer == this_selection.getRangeAt(0).endContainer); - console.log("this_selection.getRangeAt(0).startContainer.parent", this_selection.getRangeAt(0).startContainer.parentNode); - console.log("this_selection.getRangeAt(0).endContainer.parent", this_selection.getRangeAt(0).endContainer.parentNode); - starting_parent = enclosing_p_or_li(this_selection.getRangeAt(0).startContainer); - starting_parent_id = starting_parent.id; - ending_parent_id = enclosing_p_or_li(this_selection.getRangeAt(num_selected_ranges-1).endContainer).id; - console.log("starting parent", enclosing_p_or_li(this_selection.getRangeAt(0).startContainer)); - console.log("starting_parent.childNodes", starting_parent.childNodes); - console.log("starting_parent.childNodes.length", starting_parent.childNodes.length); - console.log("ending parent", enclosing_p_or_li(this_selection.getRangeAt(0).endContainer)); - console.log("index of starting node", index_of_child(this_selection.getRangeAt(0).startContainer)); - console.log("which is", starting_parent.childNodes[index_of_child(this_selection.getRangeAt(0).startContainer)]); - console.log("index of ending node", index_of_child(this_selection.getRangeAt(num_selected_ranges-1).endContainer)); - console.log("which is", starting_parent.childNodes[index_of_child(this_selection.getRangeAt(num_selected_ranges-1).endContainer)]); - console.log("XXXXXXXXXXXXXXXXXXXXXXX"); - starting_node = this_selection.getRangeAt(0); - starting_node_container = starting_node.startContainer; - starting_node_number = index_of_child(starting_node_container); - starting_node_offset = starting_node.startOffset; - console.log("starting_node", starting_node, "starting_node_container", starting_node_container); - console.log("starting_parent.childNodes[0]", starting_parent.childNodes[0]); - ending_node = this_selection.getRangeAt(num_selected_ranges-1); - ending_node_container = ending_node.endContainer; - console.log("ending_node", ending_node, "ending_node_container", ending_node_container); - ending_node_number = index_of_child(ending_node_container); - ending_node_offset = ending_node.endOffset; - console.log("selection starts at character number", starting_node.startOffset, "in node number", index_of_child(starting_node), "of node", starting_node.startContainer, "within", starting_node.startContainer.parentNode,"which is", starting_node); - console.log("selection ends at character number", ending_node.endOffset, "in node number", index_of_child(ending_node_container), "of node", ending_node.endContainer, "within", ending_node.endContainer.parentNode, "which is", ending_node); - -// let this_range = document.createRange(); -// this_range.setStart(starting_parent.childNodes[starting_node_number], starting_node_offset); -// this_range.setEnd(document.getElementById(starting_parent_id).childNodes[ending_node_number], ending_node_offset); -// test_inside_part=document.createElement("span") -// test_inside_part.classList.add("gggg"); -// this_range.surroundContents(test_inside_part); - console.log("num_selected_ranges", num_selected_ranges, "starting_parent_id", starting_parent_id, "ending_parent_id", ending_parent_id); - this_selection.empty(); - console.log("starting_parent_id", starting_parent_id, "ending_parent_id", ending_parent_id); - if (starting_parent_id != ending_parent_id) { - alert("Highlights must be within\none paragraph or list item."); - return "" - } - if (starting_parent != starting_node_container.parentNode) { - starting_node_number = index_of_child(starting_node_container.parentNode) - 1; - console.log("new starting node",starting_node_number, " which is", starting_parent.childNodes[starting_node_number]); - starting_node_offset = starting_parent.childNodes[starting_node_number].length; - } - if (starting_parent != ending_node_container.parentNode) { - ending_node_number = index_of_child(ending_node_container.parentNode) + 1; - console.log("new edngin node",ending_node_number, " which is", starting_parent.childNodes[ending_node_number]); - ending_node_offset = 0; - } - console.log("starting_parent eq st cont parent", starting_parent == starting_node_container.parentNode, "starting_parent eq end cont parent", starting_parent == ending_node_container.parentNode); -// display_one_highlight(starting_parent_id, starting_node_number, starting_node_offset, ending_node_number, ending_node_offset); -// console.log("this_range", this_range); - this_highlight = {"start_nn": starting_node_number, - "start_offset": starting_node_offset, - "end_nn": ending_node_number, - "end_offset": ending_node_offset}; - if (starting_parent_id in all_highlights) { - console.log("the starting_parent_id", starting_parent_id, "is already in all_highlights", all_highlights); - new_id = increment_id(all_highlights[starting_parent_id]); - this_highlight['id'] = new_id; - all_highlights[starting_parent_id].push(this_highlight) - } else { - this_highlight['id'] = starting_parent_id + "-" + "hl" + 1; - all_highlights[starting_parent_id] = [this_highlight] - } - display_one_highlight(starting_parent_id, this_highlight); - localStorage.setObject("all_highlights", all_highlights); - - if (uname != "guest" && role=="student") { - console.log("saving highlights"); - save_highlights(); - } - console.log("all_highlights", all_highlights); - return ""; - } -} - -function modifyhighlight(e) { - this_hl = e.target; - console.log("clicked hl", this_hl.id); - - var x = e.clientX, y = e.clientY; - console.log("x", x, "y", y); - document.getElementById("hlmenu").style.top = (y - 10 + $(window).scrollTop()) + 'px'; - document.getElementById("hlmenu").style.left = (x + 20) + 'px'; - document.getElementById("hlmenu").style.display = 'block'; - document.getElementsByClassName("hlcopy")[0].setAttribute("data-hlid", this_hl.id); - document.getElementsByClassName("hldelete")[0].setAttribute("data-hlid", this_hl.id); -// tooltipSpan.style.left = (x + 20) + 'px'; - - var parent_id = this_hl.id.replace(/^(.*)-[^\-]*$/, "$1"); - var number_of_this_highlight = this_hl.id.slice(-1); - var these_highlights = all_highlights[parent_id]; - var this_highlight = these_highlights[number_of_this_highlight-1]; - console.log("parent id", parent_id, "nunber",number_of_this_highlight); - var num_child_nodes = this_hl.childNodes.length; - console.log("which has", this_hl.childNodes.length, "child nodes"); - for (var i=0; i < num_child_nodes; ++i) { - console.log(i, "node is", this_hl.childNodes[i]) - } - console.log("highlights on this item",all_highlights[parent_id], "of which we clicked", these_highlights[number_of_this_highlight - 1], -"number", number_of_this_highlight, "out of", these_highlights.length ); - for (var i=0; i 0) { - all_highlights[parent_id] = new_highlights - } else { - delete all_highlights[parent_id] - } - - localStorage.setObject("all_highlights", all_highlights); - - - // hide the current highlight - $(hl_to_delete).replaceWith(hl_to_delete.innerHTML); - - document.getElementById(parent_id).normalize(); // because a previous step creates adjacent text nodes - - document.getElementById("hlmenu").style.display = 'none'; -}); - -$('body').on('click','.dismiss', function(e){ - console.log(".dismiss of",this); - the_parent = this.closest("[id]"); - the_parent.style.display = 'none'; -}); diff --git a/slides-annotated/_static/pretext/js/instructor.js b/slides-annotated/_static/pretext/js/instructor.js deleted file mode 100755 index df5a43c..0000000 --- a/slides-annotated/_static/pretext/js/instructor.js +++ /dev/null @@ -1,131 +0,0 @@ - -var icon = { - "warning": "⚠️ ", - "commentary": "☕", - "media": "▶", - "tip": "📣", - "worksheet": "📄", - "assesment": "A+", - "slides": "📻", - "outcomes": "✓" -}; - -var html_words_of = { - "warning": "Common pitfall", - "commentary": "Alert", - "media": "An amusing demo", - "tip": "Tip: discussion point", - "worksheet": "Worksheet:", - "assesment": "Sample exam:", - "slides": "Slides:", - "outcomes": "Learning outcomes" -} - -//
       Word PTX PDF
    ", - -var type_name = { - "warning": "warning", - "commentary": "commentary", - "media": "media", - "tip": "tip", - "worksheet": "worksheet", - "assesment": "assesment", - "slides": "slides", - "outcomes": "outcomes" -}; - -console.log("in instructor.js", role, "role", logged_in, "logged_in"); - -if (role=="instructor") { - console.log(" loading instructor resources"); - - var instructor_resources = document.querySelectorAll(".instructor"); - - console.log('instructor_resources.length', instructor_resources.length); - - var icons_on_this_page = []; - - for (var j=0; j < instructor_resources.length; ++j) { - var instructor_resource = instructor_resources[j]; - var instructor_resource_parent_id = instructor_resource.parentNode.id; - console.log(" XXXXXXXXXXXX instructor_resource.parentNode", instructor_resource.parentNode); - console.log("instructor_resource_parent_id", instructor_resource_parent_id); - if(instructor_resource_parent_id) { - } else { - instructor_resource_parent_id = instructor_resource.parentNode.parentNode.id; - } - - this_type = instructor_resource.getAttribute("data-resource"); - this_icon = icon[this_type]; - var id_of_this_icon = "resourceid" + j; - icons_on_this_page.push([type_name[this_type], this_icon, id_of_this_icon]); - - console.log("this_type", this_type, "this_icon", this_icon, "html_words_of[this_type]", html_words_of[this_type]); - this_item_with_resource = document.getElementById(instructor_resource_parent_id); - console.log("instructor_resource_parent_id", instructor_resource_parent_id, "this_item_with_resource", this_item_with_resource); - - var this_margin_resource = document.createElement('div'); - this_margin_resource.setAttribute('class', 'marginresource'); - this_margin_resource.setAttribute('id', id_of_this_icon); - this_margin_resource.innerHTML = "" + this_icon + ""; - if(!(this_title = instructor_resource.getAttribute("title"))) { - this_title = html_words_of[this_type] - } - if(instructor_resource.hasAttribute("data-content")) { - this_content = instructor_resource.getAttribute("data-content"); - this_title = '' + this_title + ''; - } - var links_html = "" - if(instructor_resource.hasAttribute("data-links")) { - var this_links = instructor_resource.getAttribute("data-links"); - these_links = this_links.split(";"); - links_html = '' - console.log(" OOOOOOOOOOOOOO these_links", these_links, "these_links.length", these_links.length); - if(these_links.length > 0) { - console.log("these_links[0]", these_links[0]); - } - tmpJ = these_links.length; - console.log("tmpJ", tmpJ); - for(var jj=0; jj < these_links.length; ++jj) { - console.log( " UUUUUUUUUUUUUu these_links[jj]", these_links[jj]); - this_type_and_link = these_links[jj].split(","); - if(jj>0) { links_html += ", " } - links_html += '' + this_type_and_link[0] + ''; - } - links_html += 'XX'; - console.log("done adding links to title"); - } - this_title = '' + this_title - if(links_html) { - this_title += links_html - } - this_title += ''; - this_margin_resource.innerHTML += this_title; -// this_item_with_resource.insertBefore(this_margin_resource); - this_item_with_resource.insertBefore(this_margin_resource, this_item_with_resource.firstChild); - console.log("appended to ",this_item_with_resource); - } - - icons_on_this_page.sort(); - - var icon_legend_for_this_page = document.createElement('div'); - var prev_icon = ""; - var icon_list = '' + "" + icons_on_this_page[0][0] + ": "; - for (var j=0; j < icons_on_this_page.length; ++j) { - next_icon = icons_on_this_page[j][1]; - if(j > 0 && next_icon !== prev_icon) { - icon_list += '' + "
    "; - icon_list += '' + "" + icons_on_this_page[j][0] + ": "; - icon_list += '' + next_icon + ''; - } else { - icon_list += '' + next_icon + ''; - } - prev_icon = next_icon; - } - icon_list += ''; - - icon_legend_for_this_page.setAttribute('class', 'iconlegend'); - icon_legend_for_this_page.innerHTML = icon_list - document.body.appendChild(icon_legend_for_this_page); - -} // if logged in as instructor diff --git a/slides-annotated/_static/pretext/js/lib/jquery.espy.min.js b/slides-annotated/_static/pretext/js/lib/jquery.espy.min.js deleted file mode 100755 index 31cffd1..0000000 --- a/slides-annotated/_static/pretext/js/lib/jquery.espy.min.js +++ /dev/null @@ -1,195 +0,0 @@ - -(function(b, u, v) { - function x(b, f, e) { - b = (b + "").match(/^(-?[0-9]+)(%)?$/); - if (!b) return !1; - var c = parseInt(b[1], 10); - b[2] && (c *= f / 100); - return 0 > c ? f + c + (e || 0) : c - } - - function y(k, f) { - function e() { - function b() { - g = +new Date; - f.apply(e, t); - c && (c = clearTimeout(c)) - } - var e = this, - q = +new Date - g, - t = arguments; - c && (c = clearTimeout(c)); - q > k ? b() : c = setTimeout(b, k - q) - } - var c, g = 0; - b.guid && (e.guid = f.guid = f.guid || b.guid++); - return e - } - b.Espy = function(k, f, e) { - function c(a, d) { - b.isPlainObject(a) && (d = a, a = null); - b.extend(t.prototype, d); - null !== a && (w = a) - } - - function g(a) { - if (a = - q(a)) { - var d = a.$el.offset()[a.settings.horizontal ? "left" : "top"] - p.offset[a.settings.horizontal ? "left" : "top"], - h = a.$el[a.settings.horizontal ? "outerWidth" : "outerHeight"](); - b.extend(a, { - start: d, - elSize: h, - end: d + h - }) - } - } - - function r(a) { - // console.log("r(a) with a = ", a); - if (a === v) b.each(m, r); - else if (a = q(a)) { - var d = p[a.settings.horizontal ? "width" : "height"], - h = x(a.settings.size, d), - d = p[a.settings.horizontal ? "left" : "top"] + x(a.settings.offset, d, -h), - c = d + h, - h = a.settings.contain ? d <= a.start && c >= a.end ? "inside" : d + h / 2 > a.start + a.elSize / 2 ? a.settings.horizontal ? "left" : - "up" : a.settings.horizontal ? "right" : "down" : d > a.start && d < a.end || c > a.start && c < a.end || d <= a.start && c >= a.start || d <= a.end && c >= a.end ? "inside" : d > a.end ? a.settings.horizontal ? "left" : "up" : a.settings.horizontal ? "right" : "down"; - a.state !== h && (a.state = h, "function" === typeof w && w.call(a.el, "inside" === h, h), "function" === typeof a.callback && a.callback.call(a.el, "inside" === h, h)) - } - } - - function s(a) { - if (m.hasOwnProperty(a)) return a; - if (b.isPlainObject(a) && m.hasOwnProperty(a.id)) return a.id; - a = b(a)[0]; - var d = !1; - b.each(m, function(b, - c) { - c.el === a && (d = b) - }); - return d - } - - // console.log("nothing yet"); - function q(a) { - return (a = s(a)) ? m[a] : !1 - } - "function" !== typeof f && (e = f, f = 0); - // console.log("k was", k); - var t = function(a) { - b.extend(this, a) - }, - u = function(a, d, c, e) { - this.id = a; - this.el = d; - this.$el = b(d); - this.callback = c; - this.settings = new t(e); - this.configure = function(a, d) { - b.isPlainObject(a) && (d = a, a = null); - b.extend(this.settings, d); - null !== a && (this.callback = a) - } - }, - n = this, - l = b(k); - // console.log("l", l, "l==window", l[0]==window); - k = b.fn.espy.defaults; - // console.log("k is", k); - var w, m = {}, - z = 0; - // because window.offset() is not defined in jQuery 3 (why?!?!?!), - // we have to treat that as a special case (DF 1/28/19) - if (l[0]==window) { offSET = { top: 0, left: 0 } } - else { offSET = l.offset() } - var p = { - top: l.scrollTop(), - left: l.scrollLeft(), - width: l.innerWidth(), - height: l.innerHeight(), - offset: offSET -/* - offset: l.offset() || { - top: 0, - left: 0 - } -*/ - }; - // console.log("p", p); - c(f, b.extend({}, k, e)); - n.add = function(a, d, c) { - b.isPlainObject(d) && (c = d, d = 0); - b(a).each(function(a, b) { - var e = s(b) || "s" + z++; - m[e] = new u(e, b, d, c); - g(e); - r(e) - }) - }; - n.configure = function(a, d, e) { - "function" === typeof a ? (d = a, a = null, b.isPlainObject(d) && (e = d, d = null)) : b.isPlainObject(a) ? (e = a, d = a = null) : b.isPlainObject(d) && (e = d, d = null); - null === a ? (c(d, e), b.each(m, function(a, b) { - g(b) - })) : b(a).each(function(a, b) { - var c = q(b); - c && (c.configure(d, e), g(b)) - }) - }; - n.reload = function(a) { - a === v ? b.each(m, function() { - g(this.id) - }) : - b(a).each(function(a, b) { - var c = s(b); - c && (g(c), r(c)) - }) - }; - n.remove = function(a) { - b(a).each(function(a, b) { - var c = s(b); - c && delete m[c] - }) - }; - n.destroy = function() { - l.off(".espy"); - m = {}; - n = v - }; - n.resize = function() { - b.each(m, function() { - this.reloadOnResize && g(this) - }); - p.width = l.innerWidth(); - p.height = l.innerHeight(); - r() - }; - l.on("scroll.espy", y(k.delay, function() { - p.top = l.scrollTop(); - p.left = l.scrollLeft(); - r() - })); - l.on("resize.espy", y(k.delay, function() { - n.resize() - })) - }; - b.fn.espy = function(k, f) { - var e, c; - e = f && f.context || u; - var g = b.data(e, - "espy") || b.data(e, "espy", new b.Espy(e)); - "string" !== typeof k ? g.add(this, k, f) : (e = k, c = Array.prototype.slice.call(arguments), c[0] = this, "function" === typeof g[e] && g[e].apply(g, c)); - return this - }; - b.fn.espy.defaults = { - delay: 100, - context: window, - horizontal: 0, - offset: 0, - size: "100%", - contain: 0, - reloadOnResize: !0 - } -})(jQuery, window); - - diff --git a/slides-annotated/_static/pretext/js/lib/jquery.min.js b/slides-annotated/_static/pretext/js/lib/jquery.min.js deleted file mode 100755 index 4d9b3a2..0000000 --- a/slides-annotated/_static/pretext/js/lib/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("' + - `` + - '' + - '' + - '' + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - //if (data.rh_result.flags.extra_js_files) { - // for (const jsFile of data.rh_result.flags.extra_js_files) { - // if (jsFile.file == "js/apps/GraphTool/graphtool.min.js" || jsFile.file == "js/apps/Scaffold/scaffold.js") { - // extra_css_files.push({ file: 'js/vendor/bootstrap/css/bootstrap.css', external: '0' }); - // extra_css_files.push({ file: 'themes/math4/math4.css', external: '0' }); - // extra_js_files.push({ file: 'js/vendor/bootstrap/js/bootstrap.js', external: '0' }); - // } - // } - //} - - if (data.rh_result.flags.extra_css_files) data.rh_result.flags.extra_css_files.unshift(...extra_css_files); - else data.rh_result.flags.extra_css_files = extra_css_files; - for (const cssFile of data.rh_result.flags.extra_css_files) { - iframeContents += ''; - } - - if (data.rh_result.flags.extra_js_files) data.rh_result.flags.extra_js_files.unshift(...extra_js_files); - else data.rh_result.flags.extra_js_files = extra_js_files; - for (const jsFile of data.rh_result.flags.extra_js_files) { - iframeContents += ''; - } - - iframeContents += - '' + - '' + - '' + - `` + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'min' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentDocument.querySelectorAll("button.ww-feedback[data-content]").forEach(button => { - iframe.contentWindow.jQuery(button).popover("show"); - const content = iframe.contentDocument.getElementById(button.id.replace("-feedback-button", "-content")); - const popover = content.parentNode.parentNode; - popover.id = button.id.replace("-feedback-button", "-feedback") - button.setAttribute('aria-describedby', popover.id); - if (button.previousElementSibling) - button.previousElementSibling.setAttribute('aria-describedby', popover.id); - popover.querySelector('.arrow').remove(); - const title = popover.querySelector('.popover-title'); - if (button.dataset.emptyContent) { - title.style.borderBottomWidth = 0; - content.parentNode.remove(); - } - if (title.textContent == localize_correct + '!') title.classList.add('correct'); - }); - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - feedbackButton.remove(); - iframe.contentWindow.jQuery(feedbackButton).popover("hide"); - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type == 'radio' && answers[name]) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - feedbackButton.remove(); - iframe.contentWindow.jQuery(feedbackButton).popover("hide"); - } - correct_value = answers[name].correct_choice; - if (input.value == correct_value) input.checked = true; - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - feedbackButton.remove(); - iframe.contentWindow.jQuery(feedbackButton).popover("hide"); - } - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - feedbackButton.remove(); - iframe.contentWindow.jQuery(feedbackButton).popover("hide"); - } - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = ww_domain + '/' + node.attributes.src.value; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // the problem text may come with "hint"s and "solution"s - // each one is an "a" with content "Hint" or "Solution", and an attribute with base64-encoded HTML content - // the WeBWorK knowl js would normally handle this, but we want PreTeXt knowl js to handle it - // so we replace the "a" with the content that should be there for PTX knowl js - // also if hint/sol were missing from the static version, we want these removed here - - const ww_container = document.getElementById(ww_id); - - const hintsolnodes = document.evaluate("//p[a/b]", body_div, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); - if (hintsolnodes) { - let solutionlikewrapper; - for (let i = 0; i < hintsolnodes.snapshotLength; i++) { - const hintsolp = hintsolnodes.snapshotItem(i); - if (!hintsolp) continue; - const hintSolType = hintsolp.textContent.trim().toLowerCase().replace(':', ''); - - if (hintsolp.previousElementSibling.textContent.trim() != 'Hint:' && hintsolp.previousElementSibling.textContent.trim() != 'Solution:') { - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('webwork', 'solutions'); - hintsolp.parentNode.insertBefore(solutionlikewrapper, hintsolp); - } - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || (hintSolType == 'hint' && !b_ptx_has_hint)) continue; - - const knowlDetails = document.createElement('details'); - knowlDetails.classList.add(hintSolType); - knowlDetails.classList.add('solution-like'); - knowlDetails.classList.add('born-hidden-knowl'); - - const knowlSummary = document.createElement('summary'); - const summaryLabel = document.createElement('span'); - summaryLabel.classList.add('type'); - summaryLabel.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(summaryLabel); - knowlDetails.appendChild(knowlSummary); - - const knowlContents = document.createElement('div'); - knowlContents.classList.add(hintSolType); - knowlContents.classList.add('solution-like'); - knowlContents.innerHTML = hintsolp.firstElementChild.dataset.knowlContents; - knowlDetails.appendChild(knowlContents); - - adjustSrcHrefs(knowlContents, ww_domain) - solutionlikewrapper.appendChild(knowlDetails); - } - } - for (let i = 0; i < hintsolnodes.snapshotLength; i++) { - hintsolnodes.snapshotItem(i).remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function createFeedbackButton(id, title, content) { - const feedbackButton = document.createElement('button'); - feedbackButton.dataset.title = title; - feedbackButton.dataset.content = `
    ${content || ''}
    `; - if (!content) feedbackButton.dataset.emptyContent = '1'; - const contentSpan = document.createElement('span'); - contentSpan.style.fontWeight = 1000; - contentSpan.textContent = '\uD83D\uDDE9' - feedbackButton.appendChild(contentSpan); - feedbackButton.type = 'button'; - feedbackButton.classList.add('ww-feedback'); - feedbackButton.style.borderRadius = 0; - - feedbackButton.id = `${id}-feedback-button`; - feedbackButton.dataset.html = true; - feedbackButton.dataset.placement = 'bottom'; - feedbackButton.dataset.trigger = 'click'; - - return feedbackButton; -} diff --git a/slides-annotated/_static/pretext/js/pretext-webwork/2.17/pretext-webwork.js b/slides-annotated/_static/pretext/js/pretext-webwork/2.17/pretext-webwork.js deleted file mode 100755 index 9b809e6..0000000 --- a/slides-annotated/_static/pretext/js/pretext-webwork/2.17/pretext-webwork.js +++ /dev/null @@ -1,1058 +0,0 @@ -//Critical: -// TODO: Think about what should be done for an essay question. - -//Accessibility: - -//Enhancement: -// TODO: In a scaffold problem, adjust the green bar for when one part is correct. -// TODO: Have randomize check that new seed is actually producing new HTML. -// TODO: Don't offer randomize or button unless we know a new version can be produced after trying a few seeds. -// TODO: In a staged problem, Make Interactive button is adjacent to solution knowls; move it. -// TODO: MathQuill -// TODO: Image pop up. -// TODO: Deal with singleResult MultiAnswer problems. - -//Styling: -// TODO: Review all styling in all scenarios (staged/not, correct/partly-correct/incorrect/blank, single/multiple) -// TODO: Sean: I think I'd like to see a slightly larger font size on the buttons - -function handleWW(ww_id, action) { - const ww_container = document.getElementById(ww_id); - const ww_domain = ww_container.dataset.domain; - const ww_problemSource = ww_container.dataset.problemsource; - const ww_sourceFilePath = ww_container.dataset.sourcefilepath; - const ww_course_id = ww_container.dataset.courseid; - const ww_user_id = ww_container.dataset.userid; - const ww_course_password = ww_container.dataset.coursepassword || ww_container.dataset.passwd; - const localize_correct = ww_container.dataset.localizeCorrect || "Correct"; - const localize_incorrect = ww_container.dataset.localizeIncorrect || "Incorrect"; - const localize_blank = ww_container.dataset.localizeBlank || "Blank"; - const localize_submit = ww_container.dataset.localizeSubmit || "Submit"; - const localize_check_responses = ww_container.dataset.localizeCheckResponses || "Check Responses"; - const localize_reveal = ww_container.dataset.localizeReveal || "Reveal"; - const localize_randomize = ww_container.dataset.localizeRandomize || "Randomize"; - const localize_reset = ww_container.dataset.localizeReset || "Reset"; - const runestone_logged_in = (typeof eBookConfig !== 'undefined' && eBookConfig.username !== ''); - // will be null on pages generated prior to late December 2022 - const activate_button = document.getElementById(ww_id + '-button') - - // Set the current seed - if (!action) { - ww_container.dataset.current_seed = ww_container.dataset.seed; - if (runestone_logged_in) { - ww_container.dataset.current_seed = webworkSeedHash(eBookConfig.username + ww_container.dataset.current_seed); - } - } - else if (action == 'randomize') ww_container.dataset.current_seed = Number(ww_container.dataset.current_seed) + 100; - - let loader = document.createElement('div'); - loader.style.position = 'absolute'; - loader.style.left = 0; - loader.style.top = 0; - loader.style.backgroundColor = 'rgba(0.2, 0.2, 0.2, 0.4)'; - loader.style.color = 'white'; - loader.style.width = '100%'; - loader.style.height = '100%'; - loader.style.display = 'flex'; - loader.style.alignItems = 'center'; - loader.style.justifyContent = 'center'; - loader.style.marginTop = '0'; - loader.tabIndex = -1; - const loaderText = document.createElement('span'); - loaderText.textContent = 'Loading'; - loaderText.style.fontSize = '2rem'; - loader.appendChild(loaderText); - ww_container.appendChild(loader); - loader.focus(); - - if (!action) { - // Determine if static version shows hints, solutions, or answers and save that information in the container dataset for later runs. - ww_container.dataset.hasHint = ww_container.getElementsByClassName('hint').length > 0; - ww_container.dataset.hasSolution = ww_container.getElementsByClassName('solution').length > 0; - ww_container.dataset.hasAnswer = ww_container.getElementsByClassName('answer').length > 0; - // Get (possibly localized) label text for hints and solutions. - ww_container.dataset.hintLabelText = ww_container.dataset.hasHint == 'true' - ? ww_container.querySelectorAll('.hint-knowl span.type, details.hint span.type')[0].textContent : 'Hint'; - ww_container.dataset.solutionLabelText = ww_container.dataset.hasSolution == 'true' - ? ww_container.querySelectorAll('.solution-knowl span.type, details.solution span.type')[0].textContent : 'Solution'; - - ww_container.tabIndex = -1; - } - - let url; - - if (action == 'check') { - const iframe = ww_container.querySelector('.problem-iframe'); - const formData = new FormData(iframe.contentDocument.getElementById(ww_id + "-form")); - const params = new URLSearchParams(formData); - url = new URL(ww_domain + '/webwork2/html2xml?' + params.toString()) - url.searchParams.append("answersSubmitted", '1'); - url.searchParams.append('WWsubmit', "1"); - } else { - url = new URL(ww_domain + '/webwork2/html2xml'); - url.searchParams.append("problemSeed", ww_container.dataset.current_seed); - if (ww_problemSource) url.searchParams.append("problemSource", ww_problemSource); - else if (ww_sourceFilePath) url.searchParams.append("sourceFilePath", ww_sourceFilePath); - url.searchParams.append("answersSubmitted", '0'); - url.searchParams.append("displayMode", "MathJax"); - url.searchParams.append("courseID", ww_course_id); - url.searchParams.append("userID", ww_user_id); - url.searchParams.append("course_password", ww_course_password); - url.searchParams.append("outputformat", "raw"); - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - url.searchParams.append("showSolutions", ww_container.dataset.hasSolution == 'true' ? '1' : '0'); - url.searchParams.append("showHints", ww_container.dataset.hasHint == 'true' ? '1' : '0'); - url.searchParams.append("problemUUID",ww_id); - } - - // get the json and do stuff with what we get - $.getJSON(url.toString(), (data) => { - // Create the form that will contain the text and input fields of the interactive problem. - const form = document.createElement("form"); - form.id = ww_id + "-form"; - - // Create a div for the problem text. - const body_div = document.createElement("div"); - body_div.id = ww_id + "-body"; - body_div.classList.add("exercise", "exercise-like"); - body_div.lang = data.lang; - body_div.dir = data.dir; - - // Dump the problem text, answer blanks, etc. - body_div.innerHTML = data.rh_result.text; - - // Replace all hn headings with h6 headings. - for (const tag_name of ['h6', 'h5', 'h4', 'h3', 'h2', 'h1']) { - const headings = body_div.getElementsByTagName(tag_name); - for (heading of headings) { - const new_heading = document.createElement("h6"); - new_heading.innerHTML = heading.innerHTML; - cloneAttributes(new_heading, heading); - new_heading.classList.add('webwork-part'); - heading.replaceWith(new_heading); - } - } - - adjustSrcHrefs(body_div, ww_domain); - - translateHintSol(ww_id, body_div, ww_domain, - ww_container.dataset.hasHint == 'true', ww_container.dataset.hasSolution == 'true', - ww_container.dataset.hintLabelText, ww_container.dataset.solutionLabelText) - - // insert previous answers - if (runestone_logged_in) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const mqAnswers = answersObject.mqAnswers; - for (const mqAnswer in mqAnswers) { - const mqInput = body_div.querySelector('input[id=' + mqAnswer + ']'); - if (mqInput && mqInput.value == '') { - mqInput.setAttribute('value', mqAnswers[mqAnswer]); - } - } - const answers = answersObject.answers; - for (const answer in answers) { - const input = body_div.querySelector('input[id=' + answer + ']'); - if (input && input.value == '') { - input.setAttribute('value', answers[answer]); - } - if (input && input.type.toUpperCase() == 'RADIO') { - const buttons = body_div.querySelectorAll('input[name=' + answer + ']'); - for (const button of buttons) { - if (button.value == answers[answer]) { - button.setAttribute('checked', 'checked'); - } - } - } - if (input && input.type.toUpperCase() == 'CHECKBOX') { - const checkboxes = body_div.querySelectorAll('input[name=' + answer + ']'); - for (const checkbox of checkboxes) { - // This is not a bulletproof approach if the problem used input values that are weird - // For example, with commas in them - // However, we are stuck with WW providing answers[answer] as a string like `[value0, value1]` - // and note that it is not `["value0", "value1"]`, so we cannot cleanly parse it into an array - let checkbox_regex = new RegExp('(\\[|, )' + checkbox.value + '(, |\\])'); - if (answers[answer].match(checkbox_regex)) { - checkbox.setAttribute('checked', 'checked'); - } - } - } - var select = body_div.querySelector('select[id=' + answer + ']'); - if (select && answers[answer]) { - // answers[answer] may be wrapped in \text{...} that we want to remove, since value does not have this. - let this_answer = answers[answer]; - if (/^\\text\{.*\}$/.test(this_answer)) {this_answer = this_answer.match(/^\\text\{(.*)\}$/)[1]}; - let quote_escaped_answer = this_answer.replace(/"/g, '\\"'); - const option = body_div.querySelector(`select[id="${answer}"] option[value="${quote_escaped_answer}"]`); - if (option) {option.setAttribute('selected', 'selected')}; - } - } - } - - // insert our cleaned up problem text - form.appendChild(body_div); - - // Set up hidden input fields that the form uses - const wwInputs = { - problemSeed: data.inputs_ref.problemSeed, - problemUUID: data.inputs_ref.problemUUID, - psvn: data.inputs_ref.psvn, - courseName: ww_course_id, - courseID: ww_course_id, - userID: ww_user_id, - course_password: ww_course_password, - displayMode: "MathJax", - session_key: data.rh_result.session_key, - outputformat: "raw", - language: data.formLanguage, - showSummary: data.showSummary, - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - showSolutions: ww_container.dataset.hasSolution == 'true' ? '1' : '0', - showHints: ww_container.dataset.hasHint == 'true' ? '1' : '0', - forcePortNumber: data.forcePortNumber - }; - - if (ww_sourceFilePath) wwInputs.sourceFilePath = ww_sourceFilePath; - else if (ww_problemSource) wwInputs.problemSource = ww_problemSource; - - for (const wwInputName of Object.keys(wwInputs)) { - const input = document.createElement('input'); - input.type = 'hidden'; - input.name = wwInputName; - input.value = wwInputs[wwInputName]; - form.appendChild(input); - } - - // Prepare answers object - const answers = {}; - // id the answers even if we won't populate them - Object.keys(data.rh_result.answers).forEach(function(id) { - answers[id] = {}; - }, data.rh_result.answers); - if (ww_container.dataset.hasAnswer == 'true') { - // Update answer data - Object.keys(data.rh_result.answers).forEach(function(id) { - answers[id] = { - correct_ans: this[id].correct_ans, - correct_ans_latex_string: this[id].correct_ans_latex_string, - correct_choice: this[id].correct_choice, - correct_choices: this[id].correct_choices, - }; - }, data.rh_result.answers); - } - - let buttonContainer = ww_container.querySelector('.problem-buttons.webwork'); - // Create the submission buttons if they have not yet been created. - if (!buttonContainer) { - // Hide the original div that contains the old make active button. - ww_container.querySelector('.problem-buttons').classList.add('hidden-content'); - // And the newer activate button if it is there - if (activate_button != null) {activate_button.classList.add('hidden-content');}; - - // Create a new div for the webwork buttons. - buttonContainer = document.createElement('div'); - buttonContainer.classList.add('problem-buttons', 'webwork'); - if (activate_button != null) { - // Make sure the button container follows the activate button in the DOM - activate_button.after(buttonContainer); - } else { - ww_container.prepend(buttonContainer); - } - - // Check button - const check = document.createElement("button"); - check.type = "button"; - check.id = ww_id + '-check'; - check.style.marginRight = "0.25rem"; - check.classList.add('webwork-button'); - - // Adjust if more than one answer to check - const answerCount = body_div.querySelectorAll("input:not([type=hidden])").length + - body_div.querySelectorAll("select:not([type=hidden])").length; - - check.textContent = runestone_logged_in ? localize_submit : localize_check_responses; - check.addEventListener('click', () => handleWW(ww_id, "check")); - - buttonContainer.appendChild(check); - - // Show correct answers button if original PTX has answer knowl. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = document.createElement("button"); - correct.classList.add("show-correct", 'webwork-button'); - correct.type = "button"; - correct.style.marginRight = "0.25rem"; - correct.textContent = localize_reveal; - correct.addEventListener('click', () => WWshowCorrect(ww_id, answers)); - buttonContainer.appendChild(correct); - } - - // randomize button - const randomize = document.createElement("button") - randomize.type = "button"; - randomize.classList.add('webwork-button'); - randomize.style.marginRight = "0.25rem"; - randomize.textContent = localize_randomize; - randomize.addEventListener('click', () => handleWW(ww_id, 'randomize')); - buttonContainer.appendChild(randomize) - - // reset button - const reset = document.createElement("button") - reset.type = "button" - reset.classList.add('webwork-button'); - reset.textContent = localize_reset; - reset.addEventListener('click', () => resetWW(ww_id)); - buttonContainer.appendChild(reset) - } else { - // Update the click handler for the show correct button. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = buttonContainer.querySelector('.show-correct'); - const correctNew = correct.cloneNode(true); - correctNew.addEventListener('click', () => WWshowCorrect(ww_id, answers)); - correct.replaceWith(correctNew); - } - } - - if (action == 'check') { - // Runestone trigger - // TODO: condition on platform=Runestone - $("body").trigger('runestone_ww_check', data) - - const inputs = body_div.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - if (input.type == 'text' && answers[name]) { - const score = data.rh_result.answers[name].score; - let headline = ''; - let correctClass = ''; - if (score >= 1) { - headline = localize_correct + '!'; - correctClass = 'correct'; - } else if (score > 0 && score < 1) { - headline = `${Math.round(score * 100)}% ${localize_correct}.`; - correctClass = 'partly-correct'; - } else if (data.rh_result.answers[name].student_ans == '') { - headline = localize_blank + '.'; - correctClass = 'blank'; - } else if (score <= 0) { - headline = localize_incorrect + '.'; - correctClass = 'incorrect'; - } - let title = `${headline}`; - let message = (data.rh_result.answers[name].ans_message ? data.rh_result.answers[name].ans_message : ''); - input.classList.add(correctClass); - // make a span that contains feedback - feedbackSpan = document.createElement('span'); - feedbackSpan.id = `${ww_id}-${name}-feedback`; - feedbackHeadline = document.createElement('span'); - feedbackHeadline.id = `${ww_id}-${name}-headline`; - feedbackHeadline.textContent = headline; - feedbackSpan.appendChild(feedbackHeadline); - feedbackMessage = document.createElement('span'); - feedbackMessage.id = `${ww_id}-${name}-message`; - feedbackMessage.textContent = message; - feedbackSpan.appendChild(feedbackMessage); - // make a non breaking span to surround input, sr span, and feedback button - let nbSpan = document.createElement('span'); - nbSpan.classList.add("nobreak"); - input.parentNode.insertBefore(nbSpan, input); - nbSpan.appendChild(input); - // put a visibly hidden (screen-reader only) span with feedback - let srSpan = document.createElement('span'); - srSpan.classList.add("visually-hidden"); - srSpan.appendChild(feedbackSpan); - nbSpan.appendChild(srSpan); - // give the feedback to sr users immediately - input.setAttribute('aria-describedby',`${ww_id}-${name}-feedback`); - // make the feedback button - srSpan.after(createFeedbackButton(`${ww_id}-${name}`, title, message)); - - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const score = data.rh_result.answers[name].score; - const student_ans = data.rh_result.answers[name].student_value || data.rh_result.answers[name].student_ans; - const correct_ans = data.rh_result.answers[name].correct_choice || data.rh_result.answers[name].correct_ans; - if (input.value == student_ans) { - if (score == 1) { - input.parentNode.classList.add('correct'); - } else { - input.parentNode.classList.add('incorrect'); - } - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, - (student_ans == correct_ans) - ? `${localize_correct}` : `${localize_incorrect}.`) - feedbackButton.style.marginRight = '0.25rem'; - input.after(feedbackButton); - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const score = data.rh_result.answers[name].score; - const student_ans = data.rh_result.answers[name].student_ans; - const correct_ans = data.rh_result.answers[name].correct_ans; - if (input.value == data.rh_result.answers[name].firstElement) { - const checkbox_div = input.parentNode.parentNode; - if (score == 1) { - checkbox_div.classList.add('correct'); - } else { - checkbox_div.classList.add('incorrect'); - } - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, - (student_ans == correct_ans) - ? `${localize_correct}` : `${localize_incorrect}.`) - checkbox_div.insertBefore(feedbackButton, checkbox_div.firstChild); - } - } - } - - const hiddenInputs = body_div.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - graphtoolContainer.style.position = 'relative'; - const score = data.rh_result.answers[name].score; - let title = ''; - if (score == 1) { - title = `${localize_correct}`; - } else if (score > 0 && score < 1) { - title = `${Math.round(score * 100)}% ${localize_correct}.`; - } else if (data.rh_result.answers[name].student_ans == '') { - // do nothing if the submitted answer is blank and the problem has not already been scored as correct - continue; - } else if (score == 0) { - title = `${localize_incorrect}.`; - } - - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, title, data.rh_result.answers[name].ans_message); - feedbackButton.style.position = 'absolute'; - feedbackButton.style.left = '100%'; - feedbackButton.style.top = 0; - feedbackButton.style.marginLeft = '0.5rem'; - feedbackButton.dataset.bsContainer = 'body'; - graphtoolContainer.appendChild(feedbackButton); - if (score == 1) { - graphtoolContainer.classList.add('correct'); - } else { - graphtoolContainer.classList.add('incorrect'); - } - - } - } - - const selects = body_div.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const score = data.rh_result.answers[name].score; - let title = ''; - if (score == 1) { - headline = localize_correct + '!'; - correctClass = 'correct'; - } else { - headline = localize_incorrect + '.'; - correctClass = 'incorrect'; - } - select.classList.add(correctClass); - title = `${headline}`; - // make a span that contains feedback - feedbackSpan = document.createElement('span'); - feedbackSpan.id = `${ww_id}-${name}-feedback`; - feedbackHeadline = document.createElement('span'); - feedbackHeadline.id = `${ww_id}-${name}-headline`; - feedbackHeadline.textContent = headline; - feedbackSpan.appendChild(feedbackHeadline); - // make a non breaking span to surround select, sr span, and feedback button - let nbSpan = document.createElement('span'); - nbSpan.classList.add("nobreak"); - select.parentNode.insertBefore(nbSpan, select); - nbSpan.appendChild(select); - // put a span around select since select does not support ::after pseudo elements - let psSpan = document.createElement('span'); - psSpan.classList.add("select-wrapper", correctClass); - select.parentNode.insertBefore(psSpan, select); - psSpan.appendChild(select); - // put a visibly hidden (screen-reader only) span with feedback - let srSpan = document.createElement('span'); - srSpan.classList.add("visually-hidden"); - srSpan.appendChild(feedbackSpan); - nbSpan.appendChild(srSpan); - // give the feedback to sr users immediately - select.setAttribute('aria-describedby',`${ww_id}-${name}-feedback`); - // make the feedback button - srSpan.after(createFeedbackButton(`${ww_id}-${name}`, title)); - } - } - - let iframeContents = '' + - '' + - `` + - '' + - '' + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - //if (data.rh_result.flags.extra_js_files) { - // for (const jsFile of data.rh_result.flags.extra_js_files) { - // if (jsFile.file == "js/apps/GraphTool/graphtool.min.js" || jsFile.file == "js/apps/Scaffold/scaffold.js") { - // extra_css_files.push({ file: 'js/vendor/bootstrap/css/bootstrap.css', external: '0' }); - // extra_css_files.push({ file: 'themes/math4/math4.css', external: '0' }); - // extra_js_files.push({ file: 'js/vendor/bootstrap/js/bootstrap.js', external: '0' }); - // } - // } - //} - - if (data.extra_css_files) data.extra_css_files.unshift(...extra_css_files); - else data.extra_css_files = extra_css_files; - for (const cssFile of data.extra_css_files) { - if (/knowl/.test(cssFile.file)) continue; - iframeContents += ''; - } - - if (data.extra_js_files) data.extra_js_files.unshift(...extra_js_files); - else data.extra_js_files = extra_js_files; - for (const jsFile of data.extra_js_files) { - if (/knowl/.test(jsFile.file)) continue; - iframeContents += ''; - } - - iframeContents += - '' + - '' + - '' + - `` + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'min' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentDocument.querySelectorAll("button.ww-feedback[data-bs-content]").forEach(button => { - const bsPopover = new iframe.contentWindow.bootstrap.Popover(button, { - html: true, - placement: 'bottom', - fallbackPlacements: [], - trigger: 'click', - customClass: 'result-popover' + (button.dataset.emptyContent ? ' nocontent' : '') - }); - bsPopover.show(); - const content = iframe.contentDocument.getElementById(button.id.replace("-feedback-button", "-content")); - const popover = content.parentNode.parentNode; - bsPopover.hide(); - - /*button.addEventListener('shown.bs.popover', () => { - // Note that the button itself has the aria-describedby attribute set by bootstrap automatically. - button.previousElementSibling?.setAttribute('aria-describedby', popover.id); - });*/ - - button.addEventListener('click', () => bsPopover.show(), { once: true }); - - popover.querySelector('.popover-arrow').remove(); - const title = popover.querySelector('.popover-header'); - if (button.dataset.emptyContent) content.parentNode.remove(); - if (title.textContent == localize_correct + '!') title.classList.add('correct'); - }); - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const input_id = input.id; - const mq_span = iframe.contentDocument.getElementById(`mq-answer-${input_id}`); - if (mq_span) { - mq_span.style.display = 'none'; - } - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - const correct_ans = answers[name].correct_choice || answers[name].correct_ans; - if (input.value == correct_ans) { - input.checked = true; - //input.setAttribute('checked', 'checked'); - } else { - input.checked = false; - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const correct_choices = answers[name].correct_choices; - if (correct_choices.includes(input.value)) { - input.checked = true; - // input.setAttribute('checked', 'checked'); - } else { - input.checked = false; - // input.setAttribute('checked', false); - } - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = new URL(node.attributes.src.value, ww_domain).href; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // the problem text may come with "hint"s and "solution"s - // Each one is an "a" with the class ".knowl" and the data-type attribute of either "hint" or "solution". - // the WeBWorK knowl js would normally handle this, but we want PreTeXt knowl js to handle it - // so we replace the "a" with the content that should be there for PTX knowl js - // also if hint/sol were missing from the static version, we want these removed here - - const hintSols = body_div.querySelectorAll('.knowl[data-type="hint"],.knowl[data-type="solution"]'); - let solutionlikewrapper; - for (const hintSol of hintSols) { - const hintsolp = hintSol.parentNode; - if (!hintsolp) continue; - const hintsolpp = hintsolp.parentNode; //the div that contains each p with a knowl anchor - const hintSolType = hintSol.dataset.type; - - if (hintsolpp.querySelectorAll(".webwork.solutions").length == 0) - { - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('webwork', 'solutions'); - hintsolpp.insertBefore(solutionlikewrapper, hintsolp); - } - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || - (hintSolType == 'hint' && !b_ptx_has_hint)) - continue; - - const knowlDetails = document.createElement('details'); - knowlDetails.classList.add(hintSolType); - knowlDetails.classList.add('solution-like'); - knowlDetails.classList.add('born-hidden-knowl'); - - const knowlSummary = document.createElement('summary'); - const summaryLabel = document.createElement('span'); - summaryLabel.classList.add('type'); - summaryLabel.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(summaryLabel); - knowlDetails.appendChild(knowlSummary); - - const knowlContents = document.createElement('div'); - knowlContents.classList.add(hintSolType); - knowlContents.classList.add('solution-like'); - knowlContents.innerHTML = hintsolp.firstElementChild.dataset.knowlContents; - knowlDetails.appendChild(knowlContents); - - adjustSrcHrefs(knowlContents, ww_domain) - solutionlikewrapper.appendChild(knowlDetails); - } - for (const hintSol of hintSols) { - hintSol.parentNode?.remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function createFeedbackButton(id, title, content) { - const feedbackButton = document.createElement('button'); - feedbackButton.dataset.bsTitle = title; - feedbackButton.dataset.bsContent = `
    ${content || ''}
    `; - if (!content) feedbackButton.dataset.emptyContent = '1'; - const contentSpan = document.createElement('span'); - contentSpan.innerHTML = ``; - feedbackButton.appendChild(contentSpan); - feedbackButton.type = 'button'; - feedbackButton.classList.add('ww-feedback'); - - feedbackButton.id = `${id}-feedback-button`; - feedbackButton.dataset.bsToggle = 'popover'; - - return feedbackButton; -} - -function webworkSeedHash(string) { - var hash = 0, i, chr; - if (string.length === 0) return hash; - for (i = 0; i < string.length; i++) { - chr = string.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; //Convert to 32bit integer - } - return Math.abs(hash); -}; diff --git a/slides-annotated/_static/pretext/js/pretext-webwork/2.18/pretext-webwork.js b/slides-annotated/_static/pretext/js/pretext-webwork/2.18/pretext-webwork.js deleted file mode 100755 index c9b6b7c..0000000 --- a/slides-annotated/_static/pretext/js/pretext-webwork/2.18/pretext-webwork.js +++ /dev/null @@ -1,1058 +0,0 @@ -//Critical: -// TODO: Think about what should be done for an essay question. - -//Accessibility: - -//Enhancement: -// TODO: In a scaffold problem, adjust the green bar for when one part is correct. -// TODO: Have randomize check that new seed is actually producing new HTML. -// TODO: Don't offer randomize or button unless we know a new version can be produced after trying a few seeds. -// TODO: In a staged problem, Make Interactive button is adjacent to solution knowls; move it. -// TODO: MathQuill -// TODO: Image pop up. -// TODO: Deal with singleResult MultiAnswer problems. - -//Styling: -// TODO: Review all styling in all scenarios (staged/not, correct/partly-correct/incorrect/blank, single/multiple) -// TODO: Sean: I think I'd like to see a slightly larger font size on the buttons - -function handleWW(ww_id, action) { - const ww_container = document.getElementById(ww_id); - const ww_domain = ww_container.dataset.domain; - const ww_problemSource = ww_container.dataset.problemsource; - const ww_sourceFilePath = ww_container.dataset.sourcefilepath; - const ww_course_id = ww_container.dataset.courseid; - const ww_user_id = ww_container.dataset.userid; - const ww_course_password = ww_container.dataset.coursepassword; - const localize_correct = ww_container.dataset.localizeCorrect || "Correct"; - const localize_incorrect = ww_container.dataset.localizeIncorrect || "Incorrect"; - const localize_blank = ww_container.dataset.localizeBlank || "Blank"; - const localize_submit = ww_container.dataset.localizeSubmit || "Submit"; - const localize_check_responses = ww_container.dataset.localizeCheckResponses || "Check Responses"; - const localize_reveal = ww_container.dataset.localizeReveal || "Reveal"; - const localize_randomize = ww_container.dataset.localizeRandomize || "Randomize"; - const localize_reset = ww_container.dataset.localizeReset || "Reset"; - const runestone_logged_in = (typeof eBookConfig !== 'undefined' && eBookConfig.username !== ''); - // will be null on pages generated prior to late December 2022 - const activate_button = document.getElementById(ww_id + '-button') - - // Set the current seed - if (!action) { - ww_container.dataset.current_seed = ww_container.dataset.seed; - if (runestone_logged_in) { - ww_container.dataset.current_seed = webworkSeedHash(eBookConfig.username + ww_container.dataset.current_seed); - } - } - else if (action == 'randomize') ww_container.dataset.current_seed = Number(ww_container.dataset.current_seed) + 100; - - let loader = document.createElement('div'); - loader.style.position = 'absolute'; - loader.style.left = 0; - loader.style.top = 0; - loader.style.backgroundColor = 'rgba(0.2, 0.2, 0.2, 0.4)'; - loader.style.color = 'white'; - loader.style.width = '100%'; - loader.style.height = '100%'; - loader.style.display = 'flex'; - loader.style.alignItems = 'center'; - loader.style.justifyContent = 'center'; - loader.style.marginTop = '0'; - loader.tabIndex = -1; - const loaderText = document.createElement('span'); - loaderText.textContent = 'Loading'; - loaderText.style.fontSize = '2rem'; - loader.appendChild(loaderText); - ww_container.appendChild(loader); - loader.focus(); - - if (!action) { - // Determine if static version shows hints, solutions, or answers and save that information in the container dataset for later runs. - ww_container.dataset.hasHint = ww_container.getElementsByClassName('hint').length > 0; - ww_container.dataset.hasSolution = ww_container.getElementsByClassName('solution').length > 0; - ww_container.dataset.hasAnswer = ww_container.getElementsByClassName('answer').length > 0; - // Get (possibly localized) label text for hints and solutions. - ww_container.dataset.hintLabelText = ww_container.dataset.hasHint == 'true' - ? ww_container.querySelectorAll('.hint-knowl span.type, details.hint span.type')[0].textContent : 'Hint'; - ww_container.dataset.solutionLabelText = ww_container.dataset.hasSolution == 'true' - ? ww_container.querySelectorAll('.solution-knowl span.type, details.solution span.type')[0].textContent : 'Solution'; - - ww_container.tabIndex = -1; - } - - let url; - - if (action == 'check') { - const iframe = ww_container.querySelector('.problem-iframe'); - const formData = new FormData(iframe.contentDocument.getElementById(ww_id + "-form")); - const params = new URLSearchParams(formData); - url = new URL(ww_domain + '/webwork2/html2xml?' + params.toString()) - url.searchParams.append("answersSubmitted", '1'); - url.searchParams.append('WWsubmit', "1"); - } else { - url = new URL(ww_domain + '/webwork2/html2xml'); - url.searchParams.append("problemSeed", ww_container.dataset.current_seed); - if (ww_problemSource) url.searchParams.append("problemSource", ww_problemSource); - else if (ww_sourceFilePath) url.searchParams.append("sourceFilePath", ww_sourceFilePath); - url.searchParams.append("answersSubmitted", '0'); - url.searchParams.append("displayMode", "MathJax"); - url.searchParams.append("courseID", ww_course_id); - url.searchParams.append("userID", ww_user_id); - url.searchParams.append("course_password", ww_course_password); - url.searchParams.append("outputformat", "raw"); - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - url.searchParams.append("showSolutions", ww_container.dataset.hasSolution == 'true' ? '1' : '0'); - url.searchParams.append("showHints", ww_container.dataset.hasHint == 'true' ? '1' : '0'); - url.searchParams.append("problemUUID",ww_id); - } - - // get the json and do stuff with what we get - $.getJSON(url.toString(), (data) => { - // Create the form that will contain the text and input fields of the interactive problem. - const form = document.createElement("form"); - form.id = ww_id + "-form"; - - // Create a div for the problem text. - const body_div = document.createElement("div"); - body_div.id = ww_id + "-body"; - body_div.classList.add("exercise", "exercise-like"); - body_div.lang = data.lang; - body_div.dir = data.dir; - - // Dump the problem text, answer blanks, etc. - body_div.innerHTML = data.rh_result.text; - - // Replace all hn headings with h6 headings. - for (const tag_name of ['h6', 'h5', 'h4', 'h3', 'h2', 'h1']) { - const headings = body_div.getElementsByTagName(tag_name); - for (heading of headings) { - const new_heading = document.createElement("h6"); - new_heading.innerHTML = heading.innerHTML; - cloneAttributes(new_heading, heading); - new_heading.classList.add('webwork-part'); - heading.replaceWith(new_heading); - } - } - - adjustSrcHrefs(body_div, ww_domain); - - translateHintSol(ww_id, body_div, ww_domain, - ww_container.dataset.hasHint == 'true', ww_container.dataset.hasSolution == 'true', - ww_container.dataset.hintLabelText, ww_container.dataset.solutionLabelText) - - // insert previous answers - if (runestone_logged_in) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const mqAnswers = answersObject.mqAnswers; - for (const mqAnswer in mqAnswers) { - const mqInput = body_div.querySelector('input[id=' + mqAnswer + ']'); - if (mqInput && mqInput.value == '') { - mqInput.setAttribute('value', mqAnswers[mqAnswer]); - } - } - const answers = answersObject.answers; - for (const answer in answers) { - const input = body_div.querySelector('input[id=' + answer + ']'); - if (input && input.value == '') { - input.setAttribute('value', answers[answer]); - } - if (input && input.type.toUpperCase() == 'RADIO') { - const buttons = body_div.querySelectorAll('input[name=' + answer + ']'); - for (const button of buttons) { - if (button.value == answers[answer]) { - button.setAttribute('checked', 'checked'); - } - } - } - if (input && input.type.toUpperCase() == 'CHECKBOX') { - const checkboxes = body_div.querySelectorAll('input[name=' + answer + ']'); - for (const checkbox of checkboxes) { - // This is not a bulletproof approach if the problem used input values that are weird - // For example, with commas in them - // However, we are stuck with WW providing answers[answer] as a string like `[value0, value1]` - // and note that it is not `["value0", "value1"]`, so we cannot cleanly parse it into an array - let checkbox_regex = new RegExp('(\\[|, )' + checkbox.value + '(, |\\])'); - if (answers[answer].match(checkbox_regex)) { - checkbox.setAttribute('checked', 'checked'); - } - } - } - var select = body_div.querySelector('select[id=' + answer + ']'); - if (select && answers[answer]) { - // answers[answer] may be wrapped in \text{...} that we want to remove, since value does not have this. - let this_answer = answers[answer]; - if (/^\\text\{.*\}$/.test(this_answer)) {this_answer = this_answer.match(/^\\text\{(.*)\}$/)[1]}; - let quote_escaped_answer = this_answer.replace(/"/g, '\\"'); - const option = body_div.querySelector(`select[id="${answer}"] option[value="${quote_escaped_answer}"]`); - if (option) {option.setAttribute('selected', 'selected')}; - } - } - } - - // insert our cleaned up problem text - form.appendChild(body_div); - - // Set up hidden input fields that the form uses - const wwInputs = { - problemSeed: data.inputs_ref.problemSeed, - problemUUID: data.inputs_ref.problemUUID, - psvn: data.inputs_ref.psvn, - courseName: ww_course_id, - courseID: ww_course_id, - userID: ww_user_id, - course_password: ww_course_password, - displayMode: "MathJax", - session_key: data.rh_result.session_key, - outputformat: "raw", - language: data.formLanguage, - showSummary: data.showSummary, - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - showSolutions: ww_container.dataset.hasSolution == 'true' ? '1' : '0', - showHints: ww_container.dataset.hasHint == 'true' ? '1' : '0', - forcePortNumber: data.forcePortNumber - }; - - if (ww_sourceFilePath) wwInputs.sourceFilePath = ww_sourceFilePath; - else if (ww_problemSource) wwInputs.problemSource = ww_problemSource; - - for (const wwInputName of Object.keys(wwInputs)) { - const input = document.createElement('input'); - input.type = 'hidden'; - input.name = wwInputName; - input.value = wwInputs[wwInputName]; - form.appendChild(input); - } - - // Prepare answers object - const answers = {}; - // id the answers even if we won't populate them - Object.keys(data.rh_result.answers).forEach(function(id) { - answers[id] = {}; - }, data.rh_result.answers); - if (ww_container.dataset.hasAnswer == 'true') { - // Update answer data - Object.keys(data.rh_result.answers).forEach(function(id) { - answers[id] = { - correct_ans: this[id].correct_ans, - correct_ans_latex_string: this[id].correct_ans_latex_string, - correct_choice: this[id].correct_choice, - correct_choices: this[id].correct_choices, - }; - }, data.rh_result.answers); - } - - let buttonContainer = ww_container.querySelector('.problem-buttons.webwork'); - // Create the submission buttons if they have not yet been created. - if (!buttonContainer) { - // Hide the original div that contains the old make active button. - ww_container.querySelector('.problem-buttons').classList.add('hidden-content'); - // And the newer activate button if it is there - if (activate_button != null) {activate_button.classList.add('hidden-content');}; - - // Create a new div for the webwork buttons. - buttonContainer = document.createElement('div'); - buttonContainer.classList.add('problem-buttons', 'webwork'); - if (activate_button != null) { - // Make sure the button container follows the activate button in the DOM - activate_button.after(buttonContainer); - } else { - ww_container.prepend(buttonContainer); - } - - // Check button - const check = document.createElement("button"); - check.type = "button"; - check.id = ww_id + '-check'; - check.style.marginRight = "0.25rem"; - check.classList.add('webwork-button'); - - // Adjust if more than one answer to check - const answerCount = body_div.querySelectorAll("input:not([type=hidden])").length + - body_div.querySelectorAll("select:not([type=hidden])").length; - - check.textContent = runestone_logged_in ? localize_submit : localize_check_responses; - check.addEventListener('click', () => handleWW(ww_id, "check")); - - buttonContainer.appendChild(check); - - // Show correct answers button if original PTX has answer knowl. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = document.createElement("button"); - correct.classList.add("show-correct", 'webwork-button'); - correct.type = "button"; - correct.style.marginRight = "0.25rem"; - correct.textContent = localize_reveal; - correct.addEventListener('click', () => WWshowCorrect(ww_id, answers)); - buttonContainer.appendChild(correct); - } - - // randomize button - const randomize = document.createElement("button") - randomize.type = "button"; - randomize.classList.add('webwork-button'); - randomize.style.marginRight = "0.25rem"; - randomize.textContent = localize_randomize; - randomize.addEventListener('click', () => handleWW(ww_id, 'randomize')); - buttonContainer.appendChild(randomize) - - // reset button - const reset = document.createElement("button") - reset.type = "button" - reset.classList.add('webwork-button'); - reset.textContent = localize_reset; - reset.addEventListener('click', () => resetWW(ww_id)); - buttonContainer.appendChild(reset) - } else { - // Update the click handler for the show correct button. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = buttonContainer.querySelector('.show-correct'); - const correctNew = correct.cloneNode(true); - correctNew.addEventListener('click', () => WWshowCorrect(ww_id, answers)); - correct.replaceWith(correctNew); - } - } - - if (action == 'check') { - // Runestone trigger - // TODO: condition on platform=Runestone - $("body").trigger('runestone_ww_check', data) - - const inputs = body_div.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - if (input.type == 'text' && answers[name]) { - const score = data.rh_result.answers[name].score; - let headline = ''; - let correctClass = ''; - if (score >= 1) { - headline = localize_correct + '!'; - correctClass = 'correct'; - } else if (score > 0 && score < 1) { - headline = `${Math.round(score * 100)}% ${localize_correct}.`; - correctClass = 'partly-correct'; - } else if (data.rh_result.answers[name].student_ans == '') { - headline = localize_blank + '.'; - correctClass = 'blank'; - } else if (score <= 0) { - headline = localize_incorrect + '.'; - correctClass = 'incorrect'; - } - let title = `${headline}`; - let message = (data.rh_result.answers[name].ans_message ? data.rh_result.answers[name].ans_message : ''); - input.classList.add(correctClass); - // make a span that contains feedback - feedbackSpan = document.createElement('span'); - feedbackSpan.id = `${ww_id}-${name}-feedback`; - feedbackHeadline = document.createElement('span'); - feedbackHeadline.id = `${ww_id}-${name}-headline`; - feedbackHeadline.textContent = headline; - feedbackSpan.appendChild(feedbackHeadline); - feedbackMessage = document.createElement('span'); - feedbackMessage.id = `${ww_id}-${name}-message`; - feedbackMessage.textContent = message; - feedbackSpan.appendChild(feedbackMessage); - // make a non breaking span to surround input, sr span, and feedback button - let nbSpan = document.createElement('span'); - nbSpan.classList.add("nobreak"); - input.parentNode.insertBefore(nbSpan, input); - nbSpan.appendChild(input); - // put a visibly hidden (screen-reader only) span with feedback - let srSpan = document.createElement('span'); - srSpan.classList.add("visually-hidden"); - srSpan.appendChild(feedbackSpan); - nbSpan.appendChild(srSpan); - // give the feedback to sr users immediately - input.setAttribute('aria-describedby',`${ww_id}-${name}-feedback`); - // make the feedback button - srSpan.after(createFeedbackButton(`${ww_id}-${name}`, title, message)); - - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const score = data.rh_result.answers[name].score; - const student_ans = data.rh_result.answers[name].student_value || data.rh_result.answers[name].student_ans; - const correct_ans = data.rh_result.answers[name].correct_choice || data.rh_result.answers[name].correct_ans; - if (input.value == student_ans) { - if (score == 1) { - input.parentNode.classList.add('correct'); - } else { - input.parentNode.classList.add('incorrect'); - } - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, - (student_ans == correct_ans) - ? `${localize_correct}` : `${localize_incorrect}.`) - feedbackButton.style.marginRight = '0.25rem'; - input.after(feedbackButton); - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const score = data.rh_result.answers[name].score; - const student_ans = data.rh_result.answers[name].student_ans; - const correct_ans = data.rh_result.answers[name].correct_ans; - if (input.value == data.rh_result.answers[name].firstElement) { - const checkbox_div = input.parentNode.parentNode; - if (score == 1) { - checkbox_div.classList.add('correct'); - } else { - checkbox_div.classList.add('incorrect'); - } - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, - (student_ans == correct_ans) - ? `${localize_correct}` : `${localize_incorrect}.`) - checkbox_div.insertBefore(feedbackButton, checkbox_div.firstChild); - } - } - } - - const hiddenInputs = body_div.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - graphtoolContainer.style.position = 'relative'; - const score = data.rh_result.answers[name].score; - let title = ''; - if (score == 1) { - title = `${localize_correct}`; - } else if (score > 0 && score < 1) { - title = `${Math.round(score * 100)}% ${localize_correct}.`; - } else if (data.rh_result.answers[name].student_ans == '') { - // do nothing if the submitted answer is blank and the problem has not already been scored as correct - continue; - } else if (score == 0) { - title = `${localize_incorrect}.`; - } - - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, title, data.rh_result.answers[name].ans_message); - feedbackButton.style.position = 'absolute'; - feedbackButton.style.left = '100%'; - feedbackButton.style.top = 0; - feedbackButton.style.marginLeft = '0.5rem'; - feedbackButton.dataset.bsContainer = 'body'; - graphtoolContainer.appendChild(feedbackButton); - if (score == 1) { - graphtoolContainer.classList.add('correct'); - } else { - graphtoolContainer.classList.add('incorrect'); - } - - } - } - - const selects = body_div.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const score = data.rh_result.answers[name].score; - let title = ''; - if (score == 1) { - headline = localize_correct + '!'; - correctClass = 'correct'; - } else { - headline = localize_incorrect + '.'; - correctClass = 'incorrect'; - } - select.classList.add(correctClass); - title = `${headline}`; - // make a span that contains feedback - feedbackSpan = document.createElement('span'); - feedbackSpan.id = `${ww_id}-${name}-feedback`; - feedbackHeadline = document.createElement('span'); - feedbackHeadline.id = `${ww_id}-${name}-headline`; - feedbackHeadline.textContent = headline; - feedbackSpan.appendChild(feedbackHeadline); - // make a non breaking span to surround select, sr span, and feedback button - let nbSpan = document.createElement('span'); - nbSpan.classList.add("nobreak"); - select.parentNode.insertBefore(nbSpan, select); - nbSpan.appendChild(select); - // put a span around select since select does not support ::after pseudo elements - let psSpan = document.createElement('span'); - psSpan.classList.add("select-wrapper", correctClass); - select.parentNode.insertBefore(psSpan, select); - psSpan.appendChild(select); - // put a visibly hidden (screen-reader only) span with feedback - let srSpan = document.createElement('span'); - srSpan.classList.add("visually-hidden"); - srSpan.appendChild(feedbackSpan); - nbSpan.appendChild(srSpan); - // give the feedback to sr users immediately - select.setAttribute('aria-describedby',`${ww_id}-${name}-feedback`); - // make the feedback button - srSpan.after(createFeedbackButton(`${ww_id}-${name}`, title)); - } - } - - let iframeContents = '' + - '' + - `` + - '' + - '' + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - //if (data.rh_result.flags.extra_js_files) { - // for (const jsFile of data.rh_result.flags.extra_js_files) { - // if (jsFile.file == "js/apps/GraphTool/graphtool.min.js" || jsFile.file == "js/apps/Scaffold/scaffold.js") { - // extra_css_files.push({ file: 'js/vendor/bootstrap/css/bootstrap.css', external: '0' }); - // extra_css_files.push({ file: 'themes/math4/math4.css', external: '0' }); - // extra_js_files.push({ file: 'js/vendor/bootstrap/js/bootstrap.js', external: '0' }); - // } - // } - //} - - if (data.extra_css_files) data.extra_css_files.unshift(...extra_css_files); - else data.extra_css_files = extra_css_files; - for (const cssFile of data.extra_css_files) { - if (/knowl/.test(cssFile.file)) continue; - iframeContents += ''; - } - - if (data.extra_js_files) data.extra_js_files.unshift(...extra_js_files); - else data.extra_js_files = extra_js_files; - for (const jsFile of data.extra_js_files) { - if (/knowl/.test(jsFile.file)) continue; - iframeContents += ''; - } - - iframeContents += - '' + - '' + - '' + - `` + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'min' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentDocument.querySelectorAll("button.ww-feedback[data-bs-content]").forEach(button => { - const bsPopover = new iframe.contentWindow.bootstrap.Popover(button, { - html: true, - placement: 'bottom', - fallbackPlacements: [], - trigger: 'click', - customClass: 'result-popover' + (button.dataset.emptyContent ? ' nocontent' : '') - }); - bsPopover.show(); - const content = iframe.contentDocument.getElementById(button.id.replace("-feedback-button", "-content")); - const popover = content.parentNode.parentNode; - bsPopover.hide(); - - /*button.addEventListener('shown.bs.popover', () => { - // Note that the button itself has the aria-describedby attribute set by bootstrap automatically. - button.previousElementSibling?.setAttribute('aria-describedby', popover.id); - });*/ - - button.addEventListener('click', () => bsPopover.show(), { once: true }); - - popover.querySelector('.popover-arrow').remove(); - const title = popover.querySelector('.popover-header'); - if (button.dataset.emptyContent) content.parentNode.remove(); - if (title.textContent == localize_correct + '!') title.classList.add('correct'); - }); - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const input_id = input.id; - const mq_span = iframe.contentDocument.getElementById(`mq-answer-${input_id}`); - if (mq_span) { - mq_span.style.display = 'none'; - } - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - const correct_ans = answers[name].correct_choice || answers[name].correct_ans; - if (input.value == correct_ans) { - input.checked = true; - //input.setAttribute('checked', 'checked'); - } else { - input.checked = false; - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const correct_choices = answers[name].correct_choices; - if (correct_choices.includes(input.value)) { - input.checked = true; - // input.setAttribute('checked', 'checked'); - } else { - input.checked = false; - // input.setAttribute('checked', false); - } - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = new URL(node.attributes.src.value, ww_domain).href; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // the problem text may come with "hint"s and "solution"s - // Each one is an "a" with the class ".knowl" and the data-type attribute of either "hint" or "solution". - // the WeBWorK knowl js would normally handle this, but we want PreTeXt knowl js to handle it - // so we replace the "a" with the content that should be there for PTX knowl js - // also if hint/sol were missing from the static version, we want these removed here - - const hintSols = body_div.querySelectorAll('.knowl[data-type="hint"],.knowl[data-type="solution"]'); - let solutionlikewrapper; - for (const hintSol of hintSols) { - const hintsolp = hintSol.parentNode; - if (!hintsolp) continue; - const hintsolpp = hintsolp.parentNode; //the div that contains each p with a knowl anchor - const hintSolType = hintSol.dataset.type; - - if (hintsolpp.querySelectorAll(".webwork.solutions").length == 0) - { - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('webwork', 'solutions'); - hintsolpp.insertBefore(solutionlikewrapper, hintsolp); - } - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || - (hintSolType == 'hint' && !b_ptx_has_hint)) - continue; - - const knowlDetails = document.createElement('details'); - knowlDetails.classList.add(hintSolType); - knowlDetails.classList.add('solution-like'); - knowlDetails.classList.add('born-hidden-knowl'); - - const knowlSummary = document.createElement('summary'); - const summaryLabel = document.createElement('span'); - summaryLabel.classList.add('type'); - summaryLabel.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(summaryLabel); - knowlDetails.appendChild(knowlSummary); - - const knowlContents = document.createElement('div'); - knowlContents.classList.add(hintSolType); - knowlContents.classList.add('solution-like'); - knowlContents.innerHTML = hintsolp.firstElementChild.dataset.knowlContents; - knowlDetails.appendChild(knowlContents); - - adjustSrcHrefs(knowlContents, ww_domain) - solutionlikewrapper.appendChild(knowlDetails); - } - for (const hintSol of hintSols) { - hintSol.parentNode?.remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function createFeedbackButton(id, title, content) { - const feedbackButton = document.createElement('button'); - feedbackButton.dataset.bsTitle = title; - feedbackButton.dataset.bsContent = `
    ${content || ''}
    `; - if (!content) feedbackButton.dataset.emptyContent = '1'; - const contentSpan = document.createElement('span'); - contentSpan.innerHTML = ``; - feedbackButton.appendChild(contentSpan); - feedbackButton.type = 'button'; - feedbackButton.classList.add('ww-feedback'); - - feedbackButton.id = `${id}-feedback-button`; - feedbackButton.dataset.bsToggle = 'popover'; - - return feedbackButton; -} - -function webworkSeedHash(string) { - var hash = 0, i, chr; - if (string.length === 0) return hash; - for (i = 0; i < string.length; i++) { - chr = string.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; //Convert to 32bit integer - } - return Math.abs(hash); -}; diff --git a/slides-annotated/_static/pretext/js/pretext-webwork/2.19/pretext-webwork.js b/slides-annotated/_static/pretext/js/pretext-webwork/2.19/pretext-webwork.js deleted file mode 100755 index 99fb2f0..0000000 --- a/slides-annotated/_static/pretext/js/pretext-webwork/2.19/pretext-webwork.js +++ /dev/null @@ -1,677 +0,0 @@ -//Critical: -// TODO: Think about what should be done for an essay question. - -//Accessibility: - -//Enhancement: -// TODO: Have randomize check that new seed is actually producing new HTML. -// TODO: Don't offer randomize button unless we know a new version can be produced after trying a few seeds. - -//Styling: -// TODO: Review all styling in all scenarios (staged/not, correct/partly-correct/incorrect/blank, single/multiple) - -async function handleWW(ww_id, action) { - const ww_container = document.getElementById(ww_id); - const ww_domain = ww_container.dataset.domain; - const ww_processing = 'webwork2'; - const ww_origin = ww_container.dataset.origin; - const ww_problemSource = ww_container.dataset.problemsource; - const ww_sourceFilePath = ww_container.dataset.sourcefilepath; - const ww_course_id = ww_container.dataset.courseid; - const ww_user_id = ww_container.dataset.userid; - const ww_passwd = ww_container.dataset.coursepassword; - const localize_submit = ww_container.dataset.localizeSubmit || "Submit"; - const localize_check_responses = ww_container.dataset.localizeCheckResponses || "Check Responses"; - const localize_reveal = ww_container.dataset.localizeReveal || "Reveal"; - const localize_randomize = ww_container.dataset.localizeRandomize || "Randomize"; - const localize_reset = ww_container.dataset.localizeReset || "Reset"; - const runestone_logged_in = (typeof eBookConfig !== 'undefined' && eBookConfig.username !== ''); - // will be null on pages generated prior to late December 2022 - const activate_button = document.getElementById(ww_id + '-button') - - // Set the current seed - if (!action) { - ww_container.dataset.current_seed = ww_container.dataset.seed; - if (runestone_logged_in) { - ww_container.dataset.current_seed = webworkSeedHash(eBookConfig.username + ww_container.dataset.current_seed); - } - } - else if (action == 'randomize') ww_container.dataset.current_seed = Number(ww_container.dataset.current_seed) + 100; - - let loader = document.createElement('div'); - loader.style.position = 'absolute'; - loader.style.left = 0; - loader.style.top = 0; - loader.style.backgroundColor = 'rgba(0.2, 0.2, 0.2, 0.4)'; - loader.style.color = 'white'; - loader.style.width = '100%'; - loader.style.height = '100%'; - loader.style.display = 'flex'; - loader.style.alignItems = 'center'; - loader.style.justifyContent = 'center'; - loader.style.marginTop = '0'; - loader.tabIndex = -1; - const loaderText = document.createElement('span'); - loaderText.textContent = 'Loading'; - loaderText.style.fontSize = '2rem'; - loader.appendChild(loaderText); - ww_container.appendChild(loader); - loader.focus(); - - if (!action) { - // Determine if static version shows hints, solutions, or answers and save that information in the container dataset for later runs. - ww_container.dataset.hasHint = ww_container.getElementsByClassName('hint').length > 0; - ww_container.dataset.hasSolution = ww_container.getElementsByClassName('solution').length > 0; - ww_container.dataset.hasAnswer = ww_container.getElementsByClassName('answer').length > 0; - // Get (possibly localized) label text for hints and solutions. - ww_container.dataset.hintLabelText = ww_container.dataset.hasHint == 'true' - ? ww_container.querySelectorAll('.hint-knowl span.type, details.hint span.type')[0].textContent : 'Hint'; - ww_container.dataset.solutionLabelText = ww_container.dataset.hasSolution == 'true' - ? ww_container.querySelectorAll('.solution-knowl span.type, details.solution span.type')[0].textContent : 'Solution'; - - ww_container.tabIndex = -1; - } - - let url; - if (ww_processing == 'webwork2') { - url = new URL(ww_domain + '/webwork2/render_rpc'); - } - let formData = new FormData(); - let generatedPG = 'generated/webwork/pg/'; - if (runestone_logged_in) { - generatedPG = `/ns/books/published/${eBookConfig.basecourse}/${generatedPG}`; - } - - if (action == 'check' || action =='reveal') { - const iframe = ww_container.querySelector('.problem-iframe'); - formData = new FormData(iframe.contentDocument.getElementById(ww_id + "-form")); - formData.set("answersSubmitted", '1'); - formData.set('WWsubmit', "1"); - if (action == 'reveal' && ww_container.dataset.hasAnswer == 'true') { - formData.set('WWcorrectAnsOnly', "1"); - } - if (ww_origin == 'generated') { - const rawProblemSource = await fetch(generatedPG + ww_problemSource).then((r) => r.text()); - formData.set("rawProblemSource", rawProblemSource); - } - else if (ww_origin == 'webwork2') formData.set("sourceFilePath", ww_sourceFilePath); - } else { - formData.set("problemSeed", ww_container.dataset.current_seed); - if (ww_origin == 'generated') { - const rawProblemSource = await fetch(generatedPG + ww_problemSource).then((r) => r.text()); - formData.set("rawProblemSource", rawProblemSource); - } - else if (ww_origin == 'webwork2') formData.set("sourceFilePath", ww_sourceFilePath); - formData.set("answersSubmitted", '0'); - formData.set("displayMode", "MathJax"); - formData.set("courseID", ww_course_id); - formData.set("user", ww_user_id); - formData.set("userID", ww_user_id); - formData.set("passwd", ww_passwd); - formData.set("disableCookies", '1'); - formData.set("outputformat", "raw"); - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - formData.set("showSolutions", ww_container.dataset.hasSolution == 'true' ? '1' : '0'); - formData.set("showHints", ww_container.dataset.hasHint == 'true' ? '1' : '0'); - formData.set("problemUUID",ww_id); - } - - // If in Runestone, check if there are previous answer submissions and get them now to use in the form. - let checkboxesString = ''; - if (runestone_logged_in && !action) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const previousAnswers = answersObject.answers; - if (previousAnswers !== null) { - formData.set('WWsubmit', 1); - } - for (const answer in previousAnswers) { - if (previousAnswers[answer].constructor === Array) { - for (const k in previousAnswers[answer]) { - checkboxesString += '&'; - checkboxesString += answer; - checkboxesString += '='; - checkboxesString += previousAnswers[answer][k]; - } - } else { - formData.set(answer, previousAnswers[answer]); - } - } - } - // Need to get form data as a string, including possible repeated checkbox names - // Do not pass post data as an object, or checkbox names will overwrite one another - const formString = new URLSearchParams(formData).toString(); - - $.post(url, formString + checkboxesString, (data) => { - // Create the form that will contain the text and input fields of the interactive problem. - const form = document.createElement("form"); - form.id = ww_id + "-form"; - form.dataset.iframeHeight = 1; - - // Create a div for the problem text. - const body_div = document.createElement("div"); - body_div.id = ww_id + "-body"; - body_div.classList.add("exercise", "exercise-like"); - body_div.lang = data.lang; - body_div.dir = data.dir; - - // Dump the problem text, answer blanks, etc. - body_div.innerHTML = data.rh_result.text; - - // If showPartialCorrectAnswers = 0, alter the feedback buttons according to whether or not the score is 100%. - if ('showPartialCorrectAnswers' in data.rh_result.flags && data.rh_result.flags.showPartialCorrectAnswers == 0) { - if ('score' in data.rh_result.problem_result && data.rh_result.problem_result.score >= 1) { - body_div.querySelectorAll('button.ww-feedback-btn').forEach( - function(button) { - button.classList.remove('btn-info'); - button.classList.add('btn-success'); - button.setAttribute('aria-label', 'Correct'); - button.dataset.bsCustomClass = button.dataset.bsCustomClass + ' correct'; - button.dataset.bsTitle = button.dataset.bsTitle.replace('Answer Preview', 'Correct'); - button.firstChild.classList.add('correct') - } - ); - } else { - body_div.querySelectorAll('button.ww-feedback-btn').forEach( - function(button) { - button.setAttribute('aria-label', 'One or more answers incorrect'); - button.dataset.bsTitle = button.dataset.bsTitle.replace('Answer Preview', 'One or more answers incorrect'); - } - ); - } - } - - // Replace all hn headings with h6 headings. - for (const tag_name of ['h6', 'h5', 'h4', 'h3', 'h2', 'h1']) { - const headings = body_div.getElementsByTagName(tag_name); - for (heading of headings) { - const new_heading = document.createElement("h6"); - new_heading.innerHTML = heading.innerHTML; - cloneAttributes(new_heading, heading); - new_heading.classList.add('webwork-part'); - heading.replaceWith(new_heading); - } - } - - // Hide textarea input and hide associated buttons - var textareas = body_div.getElementsByTagName("textarea"); - for(var i = 0, max = textareas.length; i < max; i++) - { - textareas[i].style.display = "none"; - textareas[i].className = ''; - } - var textareabuttons = body_div.querySelectorAll(".latexentry-preview"); - for(var i = 0, max = textareabuttons.length; i < max; i++) - { - textareabuttons[i].remove(); - } - - adjustSrcHrefs(body_div, ww_domain); - - translateHintSol(ww_id, body_div, ww_domain, - ww_container.dataset.hasHint == 'true', ww_container.dataset.hasSolution == 'true', - ww_container.dataset.hintLabelText, ww_container.dataset.solutionLabelText) - - // insert previous answers - if (runestone_logged_in) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const mqAnswers = answersObject.mqAnswers; - for (const mqAnswer in mqAnswers) { - const mqInput = body_div.querySelector('input[id=' + mqAnswer + ']'); - if (mqInput && mqInput.value == '') { - mqInput.setAttribute('value', mqAnswers[mqAnswer]); - } - } - const answers = answersObject.answers; - for (const answer in answers) { - const input = body_div.querySelector('input[id=' + answer + ']'); - if (input && input.value == '') { - input.setAttribute('value', answers[answer]); - } - } - } - - // insert our cleaned up problem text - form.appendChild(body_div); - - // Set up hidden input fields that the form uses - const wwInputs = { - problemSeed: data.inputs_ref.problemSeed, - problemUUID: data.inputs_ref.problemUUID, - psvn: data.inputs_ref.psvn, - courseName: ww_course_id, - courseID: ww_course_id, - user: ww_user_id, - passwd: ww_passwd, - displayMode: "MathJax", - session_key: data.rh_result.session_key, - outputformat: "raw", - language: data.formLanguage, - showSummary: data.showSummary, - disableCookies: '1', - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - showSolutions: ww_container.dataset.hasSolution == 'true' ? '1' : '0', - showHints: ww_container.dataset.hasHint == 'true' ? '1' : '0', - forcePortNumber: data.forcePortNumber - }; - - if (ww_sourceFilePath) wwInputs.sourceFilePath = ww_sourceFilePath; - else if (ww_problemSource && ww_origin == 'webwork2') wwInputs.problemSource = ww_problemSource; - - for (const wwInputName of Object.keys(wwInputs)) { - const input = document.createElement('input'); - input.type = 'hidden'; - input.name = wwInputName; - input.value = wwInputs[wwInputName]; - form.appendChild(input); - } - - let buttonContainer = ww_container.querySelector('.problem-buttons.webwork'); - // Create the submission buttons if they have not yet been created. - if (!buttonContainer) { - // Hide the original div that contains the Activate. - ww_container.querySelector('.problem-buttons').classList.add('hidden-content', 'hidden'); - - // Create a new div for the webwork buttons. - buttonContainer = document.createElement('div'); - buttonContainer.classList.add('problem-buttons', 'webwork'); - if (activate_button != null) { - // Make sure the button container follows the activate button in the DOM - activate_button.after(buttonContainer); - } else { - ww_container.prepend(buttonContainer); - } - - // Check button - const check = document.createElement("button"); - check.type = "button"; - check.id = ww_id + '-check'; - check.style.marginRight = "0.25rem"; - check.classList.add('webwork-button'); - - check.textContent = runestone_logged_in ? localize_submit : localize_check_responses; - - check.addEventListener('click', () => handleWW(ww_id, "check")); - - buttonContainer.appendChild(check); - - // Show correct answers button if original PTX has answer knowl. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = document.createElement("button"); - correct.classList.add("show-correct", 'webwork-button'); - correct.type = "button"; - correct.style.marginRight = "0.25rem"; - correct.textContent = localize_reveal; - correct.addEventListener('click', () => handleWW(ww_id, 'reveal')); - buttonContainer.appendChild(correct); - } - - // randomize button - const randomize = document.createElement("button") - randomize.type = "button"; - randomize.classList.add('webwork-button'); - randomize.style.marginRight = "0.25rem"; - randomize.textContent = localize_randomize; - randomize.addEventListener('click', () => handleWW(ww_id, 'randomize')); - buttonContainer.appendChild(randomize) - - // reset button - const reset = document.createElement("button") - reset.type = "button" - reset.classList.add('webwork-button'); - reset.textContent = localize_reset; - reset.addEventListener('click', () => resetWW(ww_id)); - buttonContainer.appendChild(reset) - } - - if (runestone_logged_in && action == 'check') { - // Runestone trigger - $("body").trigger('runestone_ww_check', data) - } - let courseUrlBase = ''; - if (runestone_logged_in){ - courseUrlBase = '/ns/books/published/' + eBookConfig.basecourse + '/'; - } - let iframeContents = '' + - '' + - `` + - '' + - `` + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - - if (data.extra_css_files) data.extra_css_files.unshift(...extra_css_files); - else data.extra_css_files = extra_css_files; - for (const cssFile of data.extra_css_files) { - iframeContents += ''; - } - - if (data.extra_js_files) data.extra_js_files.unshift(...extra_js_files); - else data.extra_js_files = extra_js_files; - for (const jsFile of data.extra_js_files) { - iframeContents += ''; - } - - iframeContents += - `` + - '' + - `` + - '' + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content', 'hidden'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'taggedElement' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }, "json"); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const input_id = input.id; - const mq_span = iframe.contentDocument.getElementById(`mq-answer-${input_id}`); - if (mq_span) { - mq_span.style.display = 'none'; - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const correct_ans = answers[name].correct_choice || answers[name].correct_ans; - if (input.value == correct_ans) { - input.checked = true; - } else { - input.checked = false; - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const correct_choices = answers[name].correct_choices; - if (correct_choices.includes(input.value)) { - input.checked = true; - } else { - input.checked = false; - } - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content', 'hidden'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content', 'hidden'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content', 'hidden');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[data-knowl-url]').forEach((node) => { - const dku = node.dataset.knowlUrl; - if (dku !== '#' && !dku.match(/^[a-z]+:\/\//i)) node.dataset.knowlUrl = ww_domain + dku; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = new URL(node.attributes.src.value, ww_domain).href; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // The problem text may come with "hint"s and "solution"s - // Each one is a div.accordion > details.accordion-item > summary.accordion-button - // Styling is not the PTX way, so we change it to one div.solutions - // with (potentially multiple) details.born-hidden-knowl > summary.knowl__link - // Also if hint/sol were missing from the static version, we want these removed here - - const hintSols = body_div.querySelectorAll('.accordion.hint,.accordion.solution'); - if (hintSols.length == 0) {return}; - - for (const hintSol of hintSols) { - const parent = hintSol.parentNode; - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('solutions'); - parent.insertBefore(solutionlikewrapper, hintSol); - - const hintSolType = hintSol.classList.contains('hint') ? 'hint' : 'solution'; - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || - (hintSolType == 'hint' && !b_ptx_has_hint)) - continue; - - const knowlDetails = hintSol.getElementsByTagName('details')[0]; - knowlDetails.className = ''; - knowlDetails.classList.add(hintSolType, 'solution-like', 'born-hidden-knowl'); - solutionlikewrapper.appendChild(knowlDetails); - - const knowlSummary = knowlDetails.getElementsByTagName('summary')[0]; - knowlSummary.className = ''; - knowlSummary.classList.add('knowl__link'); - - const summaryLabel = knowlSummary.children[0]; - summaryLabel.remove(); - - const newLabelSpan = document.createElement('span'); - newLabelSpan.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(newLabelSpan); - - const newLabelPeriod = document.createElement('span'); - newLabelPeriod.innerHTML = '.'; - knowlSummary.appendChild(newLabelPeriod); - - adjustSrcHrefs(knowlDetails, ww_domain); - hintSol.remove(); - - const originalDetailsContent = knowlDetails.getElementsByTagName('div')[0]; - const newDetailsContent = originalDetailsContent.getElementsByTagName('div')[0]; - newDetailsContent.className = ''; - newDetailsContent.classList.add(hintSolType, 'solution-like', 'knowl__content'); - knowlDetails.appendChild(newDetailsContent); - originalDetailsContent.remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function webworkSeedHash(string) { - var hash = 0, i, chr; - if (string.length === 0) return hash; - for (i = 0; i < string.length; i++) { - chr = string.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; //Convert to 32bit integer - } - return Math.abs(hash); -}; diff --git a/slides-annotated/_static/pretext/js/pretext-webwork/2.20/pretext-webwork.js b/slides-annotated/_static/pretext/js/pretext-webwork/2.20/pretext-webwork.js deleted file mode 100755 index 1cd3ca6..0000000 --- a/slides-annotated/_static/pretext/js/pretext-webwork/2.20/pretext-webwork.js +++ /dev/null @@ -1,686 +0,0 @@ -//Critical: -// TODO: Think about what should be done for an essay question. - -//Accessibility: - -//Enhancement: -// TODO: Have randomize check that new seed is actually producing new HTML. -// TODO: Don't offer randomize button unless we know a new version can be produced after trying a few seeds. - -//Styling: -// TODO: Review all styling in all scenarios (staged/not, correct/partly-correct/incorrect/blank, single/multiple) - -async function handleWW(ww_id, action) { - const ww_container = document.getElementById(ww_id); - const ww_domain = ww_container.dataset.domain; - const ww_processing = 'webwork2'; - const ww_origin = ww_container.dataset.origin; - const ww_problemSource = ww_container.dataset.problemsource; - let ww_baseCourse = ww_container.dataset.documentid; - const ww_sourceFilePath = ww_container.dataset.sourcefilepath; - const ww_course_id = ww_container.dataset.courseid; - const ww_user_id = ww_container.dataset.userid; - const ww_passwd = ww_container.dataset.coursepassword; - const localize_submit = ww_container.dataset.localizeSubmit || "Submit"; - const localize_check_responses = ww_container.dataset.localizeCheckResponses || "Check Responses"; - const localize_reveal = ww_container.dataset.localizeReveal || "Reveal"; - const localize_randomize = ww_container.dataset.localizeRandomize || "Randomize"; - const localize_reset = ww_container.dataset.localizeReset || "Reset"; - const runestone_logged_in = (typeof eBookConfig !== 'undefined' && eBookConfig.username !== ''); - // will be null on pages generated prior to late December 2022 - const activate_button = document.getElementById(ww_id + '-button') - - // Set the current seed - if (!action) { - ww_container.dataset.current_seed = ww_container.dataset.seed; - if (runestone_logged_in) { - ww_container.dataset.current_seed = webworkSeedHash(eBookConfig.username + ww_container.dataset.current_seed); - } - } - else if (action == 'randomize') ww_container.dataset.current_seed = Number(ww_container.dataset.current_seed) + 100; - - let loader = document.createElement('div'); - loader.style.position = 'absolute'; - loader.style.left = 0; - loader.style.top = 0; - loader.style.backgroundColor = 'rgba(0.2, 0.2, 0.2, 0.4)'; - loader.style.color = 'white'; - loader.style.width = '100%'; - loader.style.height = '100%'; - loader.style.display = 'flex'; - loader.style.alignItems = 'center'; - loader.style.justifyContent = 'center'; - loader.style.marginTop = '0'; - loader.tabIndex = -1; - const loaderText = document.createElement('span'); - loaderText.textContent = 'Loading'; - loaderText.style.fontSize = '2rem'; - loader.appendChild(loaderText); - ww_container.appendChild(loader); - loader.focus(); - - if (!action) { - // Determine if static version shows hints, solutions, or answers and save that information in the container dataset for later runs. - ww_container.dataset.hasHint = ww_container.getElementsByClassName('hint').length > 0; - ww_container.dataset.hasSolution = ww_container.getElementsByClassName('solution').length > 0; - ww_container.dataset.hasAnswer = ww_container.getElementsByClassName('answer').length > 0; - // Get (possibly localized) label text for hints and solutions. - ww_container.dataset.hintLabelText = ww_container.dataset.hasHint == 'true' - ? ww_container.querySelectorAll('.hint-knowl span.type, details.hint span.type')[0].textContent : 'Hint'; - ww_container.dataset.solutionLabelText = ww_container.dataset.hasSolution == 'true' - ? ww_container.querySelectorAll('.solution-knowl span.type, details.solution span.type')[0].textContent : 'Solution'; - - ww_container.tabIndex = -1; - } - - let url; - if (ww_processing == 'webwork2') { - url = new URL(ww_domain + '/webwork2/render_rpc'); - } - let formData = new FormData(); - let generatedPG = 'generated/webwork/pg/'; - // For Runestone, we specify where to find the generated problems. - if (runestone_logged_in) { - if (ww_problemSource && !ww_baseCourse) { - // WeBWorK authored in source, generated after 2025/10/15-ish, should have a baseCourse specified. We fall back to parsing the baseCourse from ww_id, which *should* always start with the base course prior to the first underscore (although this is not guaranteed). If no underscore is found, we fall back to eBookConfig.basecourse. - // This is only needed for webwork problems authored in source, not OPL problems, so we only check when ww_problemSource is set. - const parts = ww_id.split('_'); - ww_baseCourse = parts.length > 1 ? parts[0] : eBookConfig.basecourse; - console.log("using the base course " + ww_baseCourse); - } - generatedPG = `/ns/books/published/${ww_baseCourse}/${generatedPG}`; - } - - if (action == 'check' || action =='reveal') { - const iframe = ww_container.querySelector('.problem-iframe'); - formData = new FormData(iframe.contentDocument.getElementById(ww_id + "-form")); - formData.set("answersSubmitted", '1'); - formData.set('WWsubmit', "1"); - if (action == 'reveal' && ww_container.dataset.hasAnswer == 'true') { - formData.set('WWcorrectAnsOnly', "1"); - } - if (ww_origin == 'generated') { - const rawProblemSource = await fetch(generatedPG + ww_problemSource).then((r) => r.text()); - formData.set("rawProblemSource", rawProblemSource); - } - else if (ww_origin == 'webwork2') formData.set("sourceFilePath", ww_sourceFilePath); - } else { - formData.set("problemSeed", ww_container.dataset.current_seed); - if (ww_origin == 'generated') { - const rawProblemSource = await fetch(generatedPG + ww_problemSource).then((r) => r.text()); - formData.set("rawProblemSource", rawProblemSource); - } - else if (ww_origin == 'webwork2') formData.set("sourceFilePath", ww_sourceFilePath); - formData.set("answersSubmitted", '0'); - formData.set("displayMode", "MathJax"); - formData.set("courseID", ww_course_id); - formData.set("user", ww_user_id); - formData.set("userID", ww_user_id); - formData.set("passwd", ww_passwd); - formData.set("disableCookies", '1'); - formData.set("outputformat", "raw"); - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - formData.set("showSolutions", ww_container.dataset.hasSolution == 'true' ? '1' : '0'); - formData.set("showHints", ww_container.dataset.hasHint == 'true' ? '1' : '0'); - formData.set("problemUUID",ww_id); - } - - // If in Runestone, check if there are previous answer submissions and get them now to use in the form. - let checkboxesString = ''; - if (runestone_logged_in && !action) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const previousAnswers = answersObject.answers; - if (previousAnswers !== null) { - formData.set('WWsubmit', 1); - } - for (const answer in previousAnswers) { - if (previousAnswers[answer].constructor === Array) { - for (const k in previousAnswers[answer]) { - checkboxesString += '&'; - checkboxesString += answer; - checkboxesString += '='; - checkboxesString += previousAnswers[answer][k]; - } - } else { - formData.set(answer, previousAnswers[answer]); - } - } - } - // Need to get form data as a string, including possible repeated checkbox names - // Do not pass post data as an object, or checkbox names will overwrite one another - const formString = new URLSearchParams(formData).toString(); - - $.post(url, formString + checkboxesString, (data) => { - // Create the form that will contain the text and input fields of the interactive problem. - const form = document.createElement("form"); - form.id = ww_id + "-form"; - form.dataset.iframeHeight = 1; - - // Create a div for the problem text. - const body_div = document.createElement("div"); - body_div.id = ww_id + "-body"; - body_div.classList.add("exercise", "exercise-like"); - body_div.lang = data.lang; - body_div.dir = data.dir; - - // Dump the problem text, answer blanks, etc. - body_div.innerHTML = data.rh_result.text; - - // If showPartialCorrectAnswers = 0, alter the feedback buttons according to whether or not the score is 100%. - if ('showPartialCorrectAnswers' in data.rh_result.flags && data.rh_result.flags.showPartialCorrectAnswers == 0) { - if ('score' in data.rh_result.problem_result && data.rh_result.problem_result.score >= 1) { - body_div.querySelectorAll('button.ww-feedback-btn').forEach( - function(button) { - button.classList.remove('btn-info'); - button.classList.add('btn-success'); - button.setAttribute('aria-label', 'Correct'); - button.dataset.bsCustomClass = button.dataset.bsCustomClass + ' correct'; - button.dataset.bsTitle = button.dataset.bsTitle.replace('Answer Preview', 'Correct'); - button.firstChild.classList.add('correct') - } - ); - } else { - body_div.querySelectorAll('button.ww-feedback-btn').forEach( - function(button) { - button.setAttribute('aria-label', 'One or more answers incorrect'); - button.dataset.bsTitle = button.dataset.bsTitle.replace('Answer Preview', 'One or more answers incorrect'); - } - ); - } - } - - // Replace all hn headings with h6 headings. - for (const tag_name of ['h6', 'h5', 'h4', 'h3', 'h2', 'h1']) { - const headings = body_div.getElementsByTagName(tag_name); - for (heading of headings) { - const new_heading = document.createElement("h6"); - new_heading.innerHTML = heading.innerHTML; - cloneAttributes(new_heading, heading); - new_heading.classList.add('webwork-part'); - heading.replaceWith(new_heading); - } - } - - // Hide textarea input and hide associated buttons - var textareas = body_div.getElementsByTagName("textarea"); - for(var i = 0, max = textareas.length; i < max; i++) - { - textareas[i].style.display = "none"; - textareas[i].className = ''; - } - var textareabuttons = body_div.querySelectorAll(".latexentry-preview"); - for(var i = 0, max = textareabuttons.length; i < max; i++) - { - textareabuttons[i].remove(); - } - - adjustSrcHrefs(body_div, ww_domain); - - translateHintSol(ww_id, body_div, ww_domain, - ww_container.dataset.hasHint == 'true', ww_container.dataset.hasSolution == 'true', - ww_container.dataset.hintLabelText, ww_container.dataset.solutionLabelText) - - // insert previous answers - if (runestone_logged_in) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const mqAnswers = answersObject.mqAnswers; - for (const mqAnswer in mqAnswers) { - const mqInput = body_div.querySelector('input[id=' + mqAnswer + ']'); - if (mqInput && mqInput.value == '') { - mqInput.setAttribute('value', mqAnswers[mqAnswer]); - } - } - const answers = answersObject.answers; - for (const answer in answers) { - const input = body_div.querySelector('input[id=' + answer + ']'); - if (input && input.value == '') { - input.setAttribute('value', answers[answer]); - } - } - } - - // insert our cleaned up problem text - form.appendChild(body_div); - - // Set up hidden input fields that the form uses - const wwInputs = { - problemSeed: data.inputs_ref.problemSeed, - problemUUID: data.inputs_ref.problemUUID, - psvn: data.inputs_ref.psvn, - courseName: ww_course_id, - courseID: ww_course_id, - user: ww_user_id, - passwd: ww_passwd, - displayMode: "MathJax", - session_key: data.rh_result.session_key, - outputformat: "raw", - language: data.formLanguage, - showSummary: data.showSummary, - disableCookies: '1', - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - showSolutions: ww_container.dataset.hasSolution == 'true' ? '1' : '0', - showHints: ww_container.dataset.hasHint == 'true' ? '1' : '0', - forcePortNumber: data.forcePortNumber - }; - - if (ww_sourceFilePath) wwInputs.sourceFilePath = ww_sourceFilePath; - else if (ww_problemSource && ww_origin == 'webwork2') wwInputs.problemSource = ww_problemSource; - - for (const wwInputName of Object.keys(wwInputs)) { - const input = document.createElement('input'); - input.type = 'hidden'; - input.name = wwInputName; - input.value = wwInputs[wwInputName]; - form.appendChild(input); - } - - let buttonContainer = ww_container.querySelector('.problem-buttons.webwork'); - // Create the submission buttons if they have not yet been created. - if (!buttonContainer) { - // Hide the original div that contains the Activate. - ww_container.querySelector('.problem-buttons').classList.add('hidden-content', 'hidden'); - - // Create a new div for the webwork buttons. - buttonContainer = document.createElement('div'); - buttonContainer.classList.add('problem-buttons', 'webwork'); - if (activate_button != null) { - // Make sure the button container follows the activate button in the DOM - activate_button.after(buttonContainer); - } else { - ww_container.prepend(buttonContainer); - } - - // Check button - const check = document.createElement("button"); - check.type = "button"; - check.id = ww_id + '-check'; - check.style.marginRight = "0.25rem"; - check.classList.add('webwork-button'); - - check.textContent = runestone_logged_in ? localize_submit : localize_check_responses; - - check.addEventListener('click', () => handleWW(ww_id, "check")); - - buttonContainer.appendChild(check); - - // Show correct answers button if original PTX has answer knowl. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = document.createElement("button"); - correct.classList.add("show-correct", 'webwork-button'); - correct.type = "button"; - correct.style.marginRight = "0.25rem"; - correct.textContent = localize_reveal; - correct.addEventListener('click', () => handleWW(ww_id, 'reveal')); - buttonContainer.appendChild(correct); - } - - // randomize button - const randomize = document.createElement("button") - randomize.type = "button"; - randomize.classList.add('webwork-button'); - randomize.style.marginRight = "0.25rem"; - randomize.textContent = localize_randomize; - randomize.addEventListener('click', () => handleWW(ww_id, 'randomize')); - buttonContainer.appendChild(randomize) - - // reset button - const reset = document.createElement("button") - reset.type = "button" - reset.classList.add('webwork-button'); - reset.textContent = localize_reset; - reset.addEventListener('click', () => resetWW(ww_id)); - buttonContainer.appendChild(reset) - } - - if (runestone_logged_in && action == 'check') { - // Runestone trigger - $("body").trigger('runestone_ww_check', data) - } - let courseUrlBase = ''; - if (runestone_logged_in){ - courseUrlBase = '/ns/books/published/' + eBookConfig.basecourse + '/'; - } - let iframeContents = '' + - '' + - `` + - '' + - `` + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - - if (data.extra_css_files) data.extra_css_files.unshift(...extra_css_files); - else data.extra_css_files = extra_css_files; - for (const cssFile of data.extra_css_files) { - iframeContents += ''; - } - - if (data.extra_js_files) data.extra_js_files.unshift(...extra_js_files); - else data.extra_js_files = extra_js_files; - for (const jsFile of data.extra_js_files) { - iframeContents += ''; - } - - iframeContents += - `` + - '' + - `` + - '' + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content', 'hidden'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'taggedElement' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }, "json"); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const input_id = input.id; - const mq_span = iframe.contentDocument.getElementById(`mq-answer-${input_id}`); - if (mq_span) { - mq_span.style.display = 'none'; - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const correct_ans = answers[name].correct_choice || answers[name].correct_ans; - if (input.value == correct_ans) { - input.checked = true; - } else { - input.checked = false; - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const correct_choices = answers[name].correct_choices; - if (correct_choices.includes(input.value)) { - input.checked = true; - } else { - input.checked = false; - } - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content', 'hidden'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content', 'hidden'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content', 'hidden');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[data-knowl-url]').forEach((node) => { - const dku = node.dataset.knowlUrl; - if (dku !== '#' && !dku.match(/^[a-z]+:\/\//i)) node.dataset.knowlUrl = ww_domain + dku; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = new URL(node.attributes.src.value, ww_domain).href; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // The problem text may come with "hint"s and "solution"s - // Each one is a div.accordion > details.accordion-item > summary.accordion-button - // Styling is not the PTX way, so we change it to one div.solutions - // with (potentially multiple) details.born-hidden-knowl > summary.knowl__link - // Also if hint/sol were missing from the static version, we want these removed here - - const hintSols = body_div.querySelectorAll('.accordion.hint,.accordion.solution'); - if (hintSols.length == 0) {return}; - - for (const hintSol of hintSols) { - const parent = hintSol.parentNode; - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('solutions'); - parent.insertBefore(solutionlikewrapper, hintSol); - - const hintSolType = hintSol.classList.contains('hint') ? 'hint' : 'solution'; - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || - (hintSolType == 'hint' && !b_ptx_has_hint)) - continue; - - const knowlDetails = hintSol.getElementsByTagName('details')[0]; - knowlDetails.className = ''; - knowlDetails.classList.add(hintSolType, 'solution-like', 'born-hidden-knowl'); - solutionlikewrapper.appendChild(knowlDetails); - - const knowlSummary = knowlDetails.getElementsByTagName('summary')[0]; - knowlSummary.className = ''; - knowlSummary.classList.add('knowl__link'); - - const summaryLabel = knowlSummary.children[0]; - summaryLabel.remove(); - - const newLabelSpan = document.createElement('span'); - newLabelSpan.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(newLabelSpan); - - const newLabelPeriod = document.createElement('span'); - newLabelPeriod.innerHTML = '.'; - knowlSummary.appendChild(newLabelPeriod); - - adjustSrcHrefs(knowlDetails, ww_domain); - hintSol.remove(); - - const originalDetailsContent = knowlDetails.getElementsByTagName('div')[0]; - const newDetailsContent = originalDetailsContent.getElementsByTagName('div')[0]; - newDetailsContent.className = ''; - newDetailsContent.classList.add(hintSolType, 'solution-like', 'knowl__content'); - knowlDetails.appendChild(newDetailsContent); - originalDetailsContent.remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function webworkSeedHash(string) { - var hash = 0, i, chr; - if (string.length === 0) return hash; - for (i = 0; i < string.length; i++) { - chr = string.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; //Convert to 32bit integer - } - return Math.abs(hash); -}; diff --git a/slides-annotated/_static/pretext/js/pretext.js b/slides-annotated/_static/pretext/js/pretext.js deleted file mode 100755 index bcddf7e..0000000 --- a/slides-annotated/_static/pretext/js/pretext.js +++ /dev/null @@ -1,257 +0,0 @@ -/******************************************************************************* - * pretext.js - ******************************************************************************* - * The main front-end controller for PreTeXt documents. - * - * Homepage: pretextbook.org - * Repository: https://github.com/PreTeXtBook/JS_core - * - * Authors: David Farmer, Rob Beezer - * - ******************************************************************************* - */ - -// from https://stackoverflow.com/questions/34422189/get-item-offset-from-the-top-of-page -function getOffsetTop(e) { - // recursively walk up the DOM via offsetParent, accumulating offsetTop as we go - if (!e) return 0; - return getOffsetTop(e.offsetParent) + e.offsetTop; -}; - -function scrollTocToActive() { - //Try to figure out current TocItem from URL - let fileNameWHash = window.location.href.split("/").pop(); - let fileName = fileNameWHash.split("#")[0]; - - //Find just the filename in ToC - let tocEntry = document.querySelector('#ptx-toc a[href="' + fileName + '"]'); - if (!tocEntry) { - return; //complete failure, get out - } - - let tocEntryTop = 0; - //See if we can also match fileName#hash (assuming there is a fragment) - if (fileNameWHash.includes('#')) { - let tocEntryWHash = document.querySelector( - '#ptx-toc a[href="' + fileNameWHash + '"]' - ); - if (tocEntryWHash) { - //Matched something below a subsection - activate the list item that contains it - tocEntry.closest("li").querySelectorAll("li").forEach(li => { - li.classList.remove("active"); - }); - tocEntryWHash.closest("li").classList.add("active"); - tocEntryTop = getOffsetTop(tocEntryWHash); - } - } - if (!tocEntryTop) { - tocEntryTop = getOffsetTop(tocEntry); - } - - //Now activate ToC item for fileName and scroll to it - // Don't use scrollIntoView because it changes users tab position in Chrome - // and messes up keyboard navigation - tocEntry.closest("li").classList.add("active"); - // Scroll only if the tocEntry is below the bottom half of the window, - // scrolling to that position. - let toc = document.querySelector("#ptx-toc"); - let tocTop = getOffsetTop(toc); - toc.scrollTop = tocEntryTop - tocTop - 0.4 * self.innerHeight; -} - -function toggletoc() { - thesidebar = document.getElementById("ptx-sidebar"); - if (thesidebar.classList.contains("hidden") || thesidebar.classList.contains("visible")) { - thesidebar.classList.toggle("hidden"); - thesidebar.classList.toggle("visible"); - } else if (thesidebar.offsetParent === null) { /* not currently visible */ - thesidebar.classList.toggle("visible"); - } else { - thesidebar.classList.toggle("hidden"); - } - scrollTocToActive(); -} - -function samePageLink(a) { - if (!(a instanceof HTMLAnchorElement)) return false; - - try { - const linkUrl = new URL(a.href, document.baseURI); - const currentUrl = new URL(window.location.href); - - const sameDocument = - linkUrl.origin === currentUrl.origin && - linkUrl.pathname === currentUrl.pathname && - linkUrl.search === currentUrl.search; - - return sameDocument && !!linkUrl.hash; - } catch (e) { - // Invalid URL - return false; - } -} - - -window.addEventListener("DOMContentLoaded",function(event) { - thetocbutton = document.getElementsByClassName("toc-toggle")[0]; - thetocbutton.addEventListener("click", (e) => { - toggletoc(); - e.stopPropagation(); // keep global click handler from immediately toggling it back - }); - - // For themes that want it, install click handlers to auto close the toc - // when the reader clicks anywhere outside it or selects a subsection. - // (Selecting other sections or chapters navigates away from the page so - // effectively closes the TOC.) - if (getComputedStyle(document.documentElement).getPropertyValue('--auto-collapse-toc') == "yes") { - - const sidebar = document.getElementById("ptx-sidebar"); - - // Handle all clicks outside the sidebar - window.addEventListener("click", function(event) { - if (sidebar.classList.contains("visible")) { - if (!event.composedPath().includes(sidebar)) { - toggletoc(); - } - } - }); - - // Handle clicks inside the sidebar but on link within a subsection. - sidebar.addEventListener("click", function (event) { - if (samePageLink(event.target.closest('a'))) { - toggletoc(); - } - }); - - // Handle persistent sidebar if the page is restored from cache on back/forward buttons. - window.addEventListener('pageshow', (e) => { - if (e.persisted) { - sidebar.classList.remove('visible'); - sidebar.classList.add('hidden'); - } - }); - } -}); - -/* jump to next page if reader tries to scroll past the bottom */ -// var hitbottom = false; -// window.onscroll = function(ev) { -// if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) { -// // you're at the bottom of the page -// console.log("Bottom of page"); -// if (hitbottom) { -// console.log("hit bottom again"); -// thenextbutton = document.getElementsByClassName("next-button")[0]; -// thenextbutton.click(); -// } else { -// hitbottom = true; -// /* only jump to next page if hard scroll in quick succession */ -// window.scrollBy(0, -20); -// setTimeout(function (){ hitbottom = false }, 1000); -// } -// } -// }; - - -//----------------------------------------------------------------------------- -// Dynamic TOC logic -//----------------------------------------------------------------------------- - -//item is assumed to be expander in toc-item -function toggleTOCItem(expander) { - let listItem = expander.closest(".toc-item"); - listItem.classList.toggle("expanded"); - let expanded = listItem.classList.contains("expanded"); - - let itemType = getTOCItemType(listItem); - if(expanded) { - expander.title = "Close" + (itemType !== "" ? " " + itemType : ""); - } else { - expander.title = "Expand" + (itemType !== "" ? " " + itemType : ""); - } - - //should be one of each... for/of for safety and built in null avoidance - for (const childUL of listItem.querySelectorAll(":scope > ul.toc-item-list")) { - for (const childItem of childUL.querySelectorAll(":scope > li.toc-item")) { - if(expanded) { - childItem.classList.add("visible"); - childItem.classList.remove("hidden"); - } else { - childItem.classList.remove("visible"); - childItem.classList.add("hidden"); - } - } - } -} - -//finds item type from classes or empty string on failure -function getTOCItemType(item) { - //Type should be class that looks like toc-X where X is not item. Find it and return X - for(let className of item.classList) { - if(className !== "toc-item" && className.length > 3 && className.slice(0,4) === "toc-") - return className.slice(4); - } - return ""; -} - -//finds depth of toc-item as defined by number .toc-item-lists it is in -function getTOCItemDepth(item) { - let depth = 0; - let curParent = item.closest(".toc-item-list"); - while(curParent !== null) { - depth++; - curParent = curParent.parentElement.closest(".toc-item-list"); - } - return depth; -} - -window.addEventListener("DOMContentLoaded", function(event) { - if(document.querySelector(".ptx-toc.focused") === null) - return; //only in focused mode - - let maxDepth = 1000; //how deep TOC goes - //check toc for depth class and get value from there - for(let className of document.querySelector(".ptx-toc").classList) - if(className.length > 5 && className.slice(0,5) === "depth") - maxDepth = Number(className.slice(5)); - - let preexpandedLevels = 1; //how many levels to preexpand - let tocDataSet = document.querySelector(".ptx-toc").dataset; - if(typeof tocDataSet.preexpandedLevels !== 'undefined') - preexpandedLevels = Number(tocDataSet.preexpandedLevels); - - let tocItems = document.querySelectorAll(".ptx-toc ul.structural > .toc-item"); - for (const tocItem of tocItems) { - let hasChildren = tocItem.querySelector('ul.structural') !== null; - let depth = getTOCItemDepth(tocItem); - - if(hasChildren && depth < maxDepth) { - let expander = document.createElement("button"); - expander.classList.add('toc-expander'); - expander.classList.add('toc-chevron-surround'); - expander.title = 'toc-expander'; - // content of span is set by CSS :before rule. - expander.innerHTML = ''; - tocItem.querySelector(".toc-title-box").append(expander); - expander.addEventListener('click', () => { - toggleTOCItem(expander); - }); - - let isActive = tocItem.classList.contains("contains-active") || tocItem.classList.contains("active"); - let preExpanded = isActive || depth < preexpandedLevels; - let itemType = getTOCItemType(tocItem); - if(preExpanded) { - toggleTOCItem(expander); - } else { - expander.title = "Expand" + (itemType !== "" ? " " + itemType : ""); - } - } - } -}); - -// This needs to be after the TOC's geometry is settled -window.addEventListener("DOMContentLoaded",function(event) { - scrollTocToActive(); -}); - -window.onhashchange = scrollTocToActive; diff --git a/slides-annotated/_static/pretext/js/pretext_add_on.js b/slides-annotated/_static/pretext/js/pretext_add_on.js deleted file mode 100755 index ae2225f..0000000 --- a/slides-annotated/_static/pretext/js/pretext_add_on.js +++ /dev/null @@ -1,1264 +0,0 @@ -/******************************************************************************* - * pretext_add_on.js - ******************************************************************************* - * Javascript for supplementary material in PreTeXt documents. - * - * Homepage: pretextbook.org - * Repository: https://github.com/PreTeXtBook/JS_core - * - * Authors: David Farmer, Rob Beezer, Alex Jordan - * - ******************************************************************************* - */ - -/* -console.log("thisbrowser.userAgent", window.navigator.userAgent); -*/ - -var minivers = "0"; -if (typeof miniversion !== 'undefined') { - console.log("typeof miniversion", typeof miniversion, "dddd", typeof miniversion == 'undefined'); - minivers = miniversion.toString(); -} -console.log(" minivers", minivers); - -/* scrollbar width from https://stackoverflow.com/questions/13382516/getting-scroll-bar-width-using-javascript */ -function getScrollbarWidth() { - var outer = document.createElement("div"); - outer.style.visibility = "hidden"; - outer.style.width = "100px"; - outer.style.msOverflowStyle = "scrollbar"; // needed for WinJS apps - - document.body.appendChild(outer); - - var widthNoScroll = outer.offsetWidth; - // force scrollbars - outer.style.overflow = "scroll"; - - // add innerdiv - var inner = document.createElement("div"); - inner.style.width = "100%"; - outer.appendChild(inner); - - var widthWithScroll = inner.offsetWidth; - - // remove divs - outer.parentNode.removeChild(outer); - - return widthNoScroll - widthWithScroll; -} - -/* - copy permalink address to clipboard - requires browser support, otherwise does nothing -*/ -async function copyPermalink(linkNode) { - // structure borrowed from https://flaviocopes.com/clipboard-api/ - if (!navigator.clipboard) { - // Clipboard API not available - console.log("Error: Clipboard API not available"); - return - } - console.log("copying permalink for", linkNode); - var elem = linkNode.parentElement - if (!linkNode) { - console.log("Error: Something went wrong finding permalink URL") - return - } - const this_permalink_url = linkNode.href; - const this_permalink_description = elem.getAttribute('data-description'); - var link = "" + this_permalink_description + ""; - var msg_link = "" + this_permalink_description + ""; - var text_fallback = this_permalink_description + " \r\n" + this_permalink_url; - var copy_success = true; - try { - // NOTE: this method will only work in Firefox if the user has - // dom.events.asyncClipboard.clipboardItem - // set to true in their about:config. - // Annoyingly, this setting is turned off by default. - // If that setting is off, this try block will fail and we'll use the - // fallback method lower down instead. - await navigator.clipboard.write([ - new ClipboardItem({ - 'text/html': new Blob([link], { type: 'text/html' }), - 'text/plain': new Blob([text_fallback], { type: 'text/plain' }), - }) - ]); - } catch (err) { - console.log('Permalink-to-clipboard using ClipboardItem failed, falling back to clipboard.writeText', err); - copy_success = false; - } - if (! copy_success) { - try { - await navigator.clipboard.writeText(text_fallback); - } catch (err) { - console.log('Permalink-to-clipboard using clipboard.writeText failed', err); - console.error('Failed to copy link to clipboard!'); - return - } - } - - console.log(`copied '${this_permalink_url}' to clipboard`); - // temporary element to alert user that link was copied - let copied_msg = document.createElement('p'); - copied_msg.setAttribute('role', 'alert'); - copied_msg.className = "permalink-alert"; - copied_msg.innerHTML = "Link to " + msg_link + " copied to clipboard"; - elem.parentElement.insertBefore(copied_msg, elem); - // show confirmation for a couple seconds - await new Promise((resolve, reject) => setTimeout(resolve, 1500)); - copied_msg.remove(); - -} - -// Add event listener to add onClick handler for permalinks -window.addEventListener("DOMContentLoaded", function() { - const permalinks = document.querySelectorAll('.autopermalink > a'); - permalinks.forEach(link => { - link.addEventListener('click', function(event) { - event.preventDefault(); // Prevent default anchor behavior - copyPermalink(link); - }); - }); -}); - - -window.addEventListener("load",function(event) { - - - /* click an image to magnify */ - $('body').on('click','.image-box > img:not(.draw_on_me):not(.mag_popup), .sbspanel > img:not(.draw_on_me):not(.mag_popup), figure > img:not(.draw_on_me):not(.mag_popup), figure > div > img:not(.draw_on_me):not(.mag_popup)', function(){ - var img_big = document.createElement('div'); - img_big.setAttribute('style', 'background:#fff;'); - img_big.setAttribute('class', 'mag_popup_container'); - img_big.innerHTML = ''; - // place_to_put_big_img = $(this).parents(".sbsrow, figure, li").last(); - place_to_put_big_img = $(this).parents(".image-box, .sbsrow, figure, li, .cols2 article:nth-of-type(2n)").last(); - // for .cols2, the even ones have to go inside the previous odd one - if (place_to_put_big_img.prop("tagName") == "ARTICLE") { - place_to_put_big_img = place_to_put_big_img.prev().children().first(); - } - $(img_big).insertBefore(place_to_put_big_img); - }); - - /* click the big image to make it go away */ - $('body').on('click','img.mag_popup', function(){ - this.parentNode.remove(); - }); - - /* add ids to p that have none */ - p_no_id = document.querySelectorAll('.main p:not([id])'); - for (var n=p_no_id.length - 1; n >= 0; --n) { - e = p_no_id[n]; - if (e.hasAttribute('id')) { -/* - console.log(e, "was id'd in a previous round"); -*/ - continue - } -/* -console.log("this is e", e); -*/ - if (e.classList.contains('watermark')) { - console.log(e, "skipping the watermark"); - continue - } -/* - console.log("\n XXXXXXXXX p with no id", e); -*/ - prev_p = $(e).prevAll("p"); - console.log("prev_p", prev_p, "xx"); - if(prev_p.length == 0) { - console.log(" PPP problem: prev_p has no length:", prev_p); - continue - } - console.log("which has id", prev_p[0].id); - var parts_found = 1; - var parts_to_id = [e]; - for (var i=0; i < prev_p.length; ++i) { - this_previous = prev_p[i]; - console.log("i", i, "this_previous", this_previous, "id", this_previous.id, "???", this_previous.hasAttribute('id')) - if (!this_previous.hasAttribute('id')) { - parts_to_id.unshift(this_previous) - } - else { - base_id = this_previous.id; - console.log("base_id", base_id); - console.log("ready to add id to", parts_to_id); - for (var j=0; j < parts_to_id.length; ++j) { - ++parts_found; - var next_id = base_id + "-part" + parts_found.toString(); - console.log("parts_found", parts_found, "next_id", next_id); - parts_to_id[j].setAttribute("id", next_id); - } - break // because we found the id that is the base for the missing ids - } - } - } - - console.log("adding video popouts"); - all_iframes = document.querySelectorAll('body iframeXXXX'); - // for now, we just want the iframes that hace youtube in the src - for (var i = 0; i < all_iframes.length; i++) { - this_item = all_iframes[i]; - this_item_src = this_item.src; - // console.log("this_item_src", this_item_src); - if(this_item_src.includes("youtube")) { - this_item_id = this_item.id; - this_item_width = this_item.width; - this_item_height = this_item.height; - if(this_item_height < 150) { continue } - console.log("found a youtube video on", this_item_id); - var empty_div = document.createElement('div'); - var this_videomag_container = document.createElement('div'); - parent_tag = this_item.parentElement.tagName; - if(parent_tag == "FIGURE") { - this_videomag_container.setAttribute("class", "videobig"); - } else { - this_videomag_container.setAttribute("class", "videobig nofigure"); - } -/* - this_videomag_container.setAttribute('class', 'videobig'); -*/ - this_videomag_container.setAttribute('video-id', this_item_id); - this_videomag_container.setAttribute('data-width', this_item_width); - this_videomag_container.setAttribute('data-height', this_item_height); - this_videomag_container.innerHTML = 'fit width'; - -/* replace this with a surrounding div, for placement, containing a inline-block so the background looks right */ - this_item.insertAdjacentElement("beforebegin", empty_div); // because of hard-coded permalinks being inline-block */ - this_item.insertAdjacentElement("beforebegin", this_videomag_container); - this_item.insertAdjacentElement("beforebegin", empty_div); // because of hard-coded permalinks being inline-block */ - } - } - -/* replace this with a single class fo rthe button, with supplementary classes that say to shrink or grow */ - $(".videobig").click(function(){ - parent_video_id = this.getAttribute("video-id"); - console.log("clicked videobig for", parent_video_id); - this_video = document.getElementById(parent_video_id); - console.log("make big: ", this_video); - original_width = this.getAttribute("data-width"); - original_height = this.getAttribute("data-height"); - - browser_width = $(window).width(); - width_ratio = browser_width/original_width; - console.log("the browser is wider by a factor of",width_ratio); - this_video.setAttribute("width", width_ratio*original_width); - this_video.setAttribute("height", width_ratio*original_height); - this_video.setAttribute("style", "position:relative; left:-260px; z-index:1000"); - - this.setAttribute("class", "videosmall"); - this.innerHTML = "make small"; - $(".videosmall").click(function(){ - console.log("clicked videosmall"); - parent_video_id = this.getAttribute("video-id"); - this_video = document.getElementById(parent_video_id); - original_width = this.getAttribute("data-width"); - original_height = this.getAttribute("data-height"); - - this_video.removeAttribute("style"); - this_video.setAttribute("width", original_width); - this_video.setAttribute("height", original_height); - this.setAttribute("class", "videobig"); - this.innerHTML = "fit width"; - }); - }); - -}, -false); - -/* for the random WW problems */ - -function updateURLParameter(url, param, paramVal){ - var newAdditionalURL = ""; - var tempArray = url.split("?"); - var baseURL = tempArray[0]; - var additionalURL = tempArray[1]; - var temp = ""; - if (additionalURL) { - tempArray = additionalURL.split("&"); - for (var i=0; i div.onclick > svg > path').attr('fill', '#0000aa'); - $('path').attr('fill', '#0000aa') -// }, 5000) -}); -*/ - -window.addEventListener("load",function(event) { - document.onkeyup = function(event) - { - var e = (!event) ? window.event : event; - switch(e.keyCode) - { - case 13: //CR - just_hit_escape = false; - if ($(document.activeElement).hasClass("workspace")) { - process_workspace() - } - case 27: //esc - // var parent_sage_cell = $(this).closest(".sagecell_editor"); - var parent_sage_cell = document.activeElement.closest(".sagecell_editor"); - if (parent_sage_cell && !just_hit_escape) { - console.log("staying in the sage cell", parent_sage_cell, document.activeElement) - just_hit_escape = true; - setTimeout(function(){ just_hit_escape = false }, 1000); - // console.log("parent_sage_cell", parent_sage_cell); - // if ($(parent_sage_cell).hasClass('sagecell_editor')) { - // console.log("I am trapped in a sage cell", $(document.activeElement).closest(".sagecell_editor")); - // console.log($(document.activeElement)); - // var this_sage_cell = $(document.activeElement).closest(".sagecell_editor"); - // this_sage_cell.next().focus; - // } - // else - } else - if(knowl_focus_stack.length > 0 ) { - most_recently_opened = knowl_focus_stack.pop(); - knowl_focus_stack_uid.pop(); - most_recently_opened.focus(); - console.log("moved back one knowl"); - } else { - console.log("no open knowls being tracked"); - break; - } - break; - } -}; -}, -false); - -// a hack for hosted tracking - -window.addEventListener("load",function(event) { - if($('body').attr('id') == "judson-AATA") { - console.log(" found AATA"); - console.log(" looking for id"); - if (typeof eBookConfig !== 'undefined') { - if(eBookConfig['username']) { - aa_id = "run" + eBookConfig['username']; - ut_id = eBookConfig['username']; - console.log(" done looking for id", ut_id); -var newscript = document.createElement('script'); - newscript.type = 'text/javascript'; - newscript.async = true; - newscript.src = 'https://pretextbook.org/js/' + '0.13' + '/' + 'trails' + '.js'; - var allscripts = document.getElementsByTagName('script'); - var s = allscripts[allscripts.length - 1]; - console.log('s',s); - console.log("adding a script", newscript); - s.parentNode.insertBefore(newscript, s.nextSibling); - trail = true; - console.log(" done adding script"); - } else { - console.log(" did not find username"); - } - } else { - console.log(" did not find eBookConfig") - } - } -}); - -function loadResource(type, file) { - /* type should be js or css */ - if (typeof js_version === 'undefined') { js_version = '0.2' } - if (typeof css_version === 'undefined') { css_version = '0.6' } - var newresource, allresources, s; - var linktype = "script"; - if (type == "css") { linktype = "link" } - newresource = document.createElement(linktype); - - if (type == "css") { - newresource.type = 'text/css'; - newresource.rel = 'stylesheet'; - newresource.href = 'https://pretextbook.org/css/' + css_version + '/' + file + '.css'; - newresource.href += '?minivers=' + minivers; - } else if (type == "js") { - newresource.type = 'text/javascript'; -// newscript.async = true; - newresource.src = 'https://pretextbook.org/js/' + js_version + '/' + file + '.js'; - newresource.src += '?minivers=' + minivers; - } else { - console.log("unknown resource type", type, "for", file); - return - } - - allresources = document.getElementsByTagName(linktype); - s = allresources[allresources.length - 1]; - console.log('s',s); - console.log("adding a resource", newresource); - s.parentNode.insertBefore(newresource, s.nextSibling); -} - - -window.addEventListener("load",function(event) { - if(false && $('body').attr('id') == "pretext-SA") { - console.log(" found DMOI"); - if (typeof uname === "undefined") { uname = "" } - console.log("aaaa", uname, " uname"); - if(uname == "editor") { - loadResource('js', 'edit'); - } else { - console.log("not enabling editing") - } - /* } else if ($('body').attr('id') == "pugetsound-SW") { */ - } else if (false && window.location.href.includes("soundwriting.pugetsound")) { -/* a bunch of temporary exploration for a Sound Writing survey */ - console.log("please take our survey"); - console.log(window.location.href); - console.log(window.location.href.includes("soundwriting.pugetsound")); - - loadResource("js", "login"); - loadResource("css", "features"); - setTimeout( loadResource("js", "survey"), 1000); /* I know: sloppy */ - - // } else if ((typeof online_editable !== 'undefined') && online_editable) { - } else if (false && $('body').attr('id') == "pretext-SA") { - loadResource('css', 'features'); - loadResource('js', 'login') - loadResource('js', 'edit'); - } else { - var this_source_txt; - var source_url = window.location.href; - source_url = source_url.replace(/(#|\?).*/, ""); - source_url = source_url.replace(/html$/, "ptx"); - if (typeof sourceeditable !== 'undefined') { - fetch(source_url).then( - function(u){ return u.text();} - ).then( - function(text){ - this_source_txt = text; - if (this_source_txt.includes("404 Not")) { - console.log("Editing not enabled: source unavailable") - } else { - loadResource('css', 'features'); - loadResource('css', 'edit'); - loadResource('js', 'login') - loadResource('js', 'edit'); - } - } - ); - } else { - console.log("Source file unavailable: editing not possible") - } - } - -}); - -// this is to open every knowl on a page -// (this code is not actually used anywhere) -window.addEventListener("load",function(event) { - if($('body').hasClass("braillesample")) { - var knowl_id_counterX = 0; - console.log(" found braillesample"); - var all_knowls = $('[data-knowl]'); - console.log("found", all_knowls.length, "knowls"); - console.log("which are", all_knowls); - for (var j=1; j < all_knowls.length; ++j) { - console.log(j, "un-knowling", all_knowls[j]); - console.log("attr", $(all_knowls[j]).attr("data-knowl")); - $knowl = $(all_knowls[j]); - if(!$knowl.attr("data-knowl-uid")) { - $knowl.attr("data-knowl-uid", knowl_id_counterX); - knowl_id_counterX++; - } - knowl_click_handler($knowl); - // knowl_click_handler($(all_knowls[j])) - } -}}); - -// when the anchor is a knowl, open it -window.addEventListener("load",function(event) { - if (window.location.hash.length) { - let id = window.location.hash.substring(1); - var the_anchor = document.getElementById(id); - console.log("id", id, "the_anchor", the_anchor); - if (the_anchor.tagName == "ARTICLE") { - var contained_knowl = the_anchor.querySelector("a[data-knowl]"); - if (contained_knowl && contained_knowl.parentElement == the_anchor) { - console.log("found a knowl", contained_knowl); - // knowl_click_handler($(contained_knowl)) - contained_knowl.click() - } - } else if (the_anchor.hasAttribute("data-knowl")) { - the_anchor.click() - } else { - // if it is a hidden knowl, find the knowl and open it - var this_hidden_content = the_anchor.closest(".hidden-content"); - if (this_hidden_content) { - console.log("linked to a hidden knowl with this_hidden_content", this_hidden_content); - var the_refid = this_hidden_content.id; - var this_knowl = document.querySelector('[data-refid="' + the_refid + '"]'); - this_knowl.click() - } - } - } -}); - - -// What purpose does this serve? -function urlattribute() { - var this_urlstub = window.location.hostname; - document.body.setAttribute("data-urlstub", this_urlstub); -} - - -// The new method for creating pages and adjusting workspace // - -// This is used multiple places to set height of workspace divs to their author-provided heights -function setInitialWorkspaceHeights() { - const workspaces = document.querySelectorAll('.workspace'); - workspaces.forEach(ws => { - ws.style.height = ws.getAttribute('data-space') || '0px'; - ws.setAttribute("contenteditable", "true"); - }); -} - -// If a printout (worksheet or handout) includes authored pages, we only need to put content before the first page and after the last page into the first and last pages, respectively. -function adjustPrintoutPages() { - const printout = document.querySelector('section.worksheet, section.handout'); - if (!printout) { - console.warn("No printout found, exiting adjustPrintoutPages."); - return; - } - const pages = printout.querySelectorAll('.onepage'); - if (pages.length === 0) { - console.warn("No pages found in printout, exiting adjustPrintoutPages."); - return; - } - // Find all children before the first .onepage element: - const firstPage = pages[0]; - const lastPage = pages[pages.length - 1]; - // Move all children before the first page into the first page - const pageFirstChild = firstPage.firstChild; - let currentChild = printout.firstChild; - while (currentChild && currentChild !== firstPage) { - const nextChild = currentChild.nextSibling; // Save the next sibling before removing - firstPage.insertBefore(currentChild, pageFirstChild); // Move to the first page - currentChild = nextChild; // Move to the next child - } - // Now find all children after the last .onepage element: - let nextChild = lastPage.nextSibling; - while (nextChild) { - const tempChild = nextChild; - nextChild = nextChild.nextSibling; - lastPage.appendChild(tempChild); - } - console.log("Moved all content before the first page and after the last page into the respective pages."); -} - -// This is the main function we will call then a printout does not come from the XSL with pages already defined (for now, the XSL will keep the behavior as an option). -function createPrintoutPages(margins) { - - // Assumptions: needs to work for both letter (8.5in x 11in) and a4 (210mm x 297mm) paper sizes. We will work in pixels (96/in): those are 816px x 1056px and 794px x 1122.5px respectively (1 inch = 96 px, 1 cm = 37.8 px). We assume that the printing interface of the browser will do the right thing with these. - - // For purposes of finding page breaks, we will use 794 as our width and 1056 as our height (so A4 width and letter height). Then we will rescale workspace on each page to fit the actual paper size selected. - - const conservativeContentHeight = 1056 - (margins.top + margins.bottom); // in pixels - const conservativeContentWidth = 794 - (margins.left + margins.right); // in pixels - - const printout = document.querySelector('section.worksheet, section.handout'); - if (!printout) { - console.warn("No printout found, exiting createPrintoutPages."); - return; - } - printout.style.width = toString(conservativeContentWidth + margins.left + margins.right) + 'px'; - // Set the height of each workspace based on its data-space attribute - setInitialWorkspaceHeights(printout); - - // We want to consider each "block" of the printout. Some of these will be direct children of the printout, some will be nested inside these children. So first create a list of the elements that we consider blocks. - let rows = []; - for (const child of printout.children) { - if (child.classList.contains('sidebyside')) { - // sidebyside could have tasks, but we don't want to dive further into them. - rows.push(child); - } else if (child.querySelector('.task')) { - // Keep the child as a block, but put each task after the first one as its own row: - rows.push(child); - const tasks = child.querySelectorAll('.task'); - for (let i = tasks.length-1; i > 0; i--) { - // Move the task out of the original child and place it directly after it in the printout. We do this in reverse order so when every task is moved, they return to the original order. They will then be added to the rows list as their own blocks. - printout.insertBefore(tasks[i], child.nextSibling); - } - // Skipping separate treatment of exercisegroups for now. - //} else if (child.classList.contains('exercisegroup')) { - // for (const subChild of child.children) { - // if (subChild.classList.contains('exercisegroup-exercises')){ - // for (const row of subChild.children){ - // rows.push(row); - // } - // } else { - // rows.push(child); - // } - // } - } else { - rows.push(child); - } - } - // Loop through the blocks and create a list of objects including the block, its height, and its workspace height. Only include blocks that have height (this will remove autopermalinks, as desired). - let blockList = []; - for (const row of rows) { - let blockHeight = getElementTotalHeight(row); - if (blockHeight === 0) { - console.log("Skipping row with zero height:", row); - continue; - } - let totalWorkspaceHeight = 0; - if (row.querySelector('.workspace')) { - // Workspace height is not just sum of workspace heights; we need to be careful with sidebyside and columns - totalWorkspaceHeight = getElemWorkspaceHeight(row); - } - blockList.push({elem: row, height: blockHeight, workspaceHeight: totalWorkspaceHeight}); - } - - // Now find pageBreaks so that extra workspace is as uniform as possible. - const pageBreaks = findPageBreaks(blockList, conservativeContentHeight); - - // Create page divs and insert rows into them - for (let i = 0; i < pageBreaks.length; i++) { - const pageDiv = document.createElement('section'); - pageDiv.classList.add('onepage'); - if (i === 0) { - pageDiv.classList.add('firstpage'); - } - // A single page will be both first and last - if (i === pageBreaks.length - 1) { - pageDiv.classList.add('lastpage'); - } - // The pageBreaks array gives the indices of blocks that should start a page. - // So we will want to look for go through the blocks selecting those starting with the previous index (or 0) up to but not including the current index. - const start = pageBreaks[i-1] || 0; - const end = pageBreaks[i]; - for (let j = start; j < end; j++) { - const row = blockList[j].elem; - pageDiv.appendChild(row); - } - printout.appendChild(pageDiv); - } - - // remove any old content that is not in a page - for (const child of printout.children) { - if (!child.classList.contains('onepage')) { - console.log("Removing old child not in a page:", child); - printout.removeChild(child); - } - } -} - - - // We look at each page and adjust the heights of the workspaces to fit it nicely into the page. - // The width and height of the page will now depend on the letter or a4 setting. -function adjustWorkspaceToFitPage({paperSize, margins}) { - let paperWidth, paperHeight; - if (paperSize === 'a4' || document.body.classList.contains('a4')) { - console.log("Setting page size to A4"); - paperWidth = 794; // 210mm in px - paperHeight = 1122.5; // 297mm in px 794px x 1122.5px - } else { - console.log("Setting page size to Letter"); - paperWidth = 816; // 8.5in in px - paperHeight = 1056; // 11in in px - } - const paperContentHeight = paperHeight - (margins.top + margins.bottom); - - // Reset the heights of workspace divs to their author-provided heights - setInitialWorkspaceHeights(); - - const pages = document.querySelectorAll('.onepage'); - pages.forEach(page => { - console.log("Adjusting workspace height for page:", page); - // Set width to get accurate calculations - page.style.width = paperWidth + 'px'; - const rows = page.children; - let totalContentHeight = 0; - let totalWorkspaceHeight = 0; - for (const row of rows) { - totalContentHeight += getElementTotalHeight(row); - totalWorkspaceHeight += getElemWorkspaceHeight(row); - } - if (totalWorkspaceHeight === 0) { - console.log("No workspaces on this page, skipping workspace adjustment."); - // Reset the style for the page - page.style.width = ""; - return; - } - const extraHeight = paperContentHeight - totalContentHeight; - console.log("Extra height to distribute across workspaces:", extraHeight, "px."); - // Determine the factor by which to multiply each workspace to make the total height fit the paperContentHeight - const workspaceAdjustmentFactor = (totalWorkspaceHeight + extraHeight) / totalWorkspaceHeight; - console.log("Workspace adjustment factor for page:", workspaceAdjustmentFactor); - // Now adjust each workspace in the page by this factor - const pageWorkspaces = page.querySelectorAll('.workspace'); - pageWorkspaces.forEach(ws => { - const originalHeight = ws.offsetHeight; - const newHeight = originalHeight * workspaceAdjustmentFactor; - ws.style.height = newHeight + "px"; - }); - // Reset the style for the page - page.style.width = ""; - }); - console.log("Set page sizes to content area of paper size."); -} - -// Helper functions for calculating heights and workspace sizes -function getElementTotalHeight(elem) { - // Calculate the total height of the element, including padding, border, and top margin. - const style = getComputedStyle(elem); - const marginTop = parseFloat(style.marginTop); - const marginBottom = parseFloat(style.marginBottom); - const height = elem.offsetHeight; - return height + marginTop + marginBottom; -} - -function getElemWorkspaceHeight(elem) { - // Calculate the total height of all workspaces in the element. - // This is easy for elements stacked vertically, but we must be careful for side-by-side workspaces. Since we will multiply each workspace by a factor to fit the page, taking the largest workspace height should give us an upper bound for the amount of vertical space that is workspace. - // Note that this won't work well if we need to reduce the workspace, since there we would want to take the minimum heights. - if (elem.classList.contains('sidebyside')) { - const sbspanels = elem.querySelectorAll('.sbspanel'); - let max = 0; - sbspanels.forEach(panel => { - const workspaces = panel.querySelectorAll('.workspace'); - let totalHeight = 0; - workspaces.forEach(workspace => { - const workspaceHeight = workspace.offsetHeight; - if (workspaceHeight) { - totalHeight += workspaceHeight; - } - }); - if (totalHeight > max) { - max = totalHeight; // Take the maximum height of workspaces in sidebyside - } - }); - return max; // Return the maximum height of workspaces in sidebyside - } - // We can take care of exercisegroups and single colomn regular layout together. - let columns = 1; - if (elem.classList.contains('exercisegroup')) { - // Check for column classes and set columns accordingly - for (let i = 2; i <= 6; i++) { - if (elem.querySelector(`.cols${i}`)) { - columns = i; - console.log("Found exercisegroup with columns:", columns); - break; - } - } - } - const workspaces = elem.querySelectorAll('.workspace'); - let totalHeight = 0; - workspaces.forEach(ws => { - const workspaceHeight = ws.offsetHeight; - if (workspaceHeight) { - totalHeight += workspaceHeight; - } - }); - return totalHeight / columns; // Divide by columns if sidebyside to get average height per column -} - -// Functions for finding the optimal page breaks -function findPageBreaks(rows, pageHeight) { - // An array for the page breaks. The nth element will be the index of the last row on page n. - let pageBreaks = []; - // An array for the minimum cost possible for rows i to the end. - let minCost = Array(rows.length).fill(Infinity); - minCost[rows.length] = 0; // No cost for no rows - // An array to keep track of the next row to start a new page after i in minCost. - let nextPageBreak = Array(rows.length).fill(-1); - - // Now loop through the rows in reverse order to find the optimal page breaks. - for (let i = rows.length - 1; i >= 0; i--) { - let cumulativeHeight = 0; - let cumulativeWorkspaceHeight = 0; - // Loop through the rows starting from i to find the best page break - for (let j = i; j < rows.length; j++) { - cumulativeHeight += rows[j].height; - cumulativeWorkspaceHeight += rows[j].workspaceHeight; - if (cumulativeHeight > pageHeight) { - if (j === i) { - // The page height is too big for a single row. We make this row its own page and move on. - console.log("Row", i, "exceeds page height by itself, setting as its own page."); - minCost[i] = 0; // No cost for a single row - nextPageBreak[i] = i + 1; // The next page break is after this row - break; // Move to the next row - } else { - // We have already set minCost and NextPageBreak at an earlier point in the loop. This means we have done the best we can for this row so we stop and move to the next earlier row. - break; // Stop if we exceed the page height - } - } - - const cost = (pageHeight - cumulativeHeight)**2 + minCost[j+1]; // Cost is how much space is left on the page, plus the cost of the following pages. - if (cost < minCost[i]) { - minCost[i] = cost; - nextPageBreak[i] = j+1; // Set the next page break to be after row j - } - } - } - // Backtrack to find the actual page breaks based on nextPageBreak - // Note: the nextPage = 1 is not an indexing mistake; we always assume that row 0 is a title and will go on the same page as row 1. - let nextPage = 1; - while (nextPage < rows.length) { - pageBreaks.push(nextPageBreak[nextPage]); - nextPage = nextPageBreak[nextPage]; - } - return pageBreaks; -} - -function setPageGeometryCSS({paperSize, margins}) { - // Remove any existing geometry CSS to avoid duplicates - const existingStyle = document.getElementById("page-geometry-css"); - if (existingStyle) { - existingStyle.remove(); - } - let wsWidth = paperSize === "letter" ? "816px" : "794px"; // 8.5in for Letter, 210mm for A4 - let wsHeight = paperSize === "letter" ? "1056px" : "1123px"; // 11in for Letter, 297mm for A4 - // Create a new style element for geometry CSS - const style = document.createElement("style"); - // Add an identifier to the style element to avoid conflicts - style.id = "page-geometry-css"; - // NB we need to add the fallback values for the margins in @page because some browsers do not support CSS variables in @page rules. - style.textContent = ` - :root { - --ws-width: ${wsWidth}; - --ws-height: ${wsHeight}; - --ws-top-margin: ${margins.top}px; - --ws-right-margin: ${margins.right}px; - --ws-bottom-margin: ${margins.bottom}px; - --ws-left-margin: ${margins.left}px; - } - @page { - margin: var(--ws-top-margin, ${margins.top}px) var(--ws-right-margin, ${margins.right}px) var(--ws-bottom-margin, ${margins.bottom}px) var(--ws-left-margin, ${margins.left}px); - } - `; - document.head.appendChild(style); -} - -function toggleWorkspaceHighlight(isChecked) { - if (isChecked) { - // Toggle the highlight class on the body based on the checkbox state - document.body.classList.add("highlight-workspace"); - // If we haven't already inserted divs to show the original workspace heights, do that now - if (!document.querySelector('.workspace-container')) { - console.log("adding original workspace divs"); - // Insert divs to show the original workspace - document.querySelectorAll('.workspace').forEach(workspace => { - // Create a container div to hold the workspace div and the original div - const container = document.createElement('div'); - container.classList.add('workspace-container'); - // Set the container height to the current workspace height - container.style.height = window.getComputedStyle(workspace).height; - const original = document.createElement('div'); - original.classList.add('original-workspace'); - const originalHeight = workspace.getAttribute('data-space') || '0px'; - original.setAttribute('title', 'Author-specified workspace height (' + originalHeight + ')'); - console.log("setting original workspace height for", workspace); - // Use the data-space attribute for height of original workspace - original.style.height = originalHeight; - // insert original div before the workspace content - container.appendChild(original); - // Add a warning class if the original height is greater than the current height - if (original.offsetHeight > workspace.offsetHeight) { - original.classList.add('warning'); - } - // Move the workspace into the container - workspace.parentNode.insertBefore(container, workspace); - container.appendChild(workspace); - }); - } - } else { - document.body.classList.remove("highlight-workspace"); - } -} - -// Printout print preview and page setup -window.addEventListener("load",function(event) { - // We condition on the existence of the papersize radio buttons, which only appear in the printout print preview. - if (document.querySelector('input[name="papersize"]')) { - // First, get the margins for pages to be passed around as needed. - const marginList = document.querySelector('section.worksheet, section.handout').getAttribute('data-margins').split(' '); - // Convert margin values to pixels if they are not already numbers - function toPixels(value) { - if (typeof value === "number") return value; - if (typeof value !== "string") return 0; - value = value.trim(); - if (value.endsWith("px")) { - return parseFloat(value); - } else if (value.endsWith("in")) { - return Math.floor(parseFloat(value) * 96); - } else if (value.endsWith("cm")) { - return Math.floor(parseFloat(value) * 37.8); - } else if (value.endsWith("mm")) { - return Math.floor(parseFloat(value) * 3.78); - } else if (value.endsWith("pt")) { - return Math.floor(parseFloat(value) * (96 / 72)); - } else { - // fallback: try to parse as px - return parseFloat(value) || 0; - } - } - const margins = { - top: toPixels(marginList[0] || "0.75in"), // Default to 0.75in if not specified - right: toPixels(marginList[1] || "0.75in"), - bottom: toPixels(marginList[2] || "0.75in"), - left: toPixels(marginList[3] || "0.75in") - } - // Get the papersize from localStorage or set it based on user's geographic region - let paperSize = localStorage.getItem("papersize"); - if (paperSize) { - const radio = document.querySelector(`input[name="papersize"][value="${paperSize}"]`); - if (radio) { - radio.checked = true; - } - // Set the papersize class on body - document.body.classList.remove("a4", "letter"); - document.body.classList.add(paperSize); - setPageGeometryCSS({paperSize: paperSize, margins: margins}); - } else { - // Try to set papersize based on user's geographic region - // Default to 'letter' for North and South America, 'a4' elsewhere - try { - fetch('https://ipapi.co/json/') - .then(response => response.json()) - .then(data => { - let continent = data && data.continent_code ? data.continent_code : ""; - paperSize = (continent === "NA" || continent === "SA") ? "letter" : "a4"; - const radio = document.querySelector(`input[name="papersize"][value="${paperSize}"]`); - if (radio) { - radio.checked = true; - localStorage.setItem("papersize", paperSize); - } - document.body.classList.remove("a4", "letter"); - document.body.classList.add(paperSize); - console.log("Setting papersize to", paperSize); - }) - .catch((err) => { - // rethrow to be caught by the outer catch - throw err; - }); - } catch (e) { - // fallback: default to letter - const radio = document.querySelector(`input[name="papersize"][value="letter"]`); - if (radio) radio.checked = true; - } - //NB: the default papersize is set to 'letter' in the body class list. - } - const papersizeRadios = document.querySelectorAll('input[name="papersize"]'); - papersizeRadios.forEach(radio => { - radio.addEventListener('change', function() { - if (this.checked) { - document.body.classList.remove("a4", "letter"); - document.body.classList.add(this.value); - localStorage.setItem("papersize", this.value); - console.log("Setting papersize to", this.value); - - // If the "highlight workspace" checkbox was already checked, then we should restart the process by reloading the page. Specifically, we run into issues when there are .workspace-container divs already present. - if (document.querySelector(".workspace-container")) { - console.log("Reloading page to apply new papersize with workspace highlight enabled."); - window.location.reload(); - return; - } else { - // Otherwise, we can just adjust the workspace heights to fit the new paper size. - console.log("Adjusting workspace heights to fit new papersize."); - adjustWorkspaceToFitPage({paperSize: this.value, margins: margins}); - setPageGeometryCSS({paperSize: this.value, margins: margins}); - } - } - }); - }); - - // Open all details elements (knowls) on the page - var born_hidden_knowls = document.querySelectorAll('details'); - console.log("born_hidden_knowls", born_hidden_knowls); - born_hidden_knowls.forEach(function(detail) { - detail.open = true; - }); - // If the printout has authored pages, there will be at least one .onepage element. - if (document.querySelector('.onepage')) { - adjustPrintoutPages(); - /* not the right way: need to figure out what this needs to wait for */ - //window.setTimeout(adjustPrintoutPages, 1000); - } else { - createPrintoutPages(margins); - } - // After pages are set up, we adjust the workspace heights to fit the page (based on the paper size). - adjustWorkspaceToFitPage({paperSize: paperSize, margins: margins}); - - console.log("finished adjusting workspace"); - - - // Get the 'highlight workspace' checkbox state from localStorage or set it to false by default - const highlightWorkspaceCheckbox = document.getElementById("highlight-workspace-checkbox"); - if (highlightWorkspaceCheckbox) { - highlightWorkspaceCheckbox.checked = localStorage.getItem("highlightWorkspace") === "true"; - highlightWorkspaceCheckbox.addEventListener("change", function() { - localStorage.setItem("highlightWorkspace", this.checked); - toggleWorkspaceHighlight(this.checked); - }); - // Initial toggle to apply the highlight class if checked - toggleWorkspaceHighlight(highlightWorkspaceCheckbox.checked); - } - - - - // Not sure why this is here: - window.setTimeout(urlattribute, 1500); - } -}); - - - -//----------------------------------------------------------------- -// Dark/Light mode swiching - -function isDarkMode() { - if (document.documentElement.dataset.darkmode === 'disabled') - return false; - - const currentTheme = localStorage.getItem("theme"); - if (currentTheme === "dark") - return true; - else if (currentTheme === "light") - return false; - - return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; -} - -function setDarkMode(isDark) { - if(document.documentElement.dataset.darkmode === 'disabled') - return; - - const parentHtml = document.documentElement; - const iframes = document.querySelectorAll("iframe[data-dark-mode-enabled]"); - - // Update the parent document - if (isDark) { - parentHtml.classList.add("dark-mode"); - } else { - parentHtml.classList.remove("dark-mode"); - } - - // Sync each iframe's class with the parent - for (const iframe of iframes) { - try { - const iframeHtml = iframe.contentWindow.document.documentElement; - if (isDark) { - iframeHtml.classList.add("dark-mode") - } else { - iframeHtml.classList.remove("dark-mode") - } - } catch (err) { - console.warn("Dark mode sync to iframe failed:", err); - } - } - - const modeButton = document.getElementById("light-dark-button"); - if (modeButton) { - modeButton.querySelector('.icon').innerText = isDark ? "light_mode" : "dark_mode"; - modeButton.querySelector('.name').innerText = isDark ? "Light Mode" : "Dark Mode"; - } -} - -// Run this as soon as possible to avoid flicker -setDarkMode(isDarkMode()); - -// Rest of dark mode setup logic waits until after load -window.addEventListener("DOMContentLoaded", function(event) { - // Rerun setDarkMode now that it can update buttons - const isDark = isDarkMode(); - setDarkMode(isDark); - - const modeButton = document.getElementById("light-dark-button"); - modeButton.addEventListener("click", function() { - const wasDark = isDarkMode(); - setDarkMode(!wasDark); - localStorage.setItem("theme", wasDark ? "light" : "dark"); - }); -}); - -// Share button and embed in LMS code -window.addEventListener("DOMContentLoaded", function(event) { - const shareButton = document.getElementById("embed-button"); - if (shareButton) { - const sharePopup = document.getElementById("embed-popup"); - const embedCode = ""; - const embedTextbox = document.getElementById("embed-code-textbox"); - if (embedTextbox) { - embedTextbox.value = embedCode; - } - shareButton.addEventListener("click", function() { - sharePopup.classList.toggle("hidden"); - }); - const copyButton = document.getElementById("copy-embed-button"); - if (copyButton) { - copyButton.addEventListener("click", function() { - const embedTextbox = document.getElementById("embed-code-textbox"); - if (embedTextbox) { - navigator.clipboard.writeText(embedCode).then(() => { - console.log("Embed code copied to clipboard!"); - }).catch(err => { - console.error("Failed to copy embed code: ", err); - }); - //copyButton.innerHTML = "✓✓"; - // show confirmation for 2 seconds: - copyButton.querySelector('.icon').innerText = "library_add_check"; - setTimeout(function() { - copyButton.querySelector('.icon').innerText = "content_copy"; - sharePopup.classList.add("hidden"); - }, 450); - } - }); - } - } -}); - -// Hide everything except the content when the URL has "embed" in it -window.addEventListener("DOMContentLoaded", function(event) { - const urlParams = new URLSearchParams(window.location.search); - if (urlParams.has("embed")) { - // Set dark mode based on value of param - if (urlParams.get("embed") === "dark") { - setDarkMode(true); - } else { - setDarkMode(false); - } - const elemsToHide = [ - "ptx-navbar", - "ptx-masthead", - "ptx-page-footer", - "ptx-sidebar", - "ptx-content-footer" - ]; - for (let id of elemsToHide) { - const elem = document.getElementById(id); - if (elem) { - elem.classList.add("hidden"); - } - } - } -}); - -// START Support for code-copy button functionality -document.addEventListener("click", (ev) => { - const codeBox = ev.target.closest(".clipboardable"); - if (!navigator.clipboard || !codeBox) return; - const button = ev.target.closest(".code-copy"); - const preContent = codeBox.querySelector("pre").textContent; - navigator.clipboard.writeText(preContent); - button.classList.toggle("copied") - setTimeout(() => button.classList.toggle("copied"), 1000); -}); - -document.addEventListener("DOMContentLoaded", () => { - const elements = document.querySelectorAll(".clipboardable"); - for (el of elements) { - const div = document.createElement("div"); - div.classList.add("clipboardable"); - el.classList.remove("clipboardable"); - el.replaceWith(div); - div.insertAdjacentElement("afterbegin", el); - div.insertAdjacentHTML("beforeend", ` - - `.trim()); - } -}); -// END Support for code-copy button functionality diff --git a/slides-annotated/_static/pretext/js/pretext_search.js b/slides-annotated/_static/pretext/js/pretext_search.js deleted file mode 100755 index e78d765..0000000 --- a/slides-annotated/_static/pretext/js/pretext_search.js +++ /dev/null @@ -1,315 +0,0 @@ - -// next comment is out of date: there are more search options -// from lunr-pretext-search-index.js we will have either -// var ptx_lunr_search_style = "default"; -// or -// var ptx_lunr_search_style = "reference"; - -// since there is only one search box now, this can be simplified -function doSearch(searchlocation="A") { - // Get the search terms from the input text box - var terms; - if(searchlocation == "A") { - terms = document.getElementById("ptxsearch").value; - } else { - terms = document.getElementById("ptxsearchB").value; - } - - localStorage.setItem('last-search-terms', JSON.stringify({terms: terms, time: Date.now()})); - - // Where do we want to put the results? - let resultArea = document.getElementById("searchresults") - resultArea.innerHTML = ""; // clear out any previous results - // assume AND for multiple words - var searchterms = terms; - if(searchlocation == "B") { - document.getElementById("ptxsearch").value = searchterms - console.log("ptxsearch value", document.getElementById("ptxsearch").value); - } else { - searchterms = terms; - } - - searchterms = searchterms.toLowerCase().trim(); - let pageResult = []; - if(searchterms != "") { - pageResult = ptx_lunr_idx.query((q) => { - for(let term of searchterms.split(' ')) { - q.term(term, { fields: ["title"], boost: 20 }); //exact title match with 20x weight - q.term(term, { wildcard: lunr.Query.wildcard.TRAILING, fields: ["title"], boost: 10 }); //inexact title 10x weight - q.term(term, { fields: ["body"], boost: 5 }); //exact body 5x weight - q.term(term, { wildcard: lunr.Query.wildcard.TRAILING, fields: ["body"] }); //inexact body - } - }); - } - // Number the documents from first to last so we can order the results by their - // position in the book. - snum = 0; - for (let doc of ptx_lunr_docs) { - doc.snum = snum; - snum += 1; - } - - //Limit to a sane number of results - otherwise search like 'e' matches every page - const MAX_RESULTS = 100; - let numUnshown = (pageResult.length > MAX_RESULTS) ? pageResult.length - MAX_RESULTS : 0; - pageResult.slice(0, MAX_RESULTS); - - // Transfer meta data from the document to the results to make it easy to add - // our lists later. - augmentResults(pageResult, ptx_lunr_docs); - pageResult.sort(comparePosition); - addResultToPage(terms, pageResult, ptx_lunr_docs, numUnshown, resultArea); - MathJax.typeset(); -} - -// Find the entry for a search result in the original document index -function findEntry(resultId, db) { - for (const page of db) { - if (page.id === resultId) { - return page; - } - } - return resultId; -} - -function augmentResults(result, docs) { - for (let res of result) { - let info = findEntry(res.ref, docs); - res.number = info.number; - res.type = info.type; - res.title = info.title; - res.url = info.url; - res.level = info.level; - res.snum = info.snum; - res.score = parseFloat(res.score); - - //extra score multiplier based on level - prioritize sections over subsections/exercises/etc... - const LEVEL_WEIGHTS = [3, 2, 1.5] - if( res.level < 2 ) - res.score *= LEVEL_WEIGHTS[res.level]; - - res.body = ''; - //Add body snippets and highlights - const REVEAL_WINDOW = 30; - let titleMarked = false; - for (const hit in res.matchData.metadata) { - if(res.matchData.metadata[hit].title) { - //only show one match in title as locations change after first markup - if(!titleMarked) { - if(!res.matchData.metadata[hit].title.position) - continue; - let positionData = res.matchData.metadata[hit].title.position[0]; - const startClipInd = positionData[0]; - const endClipInd = positionData[0] + positionData[1]; - res.title = res.title.substring(0, endClipInd) + '' + res.title.substring(endClipInd); - res.title = res.title.substring(0, startClipInd) + '' + res.title.substring(startClipInd); - titleMarked = true; - } - } else if (res.matchData.metadata[hit].body) { - if(!res.matchData.metadata[hit].body.position) - continue; - const bodyContent = info.body; - let positionData = res.matchData.metadata[hit].body.position[0]; - const startInd = positionData[0] - REVEAL_WINDOW; - const endInd = positionData[0] + positionData[1] + REVEAL_WINDOW; - const startClipInd = positionData[0]; - const endClipInd = positionData[0] + positionData[1]; - let resultSnippet = (startInd > 0 ? '...' : '' ) + bodyContent.substring(startInd, startClipInd); - resultSnippet += '' + bodyContent.substring(startClipInd, endClipInd) + ''; - resultSnippet += bodyContent.substring(endClipInd, endInd) + (endInd < bodyContent.length ? '...' : '' ) + '
    '; - res.body += resultSnippet; - } - } - } -} - -function rearrangedArray(arry) { - // return a new array which is arry (with depth) sorted according to meas, - // again as an array with depth. - // "with depth'' means that large children drag along their parents. - let newarry = []; - let startind = 0; - let numtograb = 0; -let ct = 1; - while (arry.length > 0 && ct < 500) { -++ct; // just in case something goes wrong - const locofmax = maxLocation(arry) - let segmentstart = locofmax; - let segmentlength = 1; - while (arry[segmentstart].level == "2") { - --segmentstart - } - while (segmentstart + segmentlength < arry.length && arry[segmentstart + segmentlength].level == "2") { - ++segmentlength - } -// console.log("locofmax", locofmax, "starting", segmentstart, "going", segmentlength, "from", arry.length); - newarry.push(...arry.splice(segmentstart,segmentlength)); - } -// console.log("newarry", newarry); - return newarry -} -function maxLocation(arry) { - let maxloc = 0; - let maxvalsofar = -1; - for (let index = 0; index < arry.length; ++index) { - if (arry[index].score > maxvalsofar) { - maxloc = index; - maxvalsofar = arry[index].score - } - } - return maxloc -} - -function comparePosition(a, b) { - if (a.snum < b.snum) { - return -1; - } - if (a.snum > b.snum) { - return 1; - } - return 0; -} -function compareScoreDesc(a, b) { - if (a.score < b.score) { - return 1; - } - if (a.score > b.score) { - return -1; - } - return 0; -} - -function addResultToPage(searchterms, result, docs, numUnshown, resultArea) { - /* backward compatibility for old html */ - if (document.getElementById("searchempty")) { - document.getElementById("searchempty").style.display = "none"; - } - let len = result.length; - console.log("first result", result[0]); - if (len == 0) { - if (document.getElementById("searchempty")) { - document.getElementById("searchempty").style.display = "block"; - } else { - let noresults = document.createElement("div"); - noresults.classList.add("noresults"); - search_no_results_string = "No results were found" - noresults.innerHTML = search_no_results_string + "."; - // console.log("the new variable", search_results_heading_string); - resultArea.appendChild(noresults); - } - document.getElementById("searchresultsplaceholder").style.display = null; - return - } -// console.log("result",result); - let allScores = result.map(function (r) { return r.score }); -// console.log(typeof allScores[0], "allScores",allScores); - allScores.sort((a,b) => (a - b)); - allScores.reverse(); -// console.log("allScores, sorted",allScores); - -// let high = result[Math.floor(len*0.25)].score; -// let med = result[Math.floor(len*0.5)].score; -// let low = result[Math.floor(len*0.75)].score; - // sort the results by their position in the book, not their score - let high = allScores[Math.floor(len*0.20)]; - let med = allScores[Math.floor(len*0.40)]; - let low = allScores[Math.floor(len*0.75)]; - if (ptx_lunr_search_style == "reference") { - result = rearrangedArray(result); - } - let indent = "1"; - let currIndent = indent; - let origResult = resultArea; - // Create list entries indenting as needed. - for (const res of result) { - let link = document.createElement("a") - // add a class so we can colorize the results based on their rank in terms - // of search score. - if (res.score >= high) { - link.classList.add("high_result") - } else if (res.score >= med) { - link.classList.add("medium_result") - } else if (res.score >= low) { - link.classList.add("low_result") - } else { - link.classList.add("no_result") - } - currIndent = res.level; - if (currIndent > indent) { - indent = currIndent; - let ilist = document.createElement("ul") - ilist.classList.add("detailed_result"); - resultArea.appendChild(ilist); - resultArea = ilist; - } else if (currIndent < indent) { - resultArea = origResult; - indent = currIndent; - } - link.href = `${res.url}`; - link.innerHTML = `${res.type} ${res.number} ${res.title}`; - let clip = document.createElement("div"); - clip.classList.add("search-result-clip"); - clip.innerHTML = `${res.body}`; - let bullet = document.createElement("li"); - bullet.classList.add('search-result-bullet'); - bullet.appendChild(link); - bullet.appendChild(clip); - let p = document.createElement("text"); - p.classList.add('search-result-score'); - p.innerHTML = ` (${res.score.toFixed(2)})`; - bullet.appendChild(p); - resultArea.appendChild(bullet); - } - - // Auto-close search results when a result is clicked in case result is on - // the same page search started from - const resultsDiv = document.getElementById('searchresultsplaceholder'); - const backDiv = document.querySelector('.searchresultsbackground'); - resultArea.querySelectorAll("a").forEach((link) => { - link.addEventListener('click', (e) => { - backDiv.style.display = 'none'; - resultsDiv.style.display = 'none'; - }); - }); - //Could print message about how many results are not shown. No way to localize it though... - // if(numUnshown > 0) { - // let bullet = document.createElement("li"); - // bullet.classList.add('search-results-bullet'); - // bullet.classList.add('search-results-unshown-count'); - // let p = document.createElement("text"); - // p.innerHTML = `${parseInt(numUnshown)} unshown results...`; - // bullet.appendChild(p); - // resultArea.appendChild(bullet); - // } - document.getElementById("searchresultsplaceholder").style.display = null; - MathJax.typesetPromise(); -} - -window.addEventListener("load", function (event) { - const resultsDiv = document.getElementById('searchresultsplaceholder'); - - //insert a div to be backgroud behind searchresultsplaceholder - const backDiv = document.createElement("div"); - backDiv.classList.add("searchresultsbackground"); - backDiv.style.display = 'none'; - resultsDiv.parentNode.appendChild(backDiv); - - document.getElementById("searchbutton").addEventListener('click', (e) => { - resultsDiv.style.display = null; - backDiv.style.display = null; - let searchInput = document.getElementById("ptxsearch"); - searchInput.value = JSON.parse(localStorage.getItem("last-search-terms")).terms; - searchInput.select(); - doSearch(); - }); - - document.getElementById("ptxsearch").addEventListener('input', (e) => { - doSearch(); - }); - - document.getElementById("closesearchresults").addEventListener('click', (e) => { - resultsDiv.style.display = 'none'; - backDiv.style.display = 'none'; - document.getElementById('searchbutton').focus(); - }); -}); diff --git a/slides-annotated/_static/pretext/js/ptx_search.js b/slides-annotated/_static/pretext/js/ptx_search.js deleted file mode 100755 index f35bea2..0000000 --- a/slides-annotated/_static/pretext/js/ptx_search.js +++ /dev/null @@ -1,112 +0,0 @@ -function doSearch() { - // Get the search terms from the input text box - let terms = document.getElementById("ptxsearch").value; - // Where do we want to put the results? - let resultArea = document.getElementById("searchresults") - resultArea.innerHTML = ""; // clear out any previous results - // do the search using the provided index - let pageResult = ptx_lunr_idx.search(terms); - // Number the documents from first to last so we can order the results by their - // position in the book. - snum = 0; - for (let doc of ptx_lunr_docs) { - doc.snum = snum; - snum += 1; - } - // Transfer meta data from the document to the results to make it easy to add - // our lists later. - augmentResults(pageResult, ptx_lunr_docs); - addResultToPage(pageResult, ptx_lunr_docs, resultArea); - MathJax.typeset(); -} - -// Find the entry for a search result in the original document index -function findEntry(resultId, db) { - for (const page of db) { - if (page.id === resultId) { - return page; - } - } - return resultId; -} - -function augmentResults(result, docs) { - for (let res of result) { - let info = findEntry(res.ref, docs); - res.number = info.number; - res.type = info.type; - res.title = info.title; - res.url = info.url; - res.level = info.level; - res.snum = info.snum; - } -} - - -function comparePosition(a, b) { - if (a.snum < b.snum) { - return -1; - } - if (a.snum > b.snum) { - return 1; - } - return 0; -} - -function addResultToPage(result, docs, resultArea) { - let len = result.length - let high = result[Math.floor(len*0.25)].score; - let med = result[Math.floor(len*0.5)].score; - let low = result[Math.floor(len*0.75)].score; - // sort the results by their position in the book, not their score - result = result.sort(comparePosition) - let indent = "1"; - let currIndent = indent; - let origResult = resultArea; - // Create list entries indenting as needed. - for (const res of result) { - let link = document.createElement("a") - // add a class so we can colorize the results based on their rank in terms - // of search score. - if (res.score >= high) { - link.classList.add("high_result") - } else if (res.score >= med) { - link.classList.add("medium_result") - } else if (res.score >= low) { - link.classList.add("low_result") - } - currIndent = res.level; - if (currIndent > indent) { - indent = currIndent; - let ilist = document.createElement("ul") - ilist.classList.add("detailed_result"); - resultArea.appendChild(ilist); - resultArea = ilist; - } else if (currIndent < indent) { - resultArea = origResult; - indent = currIndent; - } - let bullet = document.createElement("li") - bullet.style.marginTop = "5px"; - link.href = `${res.url}`; - link.innerHTML = `${res.type} ${res.number} ${res.title}`; - bullet.appendChild(link) - let p = document.createElement("text"); - p.innerHTML = ` (${res.score.toFixed(2)})`; - bullet.appendChild(p); - resultArea.appendChild(bullet); - } - -} - - -function showHelp() { - let state = document.getElementById("helpme").style.display; - if (state == "none") { - document.getElementById("helpme").style.display = "block"; - document.getElementById("helpbutt").innerHTML = "Hide Help" - } else { - document.getElementById("helpme").style.display = "none"; - document.getElementById("helpbutt").innerHTML = "Show Help" - } -} diff --git a/slides-annotated/_static/pretext/js/user_preferences.js b/slides-annotated/_static/pretext/js/user_preferences.js deleted file mode 100755 index b5a63c6..0000000 --- a/slides-annotated/_static/pretext/js/user_preferences.js +++ /dev/null @@ -1,510 +0,0 @@ - -editorLog = console.log; -// editorLog = function(){}; -debugLog = function(){}; -// debugLog = console.log; -//parseLog = function(){}; -parseLog = console.log; -errorLog = console.log; - -/* the structure of each object, and its realization as PreTeXt source or in HTML, - is recorded in the objectStructure dictionary. - -{"xml:id": new_id, "sourcetag": new_tag, "parent": parent_description, "title": ""} - -In pretext, pieces are of the form ["piecename", "tag"], while -in source, pieces are of the form ["piecename", "required_component"], while - -*/ - -editing_mode = 0; - -current_page = location.host+location.pathname; -debugLog("current_page", current_page); -chosen_edit_option_key = "edit_option".concat(current_page); -/* -chosen_edit_option = readCookie(chosen_edit_option_key) || ""; -editing_mode = chosen_edit_option; -*/ -chosen_edit_option = "PLACEHOLDER"; -debugLog("chosen_edit_option", chosen_edit_option, "chosen_edit_option", chosen_edit_option > 0); - -var font_families = { - 'RS': "'Roboto Serif', serif;", - 'OS': "'Open Sans', sans-serif;" -} - -var font_vals = { - // 'face': 'serif', - 'size': [12, 8, 20], - 'height': [135, 80, 200], - 'wspace': [0, -10,20], - 'lspace': [0, -20,20], - 'wdth': [100, 50, 150], - 'wght': [400, 100, 1000] -} - -function fontcss(fvals) { -console.log("in fontcss",fvals); - var csskeys = Object.keys(fvals); - var this_style = ""; - for (var j=0; j < csskeys.length; ++j) { - this_key = csskeys[j]; - document.getElementById("the" + this_key).innerHTML = fvals[this_key][0]; - -console.log("in fontcss", this_key, "with value", fvals[this_key][0], "/10", fvals[this_key][0]/10.0); - if (this_key == 'size') { - this_style += "font-size: " + fvals[this_key][0].toString() + "pt; " - } else if (this_key == 'height') { - this_style += "line-height: " + (fvals[this_key][0]/100.0).toString() + "; " - } else if (this_key == 'lspace') { - this_style += "letter-spacing: " + (fvals[this_key][0]/200.0).toString() + "rem; " - } else if (this_key == 'wspace') { - this_style += "word-spacing: " + (fvals[this_key][0]/50.0).toString() + "rem; " - } - } - - this_style += "font-variation-settings: "; - for (var j=0; j < csskeys.length; ++j) { - this_key = csskeys[j]; - - if (this_key == 'wdth') { - this_style += "'wdth' " + fvals[this_key][0].toString() + "," - } else if (this_key == 'wght') { - this_style += "'wght' " + fvals[this_key][0].toString() + "," - } - } - this_style = this_style.slice(0, -1); - this_style += ";"; - -console.log("returning this_style", this_style); - return this_style -} - -function choice_options(this_choice) { - console.log("choice_options of", this_choice); - val_dict = prefs_menu_vals[this_choice]; - console.log("val_dict", val_dict); - var these_keys = Object.keys(val_dict); - these_keys.sort(); - var these_choices = ""; - for (var j=0; j < these_keys.length; ++j) { - this_key = these_keys[j]; - these_choices += '
  • '; - these_choices += val_dict[this_key]; - these_choices += '
  • '; - } - return these_choices -} - - -// we have to keep track of multiple consecutive carriage returns -this_char = ""; -prev_char = ""; -prev_prev_char = ""; - -// sometimes we have to prevent Tab from changing focus -this_focused_element = ""; -prev_focused_element = ""; -prev_prev_focused_element = ""; - -var menu_neutral_background = "#ddb"; -var menu_active_background = "#fdd"; - -var recent_editing_actions = []; // we unshift to this, so most recent edit is first. - // currently just a human-readable list -var ongoing_editing_actions = []; -var old_content = {}; // to hold old versions of changed materials - -// what will happen with internationalization? -var keyletters = ["KeyA", "KeyB", "KeyC", "KeyD", "KeyE", "KeyF", "KeyG", "KeyH", "KeyI", "KeyJ", "KeyK", "KeyL", "KeyM", "KeyN", "KeyO", "KeyP", "KeyQ", "KeyR", "KeyS", "KeyT", "KeyU", "KeyV", "KeyW", "KeyX", "KeyY", "KeyZ"]; - -var movement_location_options = []; -var movement_location = 0; -var first_move = true; // used when starting to move, because object no longer occupies its original location - -Storage.prototype.setObject = function(key, value) { -// this.setItem(key, JSON.stringify(value)); - this.setItem(key, JSON.stringify(value, function(key, val) { -// console.log("key", key, "value", value, "val", val); - return val.toFixed ? Number(val.toFixed(3)) : val; -})); -} - -Storage.prototype.getObject = function(key) { - var value = this.getItem(key); - return value && JSON.parse(value); -} - -function randomstring(len) { - if (!len) { len = 10 } - return "tMP" + (Math.random() + 1).toString(36).substring(2,len) -} - -function removeItemFromList(lis, value) { - var index = lis.indexOf(value); - if (index > -1) { - lis.splice(index, 1); - } - return lis; -} - - -function textNodesUnder(node){ - var all = []; - for (node=node.firstChild;node;node=node.nextSibling){ - if (node.nodeType==3) { all.push([3, node]) } - else if (node.nodeType==1) { - all.push([1, node]) - var thistag = node.cloneNode().outerHTML; - console.log("thistag", thistag); - [thisopen, thisclose] = thistag.split("><"); - thisopen += ">"; thisclose += "<"; - thisinsides = textNodesUnder(node.cloneNode().innerHTML); -// all.push([0, thisopen]); - for (var j=0; j < thisinsides.length; ++j) { -// all.push(thisinsides[j]) - } -// all.push([0, thisclose]); - } -// probably we only want direct children -// else all = all.concat(textNodesUnder(node)); - } - return all; -} - -function wordsAllWrapped(node) { - var these_text_nodes = textNodesUnder(node); - console.log("node", node); - console.log("these_text_nodes", these_text_nodes); - for (var j=0; j < these_text_nodes.length; ++j) { - var this_text_node = these_text_nodes[j]; - var thistype = this_text_node[0]; - var thisnode = this_text_node[1]; - if (thistype == 3) { - // var these_node_words_and_spaces = these_text_nodes[j].nodeValue.split(/(\s+)/); - var these_node_words_and_spaces = thisnode.nodeValue.split(/(\s+)/); - console.log("these_node_words_and_spaces", these_node_words_and_spaces); - var spanned_words = ""; - for (var k=0; k < these_node_words_and_spaces.length; ++k) { - spanned_words += '' + these_node_words_and_spaces[k] + "" - } - var wass_text = document.createElement('div'); - wass_text.setAttribute('class', 'wastext'); - wass_text.innerHTML = spanned_words; - // these_text_nodes[j].nodeValue = spanned_words - thisnode.replaceWith(wass_text); - wass_text.outerHTML = wass_text.innerHTML - } else if (thistype == 1) { - // // leave it there, but make sure we know about it - // thisnode.classList.add("oneelement") - if (thisnode.classList.contains("process-math") || - thisnode.classList.contains("autopermalink") || - thisnode.classList.contains("latex-logo") || - thisnode.classList.contains("heading") || - // should we instead check for tags that *can* contain line breaks? - ["A", "CODE", "PRE"].includes(thisnode.tagName)) { - //wrap it in a span.oneword - var word_wrapper = document.createElement('span'); - word_wrapper.setAttribute('class', 'oneword'); - thisnode.parentNode.insertBefore(word_wrapper, thisnode); - word_wrapper.appendChild(thisnode); - } else { - wordsAllWrapped(thisnode) - } - } - } -} - -function linesAllWrapped() { - - // var testID = "p-446"; - // var testNode = document.getElementById(testID); - // var all_para = document.querySelectorAll(".para"); - // var all_para = document.querySelectorAll("SECTION P"); - var all_para = document.querySelectorAll("SECTION .para:not(.logical)"); - for (var pj = 0; pj < all_para.length; ++pj) { - testNode = all_para[pj]; - wordsAllWrapped(testNode); - console.log(" wordsAllWrapped", pj, "of", testNode); - - var these_words = document.querySelectorAll(".oneword, .oneelement"); - var this_line = []; - var all_lines = ""; - var current_height = these_words[0].getBoundingClientRect().bottom; - var word_depth = 0; - for (var j=0; j < these_words.length; ++j) { - // next line is an error if the paragraphs starts with an element - var this_word = these_words[j]; - var this_parent = this_word.parentElement; - if (this_word.classList.contains("oneword")) { - this_height = this_word.getBoundingClientRect().bottom; - if ( (Math.abs(this_height - current_height) < 10) && j > 0) { - if (this_parent == testNode && word_depth == 0) { - this_line.push(this_word.innerHTML) - } else { -console.log(word_depth, ":",this_parent == testNode, "this_parent", this_parent.tagName, "ccc", this_parent.ClassList, "xxx", this_word.innerHTML); - if (word_depth == 0) { -console.log("opening the tag", this_parent.tagName,"parent", this_parent,"of",this_word.innerHTML); - var parent_classlist = this_parent.classList; -console.log("parent_classlist", parent_classlist, "first", parent_classlist[0], "length", parent_classlist.length); - // did not work. why? var parent_classes = parent_classlist.join(" "); - this_line.push('<' + this_parent.tagName + ' class="' + parent_classlist[0] + '">'); - this_line.push(this_word.innerHTML); - word_depth += 1 - - } else { - this_line.push(this_word.innerHTML); - } - if (this_word.nextElementSibling == null) { -console.log("closing the tag", this_parent.tagName); - // need to close the wrapping element - this_line.push(""); - word_depth -= 1; - if (word_depth > 0 && this_word.parentElement.nextElementSibling == null) { - this_line.push(""); - word_depth -= 1; - } - } - } - } else { - html_line_contents = ""; - for (var k=0; k < this_line.length; ++k) { - html_line_contents += this_line[k] - } - // hack which only handles up to depth 2 - if (word_depth > 0) { - html_line_contents += "" - } - if (word_depth > 1) { - html_line_contents += "" - } - console.log("made", html_line_contents); - all_lines += '
    ' + html_line_contents + '
    '; - current_height = this_height; - this_line = [this_word.innerHTML]; - if (word_depth > 0) { - this_line.unshift('<' + this_parent.tagName + ' class="' + this_parent.classList[0] + '">') - } - if (word_depth > 1) { - this_line.unshift('<' + this_parent.tagName + ' class="' + this_parent.parentElement.classList[0] + '">') - } - } - } else { // we have an html node - this_line.push(this_word.outerHTML) - } - } - // partial last line may be dangling - // bug: need to fix closing tags at the end? maybe rely on automatic closure - if (this_line.length > 0) { - html_line_contents = ""; - for (var k=0; k < this_line.length; ++k) { - html_line_contents += this_line[k] - } - all_lines += '
    ' + html_line_contents + '
    ' - } - testNode.innerHTML = all_lines - } -} - -editorLog("adding tab listener"); - -document.addEventListener('keydown', logKeyDown); - -function nextsibligntabbable(startingplace, where) { - var candidate = startingplace.nextElementSibling; - if (where == "previous" ) { candidate = startingplace.previousElementSibling } - - while (candidate) { -console.log("candidate A", candidate); - if (candidate.hasAttribute("tabindex")) { return candidate } -console.log("candidate B", candidate); - if (where == "next" ) { candidate = candidate.nextElementSibling } - else { candidate = candidate.previousElementSibling } - } -} - -function logKeyDown(e) { - if (e.code == "ShiftLeft" || e.code == "ShiftRight" || e.code == "Shift") { return } - prev_prev_char = prev_char; - prev_char = this_char; - this_char = e; - debugLog("logKey",e,"XXX",e.code); - - var input_region = document.activeElement; - debugLog("input_region", input_region); - - if (input_region.id == "user-preferences-button") { - if (e.code == "Enter") { - document.getElementById("preferences_menu_holder").classList.toggle("hidden") - } else if (e.code == "Tab") { -console.log("tabbing to main pref menu", document.getElementById("preferences_menu_holder").firstElementChild); -console.log("tabbing to main pref menu", document.getElementById("preferences_menu_holder").firstElementChild.firstElementChild); - e.preventDefault(); - document.getElementById("preferences_menu_holder").firstElementChild.firstElementChild.focus() - } - } else if (input_region.hasAttribute("data-env")) { - var this_submenu = input_region.getElementsByTagName("ol")[0]; -console.log("this_submenu C", this_submenu); - if ((e.code == "Enter") || (e.code == "ArrowRight")) { -console.log("selecting",input_region, "which has", input_region.getElementsByTagName("ol"), "first",input_region.getElementsByTagName("ol")[0]); - this_submenu.classList.toggle("hidden") - input_region.classList.toggle("selected") - input_region.parentElement.classList.toggle("active") - } else if (e.code == "Tab" && e.shiftKey) { - e.preventDefault(); - if (input_region.classList.contains("selected")) { - this_submenu.classList.loggle("hidden"); - input_region.classList.loggle("selected"); - } else { // cycle up through the elements - // previous_sibling = input_region.previousElementSibling; - previous_sibling = nextsibligntabbable(input_region, "previous"); - if (previous_sibling) { previous_sibling.focus() } - else { - document.getElementById("preferences_menu_holder").classList.toggle("hidden"); - document.getElementById("user-preferences-button").focus(); - } - } - } else if (e.code == "Tab") { - e.preventDefault(); - if (input_region.classList.contains("selected")) { - var firstchild = this_submenu.firstElementChild; - if (firstchild.hasAttribute("tabindex")) { - firstchild.focus() - } else { - nextsibligntabbable(firstchild, "next").focus() - } - } else { // cycle through the elements -// next_sibling = input_region.nextElementSibling; - next_sibling = nextsibligntabbable(input_region, "next"); - if (next_sibling) { next_sibling.focus() } - else { - document.getElementById("preferences_menu_holder").classList.toggle("hidden"); - document.getElementById("user-preferences-button").focus(); - } - } - } - } else if (input_region.hasAttribute("data-val")) { -console.log("input_region", input_region); -console.log("input_regionparentElement", input_region.parentElement); - if ((e.code == "Enter") || (e.code == "ArrowRight")) { -console.log("font_vals is", font_vals); - var dataval = input_region.getAttribute("data-val"); - var datachange = input_region.getAttribute("data-change"); -console.log("dataval", dataval, "datachange",datachange); - if (input_region.parentElement.classList.contains("fonts")) { - font_vals[dataval][0] += parseFloat(datachange); - if (font_vals[dataval][0] < font_vals[dataval][1]) { font_vals[dataval][0] = font_vals[dataval][1] } - else if (font_vals[dataval][0] > font_vals[dataval][2]) { font_vals[dataval][0] = font_vals[dataval][2] } -console.log("font_vals are", font_vals); -console.log("css font_vals", fontcss(font_vals)); - var new_style = fontcss(font_vals); - var paras = document.getElementsByClassName('para'); - for (i = 0; i < paras.length; i++) { - paras[i].setAttribute('style', new_style); - } - } else if (input_region.parentElement.classList.contains("fontfamily")) { - document.body.setAttribute("data-font", datachange); - var checks = document.getElementsByClassName('ffcheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("the" + datachange).innerHTML = "✔️"; - } else if (input_region.parentElement.classList.contains("avatar")) { - var checks = document.getElementsByClassName('avatarcheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("theavatarbutton").innerHTML = dataval; - document.getElementById("the" + dataval).innerHTML = "✔️"; - - } else if (input_region.parentElement.classList.contains("atmosphere")) { - document.body.setAttribute("data-atmosphere", dataval); - var checks = document.getElementsByClassName('atmospherecheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("the" + dataval).innerHTML = "✔️"; - - } else if (input_region.parentElement.classList.contains("ruler")) { - // could be motion or actual ruler - if (["mouse", "arrow", "eye"].includes(dataval)) { - document.body.setAttribute("data-motion", dataval); - var checks = document.getElementsByClassName('motioncheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("the" + dataval).innerHTML = "✔️"; - } else { - if (!document.body.hasAttribute("data-ruler")) { - linesAllWrapped() - } - document.body.setAttribute("data-ruler", dataval); - var checks = document.getElementsByClassName('rulercheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("the" + dataval).innerHTML = "✔️"; - } - - } - } else if (e.code == "Tab" && e.shiftKey) { - e.preventDefault(); -// previous_sibling = input_region.previousElementSibling; - previous_sibling = nextsibligntabbable(input_region, "previous"); - -console.log("previous_sibling",previous_sibling); - if (previous_sibling) { previous_sibling.focus() } - else { - input_region.parentElement.parentElement.parentElement.classList.toggle("active"); - input_region.parentElement.parentElement.classList.toggle("selected"); - input_region.parentElement.parentElement.focus(); - input_region.parentElement.classList.toggle("hidden"); - } - } else if (e.code == "Tab") { - e.preventDefault(); - // next_sibling = input_region.nextElementSibling; - next_sibling = nextsibligntabbable(input_region, "next"); - if (next_sibling) { next_sibling.focus() } - else { - input_region.parentElement.parentElement.parentElement.classList.toggle("active"); - input_region.parentElement.parentElement.classList.toggle("selected"); - input_region.parentElement.parentElement.focus(); - input_region.parentElement.classList.toggle("hidden"); - } - } - } - - - return; - - editorLog("input_region", input_region); - // if we are writing something, keystrokes usually are just text input - if (document.getElementById('actively_editing')) { - editorLog(" we are actively editing"); - - if (e.code == "Tab" && !document.getElementById('local_menu_holder')) { - // disabled for now - e.preventDefault(); - return "" - create_local_menu() - } else if (document.getElementById('local_menu_holder')) { - main_menu_navigator(e); - } else { - local_editing_action(e) - } - - } else if (document.getElementById('phantomobject')) { - var the_phantomobject = document.getElementById('phantomobject'); - - if (the_phantomobject.classList.contains('move')) { - move_object(e) - } else { - alert("do not know what to do with that") - } - } else { - console.log("calling main_menu_navigator"); - main_menu_navigator(e); - } -} - diff --git a/slides-annotated/index.html b/slides-annotated/index.html deleted file mode 100755 index b3bf10d..0000000 --- a/slides-annotated/index.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - - - - - -Slides for MATH xxx - - - - - - -
    - -
    -

    Slides for MATH xxx

    Section 1.1

    Title

    -

    Here is some text.

    Section 1.2

    Title 2

    -

    Some more text.

    -
    -
    - - diff --git a/slides/_static/pretext/js/answer.js b/slides/_static/pretext/js/answer.js deleted file mode 100755 index 652dcd3..0000000 --- a/slides/_static/pretext/js/answer.js +++ /dev/null @@ -1,552 +0,0 @@ - -function escapeHTML(text) { - if (!text) { return "" } - the_ans = text; - the_ans = the_ans.replace(/&/g, "&"); - the_ans = the_ans.replace(/<([a-zA-Z])/g, '< $1'); - - return the_ans -} -function uNescapeHTML(text) { - if (!text) { return "" } - the_ans = text; - the_ans = the_ans.replace(/< /g, "<"); - the_ans = the_ans.replace(/</g, "<"); - the_ans = the_ans.replace(/>/g, ">"); - the_ans = the_ans.replace(/&/g, "&"); - the_ans = the_ans.replace(/<([a-zA-Z])/g, "< $1"); - - return the_ans -} - -function dollars_to_slashparen(text) { - the_ans = text; - the_ans = the_ans.replace(/(^|\s|-)\$([^\$\f\r\n]+)\$(\s|\.|,|;|:|\?|!|$)/g, "$1\\($2\\)$3"); - //twice, for $5$-$6$ - the_ans = the_ans.replace(/(^|\s|-)\$([^\$\f\r\n]+)\$(\s|\.|,|;|:|\?|!|-|$)/g, "$1\\($2\\)$3"); - - return the_ans -} - -/* The structure of a reading question is an erticle with an id (this_ques_id), - containing: - #this_ques_id_text the answer given (in a div with that id) - #this_ques_id_text_hidden the answer in a raw form (in a hidden div) - #this_ques_id_text_input the answer in a textinput with that id - - Try to do all operations by id, and not by carrying objects around. -*/ - -var reading_questions = document.querySelectorAll("section.reading-questions article.exercise-like, #boelkins-ACS .main #content > section:first-of-type > section:first-of-type > .project-like li"); - -var reading_answers = {}; - -console.log('reading_questions.length', reading_questions.length); - -function make_submit_button() { - if (document.getElementById("rq_submit")) { // don't make the button if it already exists - console.log("button exists", document.getElementById("rq_submit")); - return - } - last_reading_question = reading_questions[reading_questions.length - 1]; - answer_button_holder = document.createElement('div'); - answer_button_holder.setAttribute('class', 'rq_submit_wrapper'); - answer_button_holder.innerHTML = rq_submit_button; - last_reading_question.insertAdjacentElement("afterend", answer_button_holder); -} - -function save_reading_questions() { - rq_data = {"action": "save", "user": uname, "pw": emanu, "pI": pageIdentifier, "type": "readingquestions", "rq": JSON.stringify(reading_questions_object)} - $.ajax({ - url: "https://aimath.org/cgi-bin/u/highlights.py", - type: "post", - data: JSON.stringify(rq_data), - dataType: "json", - success: function(data) { - console.log("something", data, "back from highlight"); - alert(data); - }, - error: function(errMsg) { - console.log("seems to be an error?",errMsg); - alert("Error\n" + errMsg); - } - }); - - console.log("just ajax sent", JSON.stringify(reading_questions_object)); -} - -// no point in handling reading questions if there are not any - -if (reading_questions.length) { - - // retrieve the existing reading questions, if they exist - var reading_questions_object_id = pageIdentifier + "___" + "rq"; - var reading_questions_object = localStorage.getObject(reading_questions_object_id); - var reading_questions_all_answered = false; - var reading_questions_submitted = false; - - if (!reading_questions_object) { - reading_questions_object = {} - } - - if (Object.keys(reading_questions_object).length >= reading_questions.length) { - console.log("Object.keys(reading_questions_object)",Object.keys(reading_questions_object)); - console.log("reading_questions", reading_questions); - console.log("all reading questions have previously been answered"); - reading_questions_all_answered = true; - } - - answer_css = document.createElement('style'); - answer_css.type = "text/css"; - answer_css.id = "highlight_css"; - document.head.appendChild(answer_css); - var css_for_ans = '#rq_submit { background: #FDD; padding: 3px 5px; border-radius: 0.5em}\n'; - css_for_ans += '#rq_submit.submitted { background: #EFE; color: #BBB}'; - css_for_ans += '.rq_submit_wrapper { margin-top: 0.5em; float: right}'; - answer_css.innerHTML = css_for_ans; - - rq_answer_label = ''; - this_rq_controls += 'preview'; -// this_rq_controls += 'delete'; - this_rq_controls += 'typing math?'; - this_rq_controls += '
    ' - - var this_rq_answer_and_controls = document.createElement('div'); - this_rq_answer_and_controls.setAttribute('style', 'width:80%; padding-left:10%; padding-right:10%; margin-top:0.5em;'); - this_rq_answer_and_controls.setAttribute('class', 'rq_answer'); - this_rq_answer_and_controls.innerHTML = hidden_answer_div + answer_div + this_rq_controls; - console.log("appending to ", reading_question_id); - $('#'+reading_question_id).append(this_rq_answer_and_controls); - // this.parentNode.insertAdjacentElement("afterend", this_rq_answer_and_controls); - - /* typeset the math in the reading questions answers */ - // MathJax.Hub.Queue(["Typeset",MathJax.Hub]); - if (mjvers && mjvers < 3) { - MathJax.Hub.Queue(['Typeset', MathJax.Hub]); - } else if (mjvers > 3) { - MathJax.typesetPromise(); - } - - } else if(role == "instructor" || role == "student") { - - var this_answer_link = document.createElement('div'); - this_answer_link.innerHTML = rq_answer_label; - console.log("inserting afterend of",reading_question); - // reading_question.insertAdjacentElement("afterend", this_answer_link); - reading_question.append(this_answer_link); - } else { - - console.log("should not be here"); - - } - - } - - function allow_student_answers(){ - /* make a new blank area to answer a question */ - $('.readingquestion_make_answer.student').mousedown(function(e){ - console.log(".readingquestion_make_answer student"); -// $(this).addClass("hidecontrols"); - // var this_ques_id = this.parentNode.parentNode.id; - var this_ques_id = this.parentNode.parentNode.id; - var this_ques_id_text = this_ques_id + "_text"; - var this_ques_id_controls = this_ques_id + "_controls"; - console.log(".rq", this_ques_id); - answer_textarea = ''; - this_rq_controls += 'preview'; -// this_rq_controls += 'delete'; - this_rq_controls += 'typing math?'; - this_rq_controls += '
    ' - - var this_rq_answer_and_controls = document.createElement('div'); - this_rq_answer_and_controls.setAttribute('class', 'rq_answer editing'); - this_rq_answer_and_controls.setAttribute('style', 'width:80%; padding-left:10%; padding-right:10%; margin-top:0.5em;'); - - this_rq_answer_and_controls.innerHTML = answer_textarea + this_rq_controls; - this.parentNode.insertAdjacentElement("afterend", this_rq_answer_and_controls); - - this.remove(); - - // MathJax.Hub.Queue(["Typeset",MathJax.Hub]); - - console.log("adding other keypress listener"); - var this_textarea = document.getElementById(this_ques_id_text + "_input"); - console.log("to", this_textarea); - this_textarea.addEventListener("keypress", function() { - // if(this_textarea.scrollTop != 0){ - // console.log("this_textarea.scrollHeight", this_textarea.scrollHeight, "this_textarea.scrollTop", this_textarea.scrollTop); - // console.log("this_textarea.clientHeight", this_textarea.clientHeight); - this_textarea.overflow = "scroll"; - // console.log("this_textarea.scrollHeight", this_textarea.scrollHeight, "this_textarea.scrollTop", this_textarea.scrollTop); - // console.log("this_textarea.clientHeight", this_textarea.clientHeight); - this_textarea.overflow = "hidden"; - // console.log("this_textarea.scrollHeight", this_textarea.scrollHeight, "this_textarea.scrollTop", this_textarea.scrollTop); - // console.log("this_textarea.getBoundingClientRect()", this_textarea.getBoundingClientRect()); - this_textarea.style.height = this_textarea.scrollHeight + "px"; - // } - }, false); - var tmp_id = this_ques_id_text + "_input"; - console.log("want focus to ", tmp_id); - console.log("which is ", $("#" +tmp_id)); - console.log("the active ", document.hasFocus(), "element is", document.activeElement); - console.log("or maybe it is ", $(":focus")); - $("#" + tmp_id).focus(); - document.getElementById(tmp_id).focus(); - console.log("the active ", document.hasFocus(), "element is", document.activeElement); - }); - } - allow_student_answers(); - - $('.readingquestion_make_answer.instructor').mousedown(function(e){ - console.log(".readingquestion_make_answer instructor", "instId", uname, "pI", pageIdentifier); - if (jQuery.isEmptyObject(reading_answers) || this.classList.contains("reload")) { - rq_data = {"action": "retrieve", "instId": uname, "pw": emanu, "pI": pageIdentifier, "type": "readingquestions"}; - // myjson = {"action": "retrieve", "type": "readingquestions", "instId": "100002000", "pI": "beezer-FCLA___FPm"} - - $.ajax({ - url: "https://aimath.org/cgi-bin/u/highlights.py", - type: "post", - data: JSON.stringify(rq_data), - dataType: "json", - async: false, - success: function(data) { - reading_answers = data; - // console.log("something", data, "back from highlight"); - // alert(data); - }, - error: function(errMsg) { - console.log("seems to be an error?",errMsg); - alert("Error\n" + errMsg); - } - }); - } -// var this_ques_id = this.parentNode.previousSibling.id; - var this_ques_id = this.parentNode.parentNode.id; - console.log("this_ques_id", this_ques_id); - var compiled_answers = ""; - var title_of_this_section = $("section > h2 > .title").html(); - title_of_this_section = title_of_this_section.replace(/ /g, "%20"); - title_of_this_section = title_of_this_section.replace(/\?/g, ""); - var number_of_this_rq = 1 + $("#" + this_ques_id).index(".exercise-like"); -// console.log("first title_of_this_section", title_of_this_section); -// console.log("first title_of_this_section.html()", title_of_this_section.html()); -// console.log("second title_of_this_section[0]", title_of_this_section[0]); - for(var j=0; j < reading_answers.length; ++j) { - var this_answer_all = reading_answers[j]; - var this_student_id = this_answer_all[0]; - var these_specific_answers = JSON.parse(this_answer_all[1]); - console.log("these_specific_answers", these_specific_answers); - console.log("this_answer_all[2]", this_answer_all[2]); - var this_submitted_time = JSON.parse(this_answer_all[2]); - // var this_submitted_time = this_answer_all[2]; - console.log("looking for this answer:", this_ques_id + "_text"); - var this_specific_answer = these_specific_answers[this_ques_id + "_text"]; - console.log("this_answer_all",this_answer_all); - console.log("j",j,"this_specific_answer", this_specific_answer); - console.log("this_specific_time", this_submitted_time); - this_specific_answer = dollars_to_slashparen(escapeHTML(this_specific_answer)) - if (!this_specific_answer) { - this_specific_answer = "no answer submitted"; - compiled_answers += '
    '; - } else { - compiled_answers += '
    '; - } - if (this_student_id.indexOf('@') > -1) { - this_student_id = '' + this_student_id + ''; - } - compiled_answers += '
    ' + this_student_id + '
    '; - compiled_answers += '
    ' + this_submitted_time + '
    '; - compiled_answers += '
    ' + this_specific_answer + '
    '; - compiled_answers += '
    \n'; - console.log(j, "j", these_specific_answers) - } - // if the answers are being reloaded, remove the previous answers - $("#" + this_ques_id + "_ans").remove(); - var answers_to_this_question = document.createElement('div'); - answers_to_this_question.setAttribute('class', 'compiled_answers'); - answers_to_this_question.setAttribute('id', this_ques_id + "_ans"); - -// this_rq_answer_and_controls.setAttribute('style', 'width:80%; margin-left:auto; margin-right:auto; margin-top:0.5em;'); -// this_rq_answer_and_controls.setAttribute('class', 'rq_answer'); - answers_to_this_question.innerHTML = compiled_answers; - $('#'+this_ques_id).append(answers_to_this_question); -// this.parentNode.remove(); - this.innerHTML = "Reload responses"; - $(this).addClass("reload"); -// MathJax.Hub.Queue(["Typeset",MathJax.Hub]); - if (mjvers && mjvers < 3) { - MathJax.Hub.Queue(['Typeset', MathJax.Hub]); - } else if (mjvers > 3) { - MathJax.typesetPromise(); - } - - // this.parentNode.insertAdjacentElement("afterend", this_rq_answe - - }); - - - function save_one_reading_question(this_ques_id) { - this_ques_id_text = this_ques_id + "_text"; - var this_ans_text = $("#" + this_ques_id_text + "_input"); - console.log("the value:", this_ans_text.value); -// var this_ques_id = this_ans.parentNode.previousSibling.previousSibling.id; - // var this_ques_id = this_ans.id; - console.log("this_ques_id", this_ques_id); -// console.log("this_rq_ans", this_rq_ans); - var this_ans_text_value = this_ans_text.val(); - console.log("this_ans_text_value", this_ans_text_value); - if ( /[^\x00-\x7F]/.test(this_ans_text_value)) { - this_ans_text_value = this_ans_text_value.replace(/[^\x00-\x7F]/g, "XX"); - alert("Illegal characters in answer have been replaced by XX"); - } - this_ans_text_value = $.trim(this_ans_text_value); // jQuery trim (some chrome on windows had trouble with trim) - // we have the contents of the answer, so save it to local storage - console.log("saving in local storage at", this_ques_id_text, "the answer", this_ans_text_value); - reading_questions_object[this_ques_id_text] = this_ans_text_value; - localStorage.setObject(reading_questions_object_id, reading_questions_object); - console.log("Object.keys(reading_questions_object)",Object.keys(reading_questions_object)); - console.log("reading_questions", reading_questions); - if (Object.keys(reading_questions_object).length >= reading_questions.length && uname != "guest" && role=="student") { - console.log("all reading questions have been answered"); - reading_questions_all_answered = true; - make_submit_button(); - } - - // and save a copy hidden on the page - console.log("looking for", this_ques_id + "_text_hidden"); - // when the initial answer box is created, there is no hidden version - if ( !document.getElementById(this_ques_id + "_text_hidden")) { - console.log("making a place to hide the answer"); - var hidden_answer_div = document.createElement('div'); - hidden_answer_div.setAttribute('id', this_ques_id + '_text_hidden'); - hidden_answer_div.setAttribute('class', 'tex2jax_ignore asciimath2jax_ignore'); - hidden_answer_div.setAttribute('style', 'display: none'); - console.log("this_ans_text", this_ans_text); - document.getElementById(this_ques_id_text + "_input").insertAdjacentElement("beforebegin", hidden_answer_div); - // hidden_answer_div.insertBefore(this_ans_text); - } - console.log("hiding the raw answer in", this_ques_id + "_text_hidden"); - document.getElementById(this_ques_id + "_text_hidden").innerHTML = escapeHTML(this_ans_text_value); - - //and show it on the page - var this_ans_static = document.createElement('div'); - this_ans_static.setAttribute('id', this_ques_id_text); - this_ans_static.setAttribute('class', 'given_answer has_am process-math processme'); - console.log("setting this_ans_static.innerHTML to", dollars_to_slashparen(escapeHTML(this_ans_text_value))); - this_ans_static.innerHTML = dollars_to_slashparen(escapeHTML(this_ans_text_value)) + " " - -// this_rq_ans.replaceWith(this_ans_static); - console.log("about to replace this_ans_text", this_ans_text); - this_ans_text.replaceWith(this_ans_static); - -// MathJax.Hub.Queue(["Typeset",MathJax.Hub]); - if (mjvers && mjvers < 3) { - MathJax.Hub.Queue(['Typeset', MathJax.Hub]); - } else if (mjvers > 3) { - MathJax.typesetPromise(); - } - - - console.log(" this_ans_text", this_ans_text); - - console.log("this_ans_static", this_ans_static); - - $(this_ans_static).parent().addClass("rq_answer"); - - $('#' + this_ques_id + "_controls").addClass("hidecontrols"); -// $(this_q).parent().parent().addClass("rq_answer"); - -/* - var edit_button = document.createElement('span'); - edit_button.setAttribute('class', "action edit_item rq_edit"); - edit_button.innerHTML = "edit"; - this.replaceWith(edit_button); -*/ - }; - - /* edit an existing answer */ - function edit_one_reading_question(this_ans) { - console.log(".rq_edit", this_ans); - // var this_ques_id = this.parentNode.previousSibling.id; - var this_ques_id = this_ans.parentNode.parentNode.id; - console.log("edditing this_ques_id", this_ques_id); - var this_ques_id_text = this_ques_id + "_text"; - // var this_rq_ans = this.parentNode.previousSibling; - var this_rq_ans = this_ans; -// var this_rq_ans_id = this_ans.id; - console.log("now this_ques_id_text", this_ques_id_text); - console.log(".rq_edit", this_ques_id); - console.log("this_rq_ans", this_rq_ans); - var this_rq_text = this_rq_ans.innerHTML; - console.log("looking for", this_ques_id + "_hidden"); - var this_rq_text_raw = uNescapeHTML(document.getElementById(this_ques_id + "_text_hidden").innerHTML); - console.log("this_rq_text_raw",this_rq_text_raw); - - //this is copied from above. need to eliminate repeated code - - var answer_textarea_editable = document.createElement('textarea'); - answer_textarea_editable.setAttribute('id', this_ques_id_text + "_input"); - answer_textarea_editable.setAttribute('class', 'rq_answer_text'); - answer_textarea_editable.setAttribute('rows', '3'); - answer_textarea_editable.setAttribute('style', 'width:95%; height: 44px;'); - - this_rq_ans.replaceWith(answer_textarea_editable); - - console.log("this_ans is",this_ans); - console.log("adding editing to the parent of thing with id", this_ques_id_text, "which is the parent of", $('#' + this_ques_id_text)); - $('#' + this_ques_id_text + "_input").parent().addClass("editing"); - - $('#' + this_ques_id + "_controls").removeClass("hidecontrols"); - -// WHY? $(this).parent().parent().removeClass("rq_answer"); - -/* var save_button = document.createElement('span'); - save_button.setAttribute('class', "action edit_item rq_save"); - save_button.innerHTML = "save"; - this.replaceWith(save_button); -*/ - - $('#' + this_ques_id + "_text_input").val(this_rq_text_raw); - - answer_textarea_editable.style.height = answer_textarea_editable.scrollHeight + "px"; - answer_textarea_editable.addEventListener("keypress", function() { - // if(answer_textarea_editable.scrollTop != 0){ - answer_textarea_editable.style.height = answer_textarea_editable.scrollHeight + "px"; - // } - }, false); - }; - - -/* handle saving when leaving an answer box, or editing an existing answer - when hovering over an existing answer */ - - $('body').on('click','.given_answer', function(){ -// $(this).children().last().removeClass("hidecontrols"); - edit_one_reading_question(this); - $(this).attr('z-index', '2000'); - }); - - $('body').on('mousedown','.rq_save', function(){ -// $(this).children().last().addClass("hidecontrols"); -// $(this).attr('z-index', ''); - // var this_rq = $(this).find(".given_answer"); -//ooooooooo var this_ques_id = this.parentNode.id; - var this_ques_id = this.parentNode.parentNode.parentNode.id; - console.log("id of this quesiton", this_ques_id); -// var this_rq = $(this).find(".rq_answer_text"); -// console.log("this_rq iiIIIIII", this_rq); - var this_current_answer = document.getElementById(this_ques_id + "_text_input"); - console.log("this_current_answer", this_current_answer); - console.log("this_current_answer.value", this_current_answer.value); - // console.log("this_rq IIIIiiii value", this_rq.value); -// save_one_reading_question(this_rq.parentNode.id); - save_one_reading_question(this_ques_id); - console.log("left answer area"); - $(this).removeClass("editing"); - }); - - $('body').on('click','.rq_delete', function(){ - console.log(".rq_delete"); - var this_ques_id = this.parentNode.parentNode.parentNode.id; - console.log(".rq_delete", this_ques_id); - $('#' + this_ques_id + "_controls").removeClass("hidecontrols"); -//and now put in controls - var this_answer_link = document.createElement('div'); - this_answer_link.innerHTML = rq_answer_label; - console.log("inserting afterend of",reading_question); - // reading_question.insertAdjacentElement("afterend", this_answer_link); - $(this).parent().parent().replaceWith(this_answer_link); - allow_student_answers(); - - - console.log("reading_questions_object", reading_questions_object); - console.log("this_ques_id + _text", this_ques_id + "_text"); - delete reading_questions_object[this_ques_id + "_text"]; - console.log("now reading_questions_object", reading_questions_object); - // localStorage.removeItem(this_ques_id); - localStorage.setObject(reading_questions_object_id, reading_questions_object); - }); - - if(reading_questions_all_answered && uname != "guest" && role=="student") { - make_submit_button(); - console.log("made submit button"); - } - - $('body').on('click','#rq_submit', function(){ - console.log("submitting rq answers"); - $('#rq_submit').addClass('submitted'); - document.getElementById('rq_submit').textContent = "Resubmit answers"; - save_reading_questions(); - }); - - $('body').on('click','.amhelp', function(){ - var amhelpmessage = "Write math formulas as AsciiMath inside `backticks`.\n"; - amhelpmessage += "For example:\nThe Pythagorean theorem says `sin^2(x) + cos^2(x) = 1`,\n"; - amhelpmessage += "The quadratic formula is `x = (-b +- sqrt(b^2 - 4ac))/(2a)`. \n"; - amhelpmessage += "Note the use of parentheses for grouping.\n"; - amhelpmessage += "Visit http://asciimath.org for a list of AsciiMath commands.\n\n"; - amhelpmessage += "You can also use LaTeX, with either slash-parentheses \\(...\\)\n"; - amhelpmessage += "or dollar signs $...$ as delimiters for inline math."; - alert(amhelpmessage) - }); - - if(reading_questions_all_answered && uname != "guest" && role=="student") { - make_submit_button(); - } -} diff --git a/slides/_static/pretext/js/diagcess/diagcess.js b/slides/_static/pretext/js/diagcess/diagcess.js deleted file mode 100755 index 69acc7c..0000000 --- a/slides/_static/pretext/js/diagcess/diagcess.js +++ /dev/null @@ -1 +0,0 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.diagcess=e():t.diagcess=e()}(this,(function(){return(()=>{"use strict";var t={422:(t,e)=>{function n(t){return e.prefix_+"-"+t}Object.defineProperty(e,"__esModule",{value:!0}),e.noMove=e.attr=e.hasSpeech=e.getDocument=e.children=e.classList=e.getAttribute=e.getTextContent=e.toggleExpertMode=e.EXPERT_MODE=e.toArray=e.getId=e.idCounter_=e.addPrefix=e.prefix_=void 0,e.prefix_="cacc",e.addPrefix=n,e.idCounter_=0,e.getId=function(){return n("Id-"+e.idCounter_++)},e.toArray=function(t){for(var e=[],n=0;n=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.addStyle=e.replaceStyle_=e.removeStyle_=e.svgForegroundStyle_=e.svgBackgroundStyle_=e.svgHighlightStyle_=e.regionStyle_=e.svgBaseStyle_=e.nodeBackgroundStyle_=e.pickScheme=e.moleculeStyle=e.getScheme_=e.colorSchemes_=e.toggleMonochrome=e.toggleTextVisibility=e.documentCmlStyle=void 0;var r=n(422),i=n(807);function c(t){return e.colorSchemes_[t%e.colorSchemes_.length]}function a(t,e){var n=c(e);return[p(t,n.bkd),s(t,n.bkd),h(t,n.frgd),u(t,n.active,n.almost)]}function s(t,e){var n="";return f(n+="div.".concat(t.node.id," { background-color: ").concat(e,"; }"),"cacc-general-background")}function l(t){var e="svg."+t.id,n="";return n+="".concat(e," { overflow: hidden; }"),n+="".concat(e," text tspan[baseline-shift] { font-weight: 200; font-size: 13px; }"),n+="".concat(e," line, svg rect { stroke-width: 1.0; stroke-linecap: round; }"),n+="".concat(e," line.").concat("cacc-active",", svg g.").concat("cacc-active"," line { stroke-width: 3.0; }"),n+="".concat(e," line.").concat("cacc-almost",", svg g.").concat("cacc-almost"," line { stroke-width: 2.0; }"),n+="".concat(e," g.").concat("cacc-active"," text { font-weight: bold; }"),n+="".concat(e," g#gridSVG g.").concat("cacc-active"," text { font-weight: bold; }"),n+="ul.".concat("cacc-controls"," { list-style-type: none; }"),n+="".concat(e," polyline.").concat("cacc-active",", svg g.").concat("cacc-active"," polyline { stroke-width: 3.0; }"),n+="".concat(e," polyline.").concat("cacc-almost",", svg g.").concat("cacc-almost"," polyline { stroke-width: 2.0; }"),n+="".concat(e," polygon.").concat("cacc-active",", svg g.").concat("cacc-active"," polygon { stroke-width: 3.0; }"),n+="".concat(e," polygon.").concat("cacc-almost",", svg g.").concat("cacc-almost"," polygon { stroke-width: 2.0; }"),n+="".concat(e," path.").concat("cacc-active",", svg g.").concat("cacc-active"," path { stroke-width: 3.0; }"),n+="".concat(e," path.").concat("cacc-almost",", svg g.").concat("cacc-almost"," path { stroke-width: 2.0; }"),n+="".concat(e," rect.").concat("cacc-active",", svg g.").concat("cacc-active"," rect { stroke-width: 3.0; }"),n+="".concat(e," rect.").concat("cacc-almost",", svg g.").concat("cacc-almost"," rect { stroke-width: 2.0; }"),n+="".concat(e," circle.").concat("cacc-active",", svg g.").concat("cacc-active"," circle { stroke-width: 3.0; }"),n+="".concat(e," circle.").concat("cacc-almost",", svg g.").concat("cacc-almost"," circle { stroke-width: 2.0; }"),n+="".concat(e," ellipse.").concat("cacc-active",", svg g.").concat("cacc-active"," ellipse { stroke-width: 3.0; }"),f(n+="".concat(e," ellipse.").concat("cacc-almost",", svg g.").concat("cacc-almost"," ellipse { stroke-width: 2.0; }"),"cacc-base")}function u(t,e,n){var o="svg."+t.id,r="";return r+="".concat(o," line.").concat("cacc-active",", g.").concat("cacc-active"," line { stroke: ").concat(e,"; }"),r+="".concat(o," line.").concat("cacc-almost",", g.").concat("cacc-almost"," line { stroke: ").concat(n,"; }"),r+="".concat(o," g.").concat("cacc-active"," text { fill: ").concat(e,"; }"),r+="".concat(o," g.").concat("cacc-almost"," text { fill: ").concat(n,"; }"),r+="".concat(o," g#gridSVG g.").concat("cacc-active"," text { fill: ").concat(e,"; }"),r+="".concat(o," g#gridSVG g.").concat("cacc-almost"," text { fill: ").concat(n,"; }"),r+="".concat(o," polyline.").concat("cacc-active",", g.").concat("cacc-active"," polyline { stroke: ").concat(e,"; }"),r+="".concat(o," polyline.").concat("cacc-almost",", g.").concat("cacc-almost"," polyline { stroke: ").concat(n,"; }"),r+="".concat(o," polygon.").concat("cacc-active",", g.").concat("cacc-active"," polygon { stroke: ").concat(e,"; }"),r+="".concat(o," polygon.").concat("cacc-almost",", g.").concat("cacc-almost"," polygon { stroke: ").concat(n,"; }"),r+="".concat(o," path.").concat("cacc-active",", g.").concat("cacc-active"," path { stroke: ").concat(e,"; }"),r+="".concat(o," path.").concat("cacc-almost",", g.").concat("cacc-almost"," path { stroke: ").concat(n,"; }"),r+="".concat(o," rect.").concat("cacc-active",", g.").concat("cacc-active"," rect { stroke: ").concat(e,"; }"),r+="".concat(o," rect.").concat("cacc-almost",", g.").concat("cacc-almost"," rect { stroke: ").concat(n,"; }"),r+="".concat(o," circle.").concat("cacc-active",", g.").concat("cacc-active"," circle { stroke: ").concat(e,"; }"),r+="".concat(o," circle.").concat("cacc-almost",", g.").concat("cacc-almost"," circle { stroke: ").concat(n,"; }"),r+="".concat(o," ellipse.").concat("cacc-active",", g.").concat("cacc-active"," ellipse { stroke: ").concat(e,"; }"),f(r+="".concat(o," ellipse.").concat("cacc-almost",", g.").concat("cacc-almost"," ellipse { stroke: ").concat(n,"; }"),"cacc-color-highlight")}function p(t,e){var n="svg."+t.id,o="";return o+="".concat(n," { background-color: ").concat(e,"; }"),o+="".concat(n," g.atom rect { stroke: ").concat(e,"; fill: ").concat(e,"; }"),o+="div.container { background-color: ".concat(e,"; }"),o+="p.".concat(t.id,".").concat("cacc-message"," { background-color: ").concat(e,"; }"),f(o+="p.".concat(t.id,".").concat("cacc-message",".").concat("cacc-text-invisible"," { color: ").concat(e,"; }"),"cacc-color-background")}function h(t,e){var n="svg."+t.id,o="";return o+="".concat(n," line { stroke: ").concat(e,"; fill: ").concat(e,"; }"),o+="".concat(n,".").concat("cacc-text-monochrome"," text"),o+=" { stroke: ".concat(e,"; fill: ").concat(e,"; }"),o+="".concat(n," g#gridSVG text { stroke: ").concat(e,"; fill: ").concat(e,"; }"),o+="div.container { color: ".concat(e,"; }"),o+="p.".concat(t.id,".").concat("cacc-message"," { color: ").concat(e,"; }"),o+="ul.".concat(t.id,".").concat("cacc-controls"," { color: ").concat(e,"; }"),i.config.POLYLINE&&(o+="".concat(n," polyline { stroke: ").concat(e,"; fill: ").concat(e,"; }")),o+="".concat(n," polygon { stroke: ").concat(e,"; fill: ").concat(e,"; }"),o+="".concat(n," path { stroke: ").concat(e,"; }"),o+="".concat(n," rect { stroke: ").concat(e,"; }"),o+="".concat(n," circle { stroke: ").concat(e,"; }"),f(o+="".concat(n," ellipse { stroke: ").concat(e,"; }"),"cacc-color-elements")}function f(t,e){var n=document.createElement("style");return n.setAttribute("class",e),n.innerHTML=t,n}function d(t,e){var n=t.querySelector("style."+e);return!!n&&(t.removeChild(n),!0)}function v(t,e){t.appendChild(e)}e.documentCmlStyle=function(){document.body&&v(document.body,f("div.cml { display:none; }","cacc-cml"))},e.toggleTextVisibility=function(t){r.classList.toggle(t,"cacc-text-invisible")},e.toggleMonochrome=function(t){r.classList.toggle(t,"cacc-text-monochrome")},e.colorSchemes_=[{frgd:"#000",bkd:"#fff",active:"#fd6",almost:"#6df"},{frgd:"#fff",bkd:"#000",active:"#fd6",almost:"#6df"},{frgd:"#3C3",bkd:"#000",active:"#fd6",almost:"#6df"},{frgd:"#ee0",bkd:"#00e",active:"#4f4",almost:"#e3e"}],e.getScheme_=c,e.moleculeStyle=function(t){var e,n,r=new Map,i=l(t);r.set(i.className,i);try{for(var c=o(a(t,0)),s=c.next();!s.done;s=c.next()){var u=s.value;r.set(u.className,u)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}return r},e.pickScheme=a,e.nodeBackgroundStyle_=s,e.svgBaseStyle_=l,e.regionStyle_=function(t){v(t,f("p.".concat("cacc-message",".").concat("cacc-text-invisible"," { font-size: 0px; }"),"cacc-region"))},e.svgHighlightStyle_=u,e.svgBackgroundStyle_=p,e.svgForegroundStyle_=h,e.removeStyle_=d,e.replaceStyle_=function(t,e,n){d(t,n),v(t,f(e,n))},e.addStyle=v},446:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CustomEvent=e.EventType=e.KeyCodes=void 0,function(t){t[t.RETURN=13]="RETURN",t[t.ENTER=13]="ENTER",t[t.ESC=27]="ESC",t[t.SPACE=32]="SPACE",t[t.LEFT=37]="LEFT",t[t.UP=38]="UP",t[t.RIGHT=39]="RIGHT",t[t.DOWN=40]="DOWN",t[t.A=65]="A",t[t.B=66]="B",t[t.C=67]="C",t[t.D=68]="D",t[t.E=69]="E",t[t.F=70]="F",t[t.G=71]="G",t[t.H=72]="H",t[t.I=73]="I",t[t.J=74]="J",t[t.K=75]="K",t[t.L=76]="L",t[t.M=77]="M",t[t.N=78]="N",t[t.O=79]="O",t[t.P=80]="P",t[t.Q=81]="Q",t[t.R=82]="R",t[t.S=83]="S",t[t.T=84]="T",t[t.U=85]="U",t[t.V=86]="V",t[t.W=87]="W",t[t.X=88]="X",t[t.Y=89]="Y",t[t.Z=90]="Z",t[t.COMMA=188]="COMMA",t[t.PERIOD=190]="PERIOD"}(e.KeyCodes||(e.KeyCodes={})),function(t){t.CLICK="click",t.DBLCLICK="dblclick",t.MOUSEDOWN="mousedown",t.MOUSEUP="mouseup",t.MOUSEOVER="mouseover",t.MOUSEOUT="mouseout",t.MOUSEMOVE="mousemove",t.SELECTSTART="selectstart",t.KEYPRESS="keypress",t.KEYDOWN="keydown",t.KEYUP="keyup",t.TOUCHSTART="touchstart",t.TOUCHMOVE="touchmove",t.TOUCHEND="touchend",t.TOUCHCANCEL="touchcancel"}(e.EventType||(e.EventType={}));var n=function(){function t(t,e,n){this.src=t,this.type=e,this.callback=n,this.src=t,this.type=e,this.callback=n}return t.prototype.add=function(){this.src.addEventListener(this.type,this.callback)},t.prototype.remove=function(){this.src.removeEventListener(this.type,this.callback)},t}();e.CustomEvent=n},807:(t,e)=>{var n,o,r,i,c,a;Object.defineProperty(e,"__esModule",{value:!0}),e.config=e.options=e.sound=e.speech=e.colors=e.regions=e.magnifiers=e.explorers=e.version=void 0,e.version="1.1.4",function(t){t.KEY="key",t.MENU="menu"}(n=e.explorers||(e.explorers={})),function(t){t.DUMMY="dummy",t.STEP="step",t.SIMPLE="simple"}(o=e.magnifiers||(e.magnifiers={})),function(t){t.SUBTITLE="subtitle",t.SPEECH="speech"}(r=e.regions||(e.regions={})),function(t){t.MONOCHROME="monochrome",t.CONTRAST="contrast"}(i=e.colors||(e.colors={})),function(t){t.LANGUAGE="language",t.EXPERT="expert",t.DETAIL="detail"}(c=e.speech||(e.speech={})),function(t){t.OSCILLATOR="oscillator",t.VOICING="voicing"}(a=e.sound||(e.sound={})),e.options={explorers:[n.KEY,n.MENU],magnifiers:[o.STEP,o.SIMPLE,o.DUMMY],regions:[r.SUBTITLE,r.SPEECH],colors:[i.MONOCHROME,i.CONTRAST],speech:[c.LANGUAGE,c.EXPERT,c.DETAIL],sound:[a.OSCILLATOR,a.VOICING]},e.config={MSG_VISIBLE:!0,MAG_ACTIVE:o.STEP,SONIFY:!1,VOICING:!0,VOICE_LANG:"en",ACTIVE_LANG:"en",SUB_VISIBLE:!1,SUBTITLE:null,POLYLINE:!1}},23:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,r,i=n.call(t),c=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)c.push(o.value)}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return c};Object.defineProperty(e,"__esModule",{value:!0}),e.Base=void 0;var i=n(966),c=n(422),a=n(911),s=n(807),l=n(402);!function(t){t.molMap={},t.init=function(){var e,n,u=l.forDocument();Object.keys(u).length>0&&(a.documentCmlStyle(),s.config.SUBTITLE=function(){var t=c.getDocument(),e=t.createElement("p");e.classList.add("explorer"),e.classList.add("cacc-message");var n=a.getScheme_(1);e.style.cssText+="position:fixed;left:0;bottom:0;"+"background-color: ".concat(n.bkd,"; color: ").concat(n.frgd),a.regionStyle_(t.body),s.config.SUB_VISIBLE||e.classList.add("cacc-text-invisible");return e}());try{for(var p=o(Object.entries(u)),h=p.next();!h.done;h=p.next()){var f=r(h.value,2),d=f[0],v=f[1];t.molMap[d]||(t.molMap[d]=new i.Container(d,v))}}catch(t){e={error:t}}finally{try{h&&!h.done&&(n=p.return)&&n.call(p)}finally{if(e)throw e.error}}}}(e.Base||(e.Base={}))},402:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.fromUri_=e.getUrlParameters_=e.getParam_=e.getData_=e.getMol_=e.forDocument=void 0;var r=n(29),i=0;function c(t){t.querySelector("div.svg")?(t.setAttribute("has-svg","true"),r.rewriteTransformations(t.querySelector("div.svg > svg"))):a(t,"svg","data-src",".svg"),t.querySelector("div.cml")?t.setAttribute("has-cml","true"):a(t,"cml","data-cml",".xml")}function a(t,e,n,o){var i=t.getAttribute(n)||s(t,n,o);i?u(i,(function(n){if(n){t.setAttribute("has-"+e,"true");var o=document.createElement("div");o.classList.add(e),"svg"===e&&r.rewriteTransformations(n),o.appendChild(n.documentElement),t.appendChild(o)}else t.setAttribute("has-"+e,"false")})):t.setAttribute("has-"+e,"false")}function s(t,e,n){if(!t.id)return null;var o=l()[t.id];return o?(o+=n,t.setAttribute(e,o),o):null}function l(){for(var t,e={},n=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),o=0;o{Object.defineProperty(e,"__esModule",{value:!0}),e.rewriteTransformations=void 0;var o=n(422);function r(t){var e=t,n=[];do{var o=e.getAttribute("transform");o&&n.unshift(o),e=e.parentNode}while("svg"!==e.tagName);return t.setAttribute("transform",n.join(" ")),t}function i(t){var e=document.createElementNS("http://www.w3.org/2000/svg","g"),n=t.getAttribute("id");return n&&(e.setAttribute("id",n),t.removeAttribute("id")),t.parentNode.replaceChild(e,t),e.appendChild(t),e}function c(t){var e=t;do{(e=e.parentNode).removeAttribute("transform")}while("svg"!==e.tagName)}e.rewriteTransformations=function(t){var e,n=o.toArray(t.querySelectorAll("text,polyline,line,rect,polygon,use,path"));return(e=n).forEach(r),e.forEach(c),e.filter((function(t){return t.hasAttribute("id")})).forEach(i),n}},113:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Contrast=e.Monochrome=e.AbstractColor=void 0;var i=n(911),c=n(446),a=n(807),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.update=function(){},e}(n(530).AbstractController);e.AbstractColor=s;var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.colors.MONOCHROME,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===c.KeyCodes.T&&i.toggleMonochrome(t.container.molecule.svg),e.stopPropagation(),!1}))},e}(s);e.Monochrome=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.colors.CONTRAST,e.scheme=0,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===c.KeyCodes.C&&t.container.replaceStyles(i.pickScheme(t.container.molecule,++t.scheme)),e.stopPropagation(),!1}))},e}(s);e.Contrast=u},530:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractController=void 0;var r=n(446),i=function(){function t(t){this.container=t,this._active=!1,this.internalEvents_=[],this.customEvents()}return Object.defineProperty(t.prototype,"active",{get:function(){return this._active},set:function(t){this._active=t},enumerable:!1,configurable:!0}),t.prototype.activate=function(){this.active=!0,this.addEvents()},t.prototype.deactivate=function(){this.removeEvents(),this.active=!1},t.prototype.registerEvent=function(t,e,n){this.internalEvents_.push(new r.CustomEvent(t,e,n))},t.prototype.addEvents=function(){var t,e;try{for(var n=o(this.internalEvents_),r=n.next();!r.done;r=n.next()){r.value.add()}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},t.prototype.removeEvents=function(){var t,e;try{for(var n=o(this.internalEvents_),r=n.next();!r.done;r=n.next()){r.value.remove()}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},t}();e.AbstractController=i},889:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerFactory=void 0;var r=n(807),i=n(113),c=n(172),a=n(10),s=n(556),l=n(150),u=n(916);!function(t){var e,n=((e={})[r.magnifiers.SIMPLE]=function(t){return new a.SimpleMagnifier(t)},e[r.magnifiers.STEP]=function(t){return new a.StepMagnifier(t)},e[r.magnifiers.DUMMY]=function(t){return new a.DummyMagnifier(t)},e[r.colors.MONOCHROME]=function(t){return new i.Monochrome(t)},e[r.colors.CONTRAST]=function(t){return new i.Contrast(t)},e[r.speech.DETAIL]=function(t){return new u.Detail(t)},e[r.speech.EXPERT]=function(t){return new u.Expert(t)},e[r.speech.LANGUAGE]=function(t){return new u.Language(t)},e[r.regions.SPEECH]=function(t){return new s.Speech(t)},e[r.regions.SUBTITLE]=function(t){return new s.Subtitle(t)},e[r.explorers.KEY]=function(t){return new c.KeyExplorer(t)},e[r.explorers.MENU]=function(t){return new c.MenuExplorer(t)},e[r.sound.OSCILLATOR]=function(t){return new l.Oscillator(t)},e[r.sound.VOICING]=function(t){return new l.Voicing(t)},e);t.get=function(t){var e,i,c=[],a=[].concat(r.options.magnifiers,r.options.regions,r.options.colors,r.options.speech,r.options.sound,r.options.explorers);try{for(var s=o(a),l=s.next();!l.done;l=s.next()){var u=l.value,p=n[u];if(p){var h=p(t);c.push(h)}}}catch(t){e={error:t}}finally{try{l&&!l.done&&(i=s.return)&&i.call(s)}finally{if(e)throw e.error}}return c}}(e.ControllerFactory||(e.ControllerFactory={}))},172:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.MenuExplorer=e.KeyExplorer=e.AbstractExplorer=void 0;var i=n(422),c=n(446),a=n(807),s=function(t){function e(e){var n=t.call(this,e)||this;return n.container=e,n.setupControls(),n}return r(e,t),e.prototype.activate=function(){this.active&&(this.container.update(),this.addControls(),t.prototype.activate.call(this))},e.prototype.deactivate=function(){this.active&&(t.prototype.deactivate.call(this),this.removeControls())},e.prototype.addEvents=function(){this.active&&t.prototype.addEvents.call(this)},e.prototype.setupControls=function(){},e.prototype.addControls=function(){},e.prototype.removeControls=function(){},e.prototype.update=function(){},e.prototype.customEvents=function(){var t=this,e=this.container.molecule.node;new c.CustomEvent(e,c.EventType.KEYDOWN,(function(e){return t.active&&e.keyCode===c.KeyCodes.ESC&&t.container.deactivate(),t.container.active||e.keyCode===t.getActivationKey()&&(t.active=!0,t.container.activate(),e.preventDefault()),e.stopPropagation(),!1})).add()},e}(n(530).AbstractController);e.AbstractExplorer=s;var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.explorers.KEY,e}return r(e,t),e.prototype.setupControls=function(){var t=this,e=function(e,n){var o=n();o.length>0?t.container.update(o[0]):(0,i.noMove)(),e.preventDefault()};this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(n){switch(n.keyCode){case c.KeyCodes.DOWN:case c.KeyCodes.D:e(n,(function(){return t.container.activeElement.getDown()}));break;case c.KeyCodes.UP:case c.KeyCodes.E:e(n,(function(){return t.container.activeElement.getUp()}));break;case c.KeyCodes.RIGHT:case c.KeyCodes.F:e(n,(function(){return t.container.activeElement.getRight()}));break;case c.KeyCodes.LEFT:case c.KeyCodes.S:e(n,(function(){return t.container.activeElement.getLeft()}))}return n.stopPropagation(),!1}))},e.prototype.getActivationKey=function(){return c.KeyCodes.A},e}(s);e.KeyExplorer=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.explorers.MENU,e}return r(e,t),e.prototype.setupControls=function(){var t=this,e=this.container.molecule.createElement("ul");e.classList.add("cacc-controls"),e.setAttribute("role","navigation"),this.control_=e;var n=function(e,n){var o=n();o.length>0?t.container.update(o[0]):(0,i.noMove)()},o=function(e,o){t.registerEvent(e,c.EventType.KEYDOWN,(function(t){return t.keyCode!==c.KeyCodes.ENTER&&t.keyCode!==c.KeyCodes.SPACE||(n(0,o),t.preventDefault(),t.stopPropagation()),!1})),t.registerEvent(e,c.EventType.CLICK,(function(t){return n(0,o),t.stopPropagation(),!1}))};o(this.makeButton_("Down",e),(function(){return t.container.activeElement.getDown()})),o(this.makeButton_("Up",e),(function(){return t.container.activeElement.getUp()})),o(this.makeButton_("Next",e),(function(){return t.container.activeElement.getRight()})),o(this.makeButton_("Previous",e),(function(){return t.container.activeElement.getLeft()}))},e.prototype.addControls=function(){var t=this.container.molecule.node,e=t.querySelector(".cacc-message");e?t.insertBefore(this.control_,e):t.appendChild(this.control_)},e.prototype.removeControls=function(){this.control_.parentNode.removeChild(this.control_)},e.prototype.getActivationKey=function(){return c.KeyCodes.B},e.prototype.makeButton_=function(t,e){var n=this.container.molecule.createElement("li");return n.setAttribute("role","button"),n.setAttribute("aria-controls",this.container.molecule.node.getAttribute("id")),n.classList.add("cacc-button"),n.setAttribute("tabindex","0"),n.setAttribute("title",t),n.appendChild(document.createTextNode(t)),e.appendChild(n),n},e}(s);e.MenuExplorer=u},10:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.StepMagnifier=e.SimpleMagnifier=e.DummyMagnifier=e.AbstractMagnifier=void 0;var i=n(446),c=n(807),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),Object.defineProperty(e.prototype,"active",{get:function(){return this._active&&c.config.MAG_ACTIVE===this.name},set:function(t){this._active=t},enumerable:!1,configurable:!0}),e.prototype.update=function(){this.container.viewBox.select(this.container.activeElement.getDrawnElements())},e.prototype.deactivate=function(){this.active&&(this.container.viewBox.clearActive(),this.container.viewBox.reset(),t.prototype.deactivate.call(this))},e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,i.EventType.KEYDOWN,(function(e){return e.keyCode===t.getActivationKey()&&c.config.MAG_ACTIVE!==t.name&&(c.config.MAG_ACTIVE=t.name,t.update()),e.stopPropagation(),!1}))},e}(n(530).AbstractController);e.AbstractMagnifier=a;var s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=c.magnifiers.DUMMY,e}return r(e,t),e.prototype.getActivationKey=function(){return i.KeyCodes.N},e.prototype.update=function(){this.container.viewBox.reset(),t.prototype.update.call(this)},e}(a);e.DummyMagnifier=s;var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=c.magnifiers.SIMPLE,e}return r(e,t),e.prototype.update=function(){this.container.viewBox.select(this.container.activeElement.getDrawnElements()),this.container.viewBox.zoom("cacc-active")},e.prototype.getActivationKey=function(){return i.KeyCodes.COMMA},e}(a);e.SimpleMagnifier=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=c.magnifiers.STEP,e.lastActive=null,e}return r(e,t),e.prototype.update=function(){var t=this.container.activeElement,e=this.container.viewBox,n=this.lastActive?this.lastActive.getDrawnElements():[];this.container.viewBox.select(t.getDrawnElements(),"cacc-almost"),e.select(t.getDrawnElements().concat(n),"cacc-dummy"),this.lastActive=t,e.zoom("cacc-dummy",{duration:250,delay:25,wait:300,callback:function(){e.select([],"cacc-almost"),e.select(t.getDrawnElements(),"cacc-active"),e.zoom("cacc-active",{duration:250,delay:25,wait:300})}})},e.prototype.getActivationKey=function(){return i.KeyCodes.M},e}(a);e.StepMagnifier=u},556:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Speech=e.Subtitle=e.LiveRegion=void 0;var i=n(422),c=n(911),a=n(446),s=n(807),l=function(t){function e(e){var n=t.call(this,e)||this;return n.container=e,n.setupMessage(),n}return r(e,t),e.prototype.setupMessage=function(){var t=this.container.molecule.createElement("p");t.classList.add("explorer"),t.setAttribute("aria-live","assertive"),i.hasSpeech()&&(speechSynthesis.onvoiceschanged=function(){speechSynthesis.getVoices().length&&t.removeAttribute("aria-live")}),t.setAttribute("tabindex","-1"),t.classList.add("cacc-message"),this.message=t},e.prototype.activate=function(){this.active||(this.addMessage(),t.prototype.activate.call(this))},e.prototype.deactivate=function(){this.active&&(t.prototype.deactivate.call(this),this.removeMessage())},e.prototype.removeMessage=function(){this.message.parentNode.removeChild(this.message)},e.prototype.update=function(){this.message.textContent=this.container.activeElement.getSpeech()},e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,a.EventType.KEYDOWN,(function(e){return e.keyCode===a.KeyCodes.Z&&(t.toggleMessageVisibility(),s.config.MSG_VISIBLE=!s.config.MSG_VISIBLE),e.stopPropagation(),!1}))},e.prototype.toggleMessageVisibility=function(){c.toggleTextVisibility(this.message)},e}(n(530).AbstractController);e.LiveRegion=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=s.regions.SUBTITLE,e}return r(e,t),e.prototype.addMessage=function(){this.container.molecule.node.parentNode.appendChild(this.message),s.config.MSG_VISIBLE||this.message.classList.add("cacc-text-invisible")},e}(l);e.Subtitle=u;var p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=s.regions.SPEECH,e}return r(e,t),e.prototype.setupMessage=function(){this.message=s.config.SUBTITLE},e.prototype.addMessage=function(){this.message.parentNode||i.getDocument().body.appendChild(this.message)},e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,a.EventType.KEYDOWN,(function(e){return e.keyCode===a.KeyCodes.V&&(t.toggleMessageVisibility(),s.config.SUB_VISIBLE=!s.config.SUB_VISIBLE),e.stopPropagation(),!1}))},e}(l);e.Speech=p},150:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Voicing=e.Oscillator=e.AbstractSoundController=void 0;var i=n(422),c=n(446),a=n(807),s=n(530),l=n(394),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.activate=function(){t.prototype.activate.call(this),this.active=this.on()},e.prototype.deactivate=function(){this.stop(),t.prototype.deactivate.call(this)},e.prototype.update=function(){this.stop()},e.prototype.getStopKey=function(){return c.KeyCodes.K},e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===t.getActivationKey()&&(t.active=!t.active,t.toggle(t.active),t.active?t.update():t.stop()),e.keyCode===t.getRepeatKey()&&t.update(),e.keyCode===t.getStopKey()&&t.stop(),e.stopPropagation(),!1}))},e}(s.AbstractController);e.AbstractSoundController=u;var p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.sound.OSCILLATOR,e.currentOscillators=[],e}return r(e,t),e.prototype.update=function(){t.prototype.update.call(this),this.currentOscillators=l.Sonify.sonify(this.container.activeElement)},e.prototype.on=function(){return a.config.SONIFY},e.prototype.toggle=function(t){a.config.SONIFY=t},e.prototype.stop=function(){this.currentOscillators.forEach((function(t){return t.stop()}))},e.prototype.getActivationKey=function(){return c.KeyCodes.O},e.prototype.getRepeatKey=function(){return c.KeyCodes.P},e}(u);e.Oscillator=p;var h=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.sound.VOICING,e.languages=null,e}return r(e,t),e.prototype.update=function(){t.prototype.update.call(this);var e=new SpeechSynthesisUtterance(this.container.activeElement.getSpeech());e.lang=this.languages?this.languages.active:a.config.VOICE_LANG,speechSynthesis.speak(e)},e.prototype.activate=function(){i.hasSpeech()&&(this.languages=this.container.molecule.cmlStructure.getRootElement().getDiagram().languages,this.languages&&this.languages.updateActive(),t.prototype.activate.call(this))},e.prototype.getActivationKey=function(){return c.KeyCodes.Y},e.prototype.getRepeatKey=function(){return c.KeyCodes.U},e.prototype.on=function(){return a.config.VOICING},e.prototype.toggle=function(t){a.config.VOICING=t},e.prototype.stop=function(){i.hasSpeech()&&speechSynthesis.cancel()},e}(u);e.Voicing=h},916:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Language=e.Expert=e.Detail=e.AbstractSpeech=void 0;var i=n(422),c=n(446),a=n(807),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.update=function(){},e}(n(530).AbstractController);e.AbstractSpeech=s;var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.speech.DETAIL,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===c.KeyCodes.W&&(t.container.activeElement.link?(t.container.activeElement.links=!0,t.container.update(),t.container.activeElement.links=!1):((0,i.toggleExpertMode)(),t.container.update(),(0,i.toggleExpertMode)())),e.stopPropagation(),!1}))},e}(s);e.Detail=l;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.speech.EXPERT,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){return e.keyCode===c.KeyCodes.X&&((0,i.toggleExpertMode)(),t.container.update()),e.stopPropagation(),!1}))},e}(s);e.Expert=u;var p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.name=a.speech.LANGUAGE,e}return r(e,t),e.prototype.customEvents=function(){var t=this;this.registerEvent(this.container.molecule.node,c.EventType.KEYDOWN,(function(e){e.keyCode===c.KeyCodes.L&&(t.container.molecule.cmlStructure.getMap().nextLanguage()&&t.container.active&&t.container.update());return e.stopPropagation(),!1}))},e}(s);e.Language=p},250:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Bbox=void 0;var n=function(){function t(t,e,n,o){this.x=t,this.y=e,this.width=n,this.height=o}return t.fromSvgRect=function(e){return new t(e.x,e.y,e.width,e.height)},t.fromSvgViewBox=function(e){return new t(e.baseVal.x,e.baseVal.y,e.baseVal.width,e.baseVal.height)},t.combineBboxes=function(e){var n=function(t){var e=t.getBBox();if(0===e.x&&0===e.y&&0===e.width&&0===e.height&&t.childNodes&&t.childNodes[0]&&t.childNodes[0].transform){var n=t.childNodes[0],o=void 0,r=void 0,i=void 0,c=void 0;if(n.x&&n.y&&n.width&&n.height)o=n.x.baseVal.value,r=n.y.baseVal.value,i=n.width.baseVal.value,c=n.height.baseVal.value;else{var a=n.getBBox();o=a.baseVal.x,r=a.baseVal.y,i=a.baseVal.width,c=a.baseVal.height}var s=t.ownerSVGElement.createSVGPoint(),l=n.transform.baseVal;s.x=o,s.y=r;for(var u=l.length-1;u>=0;u--)s=s.matrixTransform(l.getItem(u).matrix);e.x=s.x,e.y=s.y,e.width=i,e.height=c}return e},o=t.fromSvgRect(n(e[0]));return 1===e.length?o:e.slice(1).reduce((function(t,e){return t.combine(n(e))}),o)},t.prototype.add=function(e){return new t(this.x+e.x,this.y+e.y,this.width+e.width,this.height+e.height)},t.prototype.difference=function(t,e,n){var o=this.add(t.scale(-1));return e&&(o.x=o.x-e/2,o.width=o.width+e),n&&(o.y=o.y-n/2,o.height=o.height+n),o},t.prototype.scale=function(e){return new t(this.x*e,this.y*e,this.width*e,this.height*e)},t.prototype.combine=function(e){var n=Math.min(this.x,e.x),o=Math.min(this.y,e.y);return new t(n,o,Math.max(this.x+this.width,e.x+e.width)-n,Math.max(this.y+this.height,e.y+e.height)-o)},t.prototype.viewBoxValue=function(){return this.x+" "+this.y+" "+this.width+" "+this.height},t}();e.Bbox=n},966:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),i=this&&this.__awaiter||function(t,e,n,o){return new(n||(n=Promise))((function(r,i){function c(t){try{s(o.next(t))}catch(t){i(t)}}function a(t){try{s(o.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(c,a)}s((o=o.apply(t,e||[])).next())}))},c=this&&this.__generator||function(t,e){var n,o,r,i,c={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;c;)try{if(n=1,o&&(r=2&i[0]?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return c.label++,{value:i[1],done:!1};case 5:c.label++,o=i[1],i=[0];continue;case 7:i=c.ops.pop(),c.trys.pop();continue;default:if(!(r=c.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){c=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,r,i=n.call(t),c=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)c.push(o.value)}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return c};Object.defineProperty(e,"__esModule",{value:!0}),e.Container=void 0;var l=n(911),u=n(446),p=n(807),h=n(530),f=n(889),d=n(691),v=n(229),g=function(t){function e(e,n){var o=t.call(this,null)||this;return o.key=e,o.mol=n,o.name="Container",o.controllers=[],o.initElement().then((function(){o.viewBox=new v.ViewBox(o.molecule.svg),o.controllers=o.controllers.concat(f.ControllerFactory.get(o)),o.styles=l.moleculeStyle(o.molecule),o.activeElement=o.molecule.cmlStructure.getRootElement(),o.customEvents(),o.getDefaultExplorer()})).catch((function(){console.error("Failed to initialize element ".concat(e))})),o}return r(e,t),e.loadElement=function(t){return i(this,void 0,void 0,(function(){var e;return c(this,(function(n){return e=0,[2,new Promise((function(n,o){var r=function(){t.hasAttribute("has-svg")&&t.hasAttribute("has-cml")?n():e>5?o(t):(e++,setTimeout(r,100))};r()})).catch((function(t){"true"!==t.getAttribute("has-svg")&&console.error("Failed to load SVG diagram."),"true"!==t.getAttribute("has-cml")&&console.error("Failed to load XML annotation.")}))]}))}))},e.prototype.initElement=function(){return i(this,void 0,void 0,(function(){var t=this;return c(this,(function(n){return[2,e.loadElement(this.mol).then((function(){if("true"!==t.mol.getAttribute("has-svg")||"true"!==t.mol.getAttribute("has-cml"))return Promise.reject("Loading of components failed.");var e=t.mol.querySelector("div.svg").children[0],n=t.mol.querySelector("div.cml").children[0];return e&&n?(t.mol.setAttribute("tabindex","0"),t.mol.setAttribute("role","application"),e.setAttribute("aria-hidden","true"),n.setAttribute("aria-hidden","true"),t.mol.hasAttribute("aria-label")||t.mol.setAttribute("aria-label","Navigatable ".concat(n.tagName)),t.molecule=new d.Molecule(t.mol,e,n),Promise.resolve()):Promise.reject("Empty Diagram elements.")})).catch((function(t){console.error("Molecule Structure initialisation failed with:",t)}))]}))}))},e.prototype.update=function(t){t&&(this.activeElement=t),this.controllers.forEach((function(t){t.active&&t.update()}))},e.prototype.activate=function(){t.prototype.activate.call(this),this.addStyles(),this.controllers.forEach((function(t){return t.activate()}))},e.prototype.deactivate=function(){this.controllers.forEach((function(t){return t.deactivate()})),this.removeStyles(),t.prototype.deactivate.call(this)},e.prototype.addStyles=function(){var t,e;try{for(var n=a(this.styles),o=n.next();!o.done;o=n.next()){var r=s(o.value,2)[1];this.molecule.node.appendChild(r)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.removeStyles=function(){var t,e;try{for(var n=a(this.styles),o=n.next();!o.done;o=n.next()){var r=s(o.value,2)[1];this.molecule.node.removeChild(r)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.replaceStyles=function(t){var e,n;this.removeStyles();try{for(var o=a(t),r=o.next();!r.done;r=o.next()){var i=r.value;this.styles.set(i.className,i)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(e)throw e.error}}this.addStyles()},e.prototype.customEvents=function(){var t,e=this;(null===(t=this.molecule)||void 0===t?void 0:t.node)&&(this.registerEvent(this.molecule.node,u.EventType.KEYDOWN,(function(t){return t.keyCode===u.KeyCodes.SPACE&&(e.update(),t.preventDefault(),t.stopPropagation()),!1})),new u.CustomEvent(this.molecule.node,u.EventType.KEYDOWN,(function(t){return e.defaultExplorer&&!e.active&&t.keyCode===u.KeyCodes.ENTER&&(e.defaultExplorer.active=!0,e.activate(),t.preventDefault(),t.stopPropagation()),!1})).add(),new u.CustomEvent(this.molecule.node,u.EventType.CLICK,(function(t){return e.defaultExplorer&&!e.active&&(e.defaultExplorer.active=!0,e.activate(),t.stopPropagation()),!1})).add())},e.prototype.getDefaultExplorer=function(){this.defaultExplorer=this.controllers.find((function(t){return t.name===p.explorers.KEY})),this.defaultExplorer||(this.defaultExplorer=this.controllers.find((function(t){return t.name===p.explorers.MENU})))},e}(h.AbstractController);e.Container=g},88:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Diagram=void 0;var n=function(){function t(t){this.languages=t,this.diagram_={}}return t.prototype.set=function(t,e){this.diagram_[t]=e},t.prototype.get=function(t){return this.diagram_[t]},t.prototype.forEach=function(t){for(var e in this.diagram_)t.call(this,this.diagram_[e])},t.prototype.find=function(t){for(var e in this.diagram_){var n=this.diagram_[e];if(t.call(this,n))return n}return null},t.prototype.translate=function(t){return this.languages?this.languages.translate(t):t},t.prototype.nextLanguage=function(){return this.languages?(this.languages.nextLanguage(),this.languages.active):null},t}();e.Diagram=n},465:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Language=void 0;var o=n(422),r=function(){function t(t){this.cmlDocument=t,this.messages={},this.language=this.getLanguage(),this.insertMessages()}return t.prototype.getLanguage=function(){var t=this.cmlDocument.querySelector("language");return t?t.textContent:""},t.prototype.insertMessages=function(){for(var t=this.cmlDocument.querySelectorAll("message"),e=0,n=void 0;n=t[e];e++)this.messages[(0,o.getAttribute)(n,"msg")]=n.textContent},t.prototype.translate=function(t){return this.messages[t]},t}();e.Language=r},495:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.Languages=void 0;var r=n(807),i=n(465),c=function(){function t(t){this.cmlDocument=t,this.languages={},this.insertLanguages(),this.active=this.defaultActive()}return t.createLanguages=function(e){return 0===Array.from(e.querySelectorAll("messages")).filter((function(t){return t.childNodes.length})).length?null:new t(e)},t.prototype.insertLanguages=function(){var t,e,n=this.cmlDocument.querySelectorAll("messages");try{for(var r=o(Array.from(n)),c=r.next();!c.done;c=r.next()){var a=c.value,s=a.querySelector("language");s&&(this.languages[s.textContent]=new i.Language(a))}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},t.prototype.updateActive=function(){this.active=this.languages[r.config.ACTIVE_LANG]?r.config.ACTIVE_LANG:this.defaultActive()},t.prototype.defaultActive=function(){return this.languages[r.config.VOICE_LANG]?r.config.VOICE_LANG:Object.keys(this.languages)[0]},t.prototype.translate=function(t){return this.languages[this.active].translate(t)},t.prototype.nextLanguage=function(){var t=Object.keys(this.languages),e=t.indexOf(this.active)+1;this.active=t.length>e?t[e]:t[0],r.config.ACTIVE_LANG=this.active},t}();e.Languages=c},229:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=this&&this.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,r,i=n.call(t),c=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)c.push(o.value)}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return c};Object.defineProperty(e,"__esModule",{value:!0}),e.ViewBox=e.ZoomOptions=void 0;var i=n(422),c=n(250),a=function(){};e.ZoomOptions=a;var s=function(){function t(t){this.svg=t,this.focusgroups=new Map,this.defaultZoomOptions={xPad:this.svg.width.baseVal.value/5,yPad:this.svg.height.baseVal.value/5,duration:100,delay:10,wait:0,callback:function(){}},this.reset()}return t.prototype.reset=function(){this.setViewBox_(c.Bbox.fromSvgRect(this.svg.getBBox()))},t.prototype.setClass=function(t,e){for(var n=0;n=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.Atom=void 0;var c=n(422),a=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.speech="",e.links=!1,e}return r(e,t),e.prototype.getSpeech=function(){if(this.link&&this.links)return this.speakLinks();var t=[];this.neighbourhood.forEach((function(e){"external"!==e.location&&t.push(e.getSpeech())}));var e=this.getMessage();return this.speech=this.getDiagram().translate(e)+" "+t.join(" "),this.speech},e.prototype.getDrawnElements=function(){if(this.drawnElements)return this.drawnElements;this.drawnElements=[];var t=this.getDrawnElement();t&&this.drawnElements.push(t);for(var e=this.getAnnotation().querySelectorAll("component *"),n=0;n=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AtomSet=void 0;var c=n(422),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.getDrawnElements=function(){var t,e,n=this;if(this.drawnElements)return this.drawnElements;this.drawnElements=[];var o={},r=function(t){o[t.id]||(o[t.id]=!0,n.drawnElements.push(t))},a=this.getDrawnElement();a&&r(a);try{for(var s=i(this.getDown()),l=s.next();!l.done;l=s.next()){(h=l.value).getDrawnElements().forEach(r),(a=h.getDrawnElement())&&r(a)}}catch(e){t={error:e}}finally{try{l&&!l.done&&(e=s.return)&&e.call(s)}finally{if(t)throw t.error}}for(var u=this.getAnnotation().querySelectorAll("component bond,passive"),p=0;p atom,active"),e=0,n=void 0;n=t[e];e++){var o=this.getDiagram().get((0,i.getTextContent)(n));o&&this.ends.push(o)}},e}(n(41).NeighbourHood);e.Bond=c},903:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.ChemObj=void 0;var r=n(422),i=["circular"],c=function(){function t(t,e){var n,c;this.annotation_=t,this.diagram_=e,this.drawnElements=null,this.attributes=new Map,this.up=null,this.down=[],this.link=!1,this.drawn_=null,this.id_=this.getId_(),this.parent_=this.getParent_(),this.position=this.getPosition_();try{for(var a=o(i),s=a.next();!s.done;s=a.next()){var l=s.value,u=r.getAttribute(t,l);u&&this.attributes.set(l,u)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(c=a.return)&&c.call(a)}finally{if(n)throw n.error}}}return t.prototype.getAnnotation=function(){return this.annotation_},t.prototype.getDiagram=function(){return this.diagram_},t.prototype.getId=function(){return this.id_},t.prototype.setDrawnElement=function(t){this.drawn_=t},t.prototype.getDrawnElement=function(){return this.drawn_},t.prototype.getDrawnElements=function(){return this.drawnElements||(this.drawnElements=[],this.drawn_&&this.drawnElements.push(this.drawn_)),this.drawnElements},t.prototype.complete=function(){if(this.down.length&&this.down.sort((function(t,e){return!t.position&&e.position?1:t.position-e.position})),this.parent_){var t=this.getDiagram().get(this.parent_);this.up=t,t.down.push(this)}},t.prototype.getParent=function(){return this.parent_},t.prototype.getKey=function(){return this.id_+this.parent_},t.prototype.getUp=function(){return this.up?[this.up]:[]},t.prototype.getDown=function(){return this.down},t.prototype.getRight=function(){if(!this.up)return[];var t=this.up.getDown(),e=t.indexOf(this);if(t.length>e+1){var n=t[e+1];return n.position?[n]:[]}return this.up.attributes.get("circular")?[t[0]]:[]},t.prototype.getLeft=function(){if(!this.up)return[];var t=this.up.getDown(),e=t.indexOf(this);if(e>0){var n=t[e-1];return n.position?[n]:[]}return this.up.attributes.get("circular")?[t[t.length-1]]:[]},t.prototype.getId_=function(){var t=this.getAnnotation().firstElementChild;return t?t.textContent:""},t.prototype.getParent_=function(){var t=this.getAnnotation().querySelector("parents > *");return t?r.getTextContent(t):""},t.prototype.getPosition_=function(){return parseInt(r.getTextContent(this.getAnnotation().querySelector("position")),10)},t}();e.ChemObj=c},183:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CML=void 0;var r=n(88),i=n(495),c=n(839),a=n(111),s=n(202),l=function(){function t(t){this.cmlDocument=t,this.root=null,this.map=new r.Diagram(i.Languages.createLanguages(t)),this.initMap_()}return t.prototype.getMap=function(){return this.map},t.prototype.getRootElement=function(){return this.root||(this.root=this.map.find((function(t){return!(t instanceof s.Bond||t.up)}))),this.root},t.prototype.initMap_=function(){var t,e,n=Array.from(this.cmlDocument.querySelectorAll("annotations > annotation"));try{for(var r=o(n),i=r.next();!i.done;i=r.next()){var l=i.value,u=l.firstElementChild;if(u){var p=void 0;switch(u.localName.toLowerCase()){case"atom":case"active":p=new c.Atom(l,this.map),this.map.set(p.getKey(),p);break;case"bond":case"passive":p=new s.Bond(l,this.map),this.map.set(p.getId(),p);break;case"atomset":case"grouped":p=new a.AtomSet(l,this.map),this.map.set(p.getId(),p)}}}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}this.map.forEach((function(t){return t.complete()}))},t}();e.CML=l},691:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Molecule=void 0;var o=n(422),r=n(183),i=function(){function t(t,e,n){this.node=t,this.svg=e,this.cml=n,this.id=o.getId(),o.classList.add(this.svg,this.id),o.classList.add(this.cml,this.id),this.cmlStructure=new r.CML(this.cml),this.topLevelDescription=this.cmlStructure.getRootElement().getSpeech(),this.combine_()}return t.prototype.createElement=function(t){var e=document.createElement(t);return e.classList.add(this.id),e},t.prototype.combine_=function(){var t=this;this.cmlStructure.getMap().forEach((function(e){var n=t.svg.getElementById(e.getId());n&&e.setDrawnElement(n)}))},t}();e.Molecule=i},171:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Neighbour=void 0;var o=n(422),r=n(122),i=function(){function t(t,e){var n=this;this.from_=t,this.annotation_=e,this.speech=null,this.speech2=null;var i=o.children(this.annotation_);this.to_=this.from_.getDiagram().get(o.getTextContent(i[0])),this.location=o.getAttribute(this.annotation_,o.attr.LOCATION),this.via_=i.slice(1).map((function(t){return new r.Via(n,t)}))}return t.prototype.from=function(){return this.from_},t.prototype.to=function(){return this.to_},t.prototype.via=function(){return this.via_},t.prototype.getSpeech=function(){return this.from_.getDiagram().translate(this.getMessage())},t.prototype.getMessage=function(){if(o.EXPERT_MODE){if(this.speech2)return this.speech2;if(this.speech2=o.getAttribute(this.annotation_,o.attr.EXPERT_SPEECH),this.speech2)return this.speech2}return this.speech||(this.speech=o.getAttribute(this.annotation_,o.attr.SIMPLE_SPEECH)),this.speech},t}();e.Neighbour=i},41:function(t,e,n){var o,r=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},o(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.NeighbourHood=void 0;var i=n(422),c=n(903),a=n(171),s=function(t){function e(e,n){var o=t.call(this,e,n)||this;return o.neighbourhood=[],o}return r(e,t),e.prototype.complete=function(){t.prototype.complete.call(this);for(var e=this.getAnnotation().querySelectorAll("neighbours neighbour"),n=0,o=void 0;o=e[n];n++)this.neighbourhood.push(new a.Neighbour(this,o))},e.prototype.getSpeech=function(){return this.getDiagram().translate(this.getMessage())},e.prototype.getMessage=function(){var t=i.getAttribute(this.getAnnotation(),i.attr.EXPERT_SPEECH),e=i.getAttribute(this.getAnnotation(),i.attr.SIMPLE_SPEECH);return i.EXPERT_MODE?t||e:e||t},e.prototype.getNeighbours=function(){return this.neighbourhood},e}(c.ChemObj);e.NeighbourHood=s},122:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Via=void 0;var o=n(422),r=function(){function t(t,e){this.neighbour_=t,this.annotation_=e,this.type_=o.getAttribute(this.annotation_,o.attr.TYPE);var n=o.children(this.annotation_);this.connectedBy_=this.getConnectedBy_(n[0]),"Connecting bond"===this.type_&&"external"===this.neighbour_.location&&(this.neighbour_.from().link=!0),void 0!==this.connectedBy_&&(this.connectedBy_.link=!0),this.position_=parseInt(o.getTextContent(n[1]),10)}return t.prototype.getDrawnElements=function(){return this.connectedBy_.getDrawnElements()||[]},t.prototype.getType=function(){return this.type_||""},t.prototype.getPosition=function(){return this.position_},t.prototype.getConnectedBy_=function(t){var e=this.neighbour_.from().getDiagram(),n=o.getTextContent(t),r=e.get(n);return r||e.get(n+this.neighbour_.from().getId())},t}();e.Via=r},394:function(t,e,n){var o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],o=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.Sonify=void 0;var r=n(422),i=function(){function t(t){this.path=[],this.points=[],this.context=new AudioContext,this.prepare(t),this.sonifiable=this.path.length}return t.sonify=function(e){var n=e.getAnnotation().querySelectorAll("sonification > *"),o=[];n.length&&(o=Array.from(n).map((function(t){var n=(0,r.getTextContent)(t),o=t.tagName.toLowerCase(),i=n+("active"!==o&&"sre:active"!==o?"":n===e.getId()?e.getParent():e.getId());return e.getDiagram().get(i)})));var i=new t(o);return i.sonifiable?i.sonify():[]},t.prototype.prepare=function(t){var e,n;try{for(var r=o(t),i=r.next();!i.done;i=r.next()){var c=i.value;if(c.getDrawnElement()){for(var a=c.getDrawnElement().querySelectorAll("polyline"),s=0;s20?(r=n/10+.01,i=n/10+.1):(r=n/2+.01,i=n/2+.5),o.start(this.context.currentTime+r),o.stop(this.context.currentTime+i)}return e},t.prototype.sonify=function(){var e,n,o=[],r=this.context.createOscillator();o.push(r),r.type="sine",r.connect(this.context.destination);for(var i=0;i20?(e=i/10+.01,n=i/10):(e=i/2+.01,n=i/2+.5),console.log(e),i?r.frequency.setValueAtTime(this.points[i][1]?t.BASE_FREQUENCY-this.points[i][1]:0,this.context.currentTime+n):(r.frequency.setValueAtTime(t.BASE_FREQUENCY-this.points[i][1],this.context.currentTime),r.start(this.context.currentTime));return r.stop(this.context.currentTime+n),o},t.prototype.smooth=function(){if(this.points.length){for(var e=[this.points[0]],n=0;n{var t=o;Object.defineProperty(t,"__esModule",{value:!0}),t.version=t.Config=t.Base=void 0;var e=n(807),r=n(23);t.Base=r.Base,t.Config=e.config,t.version=e.version})(),o})()})); \ No newline at end of file diff --git a/slides/_static/pretext/js/edit.js b/slides/_static/pretext/js/edit.js deleted file mode 100755 index 1d7a66a..0000000 --- a/slides/_static/pretext/js/edit.js +++ /dev/null @@ -1,4988 +0,0 @@ - -editorLog = console.log; -// editorLog = function(){}; -debugLog = function(){}; -// debugLog = console.log; -//parseLog = function(){}; -parseLog = console.log; -errorLog = console.log; - -/* the structure of each object, and its realization as PreTeXt source or in HTML, - is recorded in the objectStructure dictionary. - -{"xml:id": new_id, "sourcetag": new_tag, "parent": parent_description, "title": ""} - -In pretext, pieces are of the form ["piecename", "tag"], while -in source, pieces are of the form ["piecename", "required_component"], while - -*/ - -editing_mode = 0; - -current_page = location.host+location.pathname; -debugLog("current_page", current_page); -chosen_edit_option_key = "edit_option".concat(current_page); -chosen_edit_option = readCookie(chosen_edit_option_key) || ""; -editing_mode = chosen_edit_option; /* delete one of those variables */ -debugLog("chosen_edit_option", chosen_edit_option, "chosen_edit_option", chosen_edit_option > 0); - - -objectStructure = { - "type": { - "html": { - "tag": "span", - "attributes": ['class="type"', 'data-parent_id="<&>xml:id<;>"', 'data-editable="70XX"', 'tabindex="-1"'], - "pieces": [["(capitalize,sourcetag)", ""]] - } - }, - "type-child": { - "html": { - "tag": "span", - "attributes": ['class="type"', 'data-editable="70YY"', 'tabindex="-1"'], - "pieces": [["(capitalize,sourcetag)", ""]] - // "pieces": [["(capitalize,type-contained)", ""]] - } - }, - "type-proof": { - "html": { - "tag": "span", - "attributes": ['class="type"', 'data-editable="70YY"', 'tabindex="-1"'], - "pieces": [["(literal,Proof)", ""]] - // "pieces": [["(capitalize,type-contained)", ""]] - } - }, - "sectiontype": { - "html": { - "tag": "span", - "attributes": ['class="type"'], // the type of a section is not editable? - "pieces": [["(capitalize,sourcetag)", ""]] - } - }, - "codenumber": { - "html": { - "tag": "span", - "attributes": ['class="codenumber"'], - "pieces": [["(codenumber,)", ""]] // maybe () was a bad idea? do we need a triple? - } - }, - "period": { - "html": { - "tag": "span", - "attributes": ['class="period"'], - "pieces": [["(period,)", ""]] - } - }, - "comma": { // used in bibliography - "html": { - "tag": "span", - "attributes": ['class="comma"'], - "pieces": [["(comma,)", ""]] - } - }, - "titleperiod": { - "html": { - "tag": "span", - "attributes": ['class="period"'], - "pieces": [["(titleperiod,)", ""]] - } - }, - "space": { - "html": { - "tag": "span", - "attributes": ['class="space"'], - "pieces": [["(space,)", ""]] - } - }, - "title": { - "html": { - "tag": "span", - "attributes": ['class="title"', 'data-editable="70"', 'tabindex="-1"'], - "pieces": [["title", ""]] - } - }, - "nbsp": { - "html": { - "tag": "", - "pieces": [["(literal, )", ""]], - }, - "pretext": { - "tag": "nbsp", - "pieces": [] - }, - "source": { - "pieces": [] - } - }, - "idx": { - "html": { - "tag": "", - "pieces": [], - }, - "pretext": { - "tag": "idx", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "h": { - "html": { - "tag": "", - "pieces": [], - }, - "pretext": { - "tag": "h", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "theorem_like_heading": { - "html": { - "tag": "h4", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{type}", ""], ["{space}", ""], ["{codenumber}", ""], ["{period}", ""], ["{space}", ""], ["{title}", ""], ["{titleperiod}", ""]] - // * means editable piece - } - }, - "proof_like_heading": { - "html": { - "tag": "h5", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'xml:id="<&>xml:id<;>"'], - "pieces": [["{type-child}", ""], ["{period}", ""]] - } - }, - "proof_heading": { - "html": { - "tag": "h5", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'xml:id="<&>xml:id<;>"'], - "pieces": [["{type-proof}", ""], ["{period}", ""]] - } - }, - "section_like_heading": { - "html": { - "tag": "h2", - "cssclass": "heading hide-type", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{sectiontype}", ""], ["{codenumber}", ""], ["{space}", ""], ["{title}", ""]] - } - }, - "title_heading": { - "html": { - "tag": "h2", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{title}", ""], ["{period}", ""]] - } - }, - "task_like_heading": { - "html": { - "tag": "h6", - "cssclass": "heading", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{codenumber}", ""], ["{space}", ""], ["{title}", ""]] - } - }, - "caption_like_heading": { - "html": { - "tag": "h5", - "cssclass": "captionheading", - "attributes": ['class="<&>{cssclass}<;>"', 'data-parent_id="<&>xml:id<;>"'], - "pieces": [["{type}", ""], ["{space}", ""], ["{codenumber}", ""], ["{period}", ""], ["{space}", ""]] - } - }, - "xref": { - "html": { - "tag": "span", - "attributes": ['class="ref tmp"', 'id="<&>xml:id<;>"', 'ref="<&>ref<;>"'], - "pieces": [["(literal,REFERENCE)", ""]], - }, - "pretext": { - "tag": "xref", - "attributes": ['ref="<&>ref<;>"', 'text="<&>text<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]], - "attributes": [["ref", "*"], ["text", ""],["detail",""],["first",""],["last",""]] - } - }, - "introduction": { - "html": { - "tag": "section", - "attributes": ['class="introduction"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["content", ""]], - }, - "pretext": { - "tag": "introduction", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "conclusion": { - "html": { - "tag": "section", - "attributes": ['class="conclusion"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{proof_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "conclusion", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - - "worksheet": { - "html": { - "tag": "section", - "attributes": ['class="worksheet"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "worksheet", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "section": { - "html": { - "tag": "section", - "attributes": ['class="section"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "section", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "subsection": { - "html": { - "tag": "section", - "attributes": ['class="subsection"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "subsection", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "paragraphs": { - "html": { - "tag": "section", - "attributes": ['class="paragraphs"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{title_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "paragraphs", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "exercises": { - "html": { - "tag": "section", - "attributes": ['class="exercises"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "exercises", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - "exercisegroup": { - "html": { - "tag": "section", - "attributes": ['class="exercisegroup"', 'id="<&>xml:id<;>"', 'data-editable="XYX"', 'tabindex="-1"'], - "pieces": [["{section_like_heading}", ""], ["content", ""]], - }, - "pretext": { - "tag": "exercisegroup", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", "*"], ["content", "p"]] - } - }, - - - "page": { - "html": { - "tag": "section", - "attributes": ['class="onepage"', 'id="<&>xml:id<;>"', 'data-editable="PPP"', 'tabindex="-1"'], - "pieces": [["content", ""]], - }, - "pretext": { - "tag": "page", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - "objectives": { - "html": { - "tag": "article", - "cssclass": "objectives", - "pieces": [["{proof_like_heading}", ""], ["content",""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "data_editable": "160" - }, - "pretext": { - "tag": "objectives", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - - - - "p": { - "html": { - "tag": "p", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "99" - }, - "pretext": { - "tag": "p", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, -/* probably there is a better way to do it, but we have separate elements for p - that occur in - text // ip - math - text // mp - math - text // mp - math - text // fp -*/ - "ip": { - "html": { - "tag": "p", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "99" - }, - "pretext": { - "tag_opening": "\n\n'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "mp": { - "html": { - "tag": "p", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="mp"'], - "data_editable": "99" - }, - "pretext": { - "tag_opening": "", - "tag_closing": "", - "attributes": [], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "fp": { - "html": { - "tag": "p", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="fp"'], - "data_editable": "99" - }, - "pretext": { - "tag_opening": "", - "tag_closing": "\n

    \n", - "attributes": [], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "li": { - "html": { - "tag": "li", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"'], - "data_editable": "98aZ" - }, - "pretext": { - "tag": "li", - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["title", ""], ["content", "p"]] - } - }, - - "blockquote": { - "html": { - "tag": "blockquote", - "pieces": [["content", ""], ["attribution", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "cssclass": "blockquote", - "data_editable": "44?" - }, - "pretext": { - "tag": "blockquote", - "pieces": [["content", ""], ["attribution", "attribution"]], - }, - "source": { - "pieces": [["content", "p"], ["attribution", ""]] // attribution can contain a "line". come back to that - } - }, - - "list": { - "html": { - "tag": "ol", - "pieces": [["content", ""]], - "attributes": ['id="<&>xml:id<;>"', 'list-style-type="a"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "AAA" - }, - "pretext": { - "tag": "ol", - "pieces": [["content", ""]], - "attributes": ['label="A"'] - }, - "source": { - "pieces": [["title", ""], ["content", "li"]], - "attributes": [["label", "A"]] - } - }, - - "figure": { - "html": { - "tag": "figure", - "pieces": [["content",""],["{caption}", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "data_editable": "32", - "cssclass": "figure figure-like" - }, - "pretext": { - "tag": "figure", - "pieces": [["content"], ["{caption}"]], - "attributes": ['xml:id="<&>xml:id<;>"'] - }, - "source": { - "pieces": [["content", ""], ["captiontext", ""]], - "attributes": [] - } - }, - - "image": { - "html": { - "tag": "div", - "pieces": [["{bareimage}",""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"', 'style="width: <&>width<;>%; margin-right: <&>marginright<;>%; margin-left: <&>marginleft<;>%"'], - "data_editable": "31", - "cssclass": "image-box" - }, - "pretext": { - "tag": "image", - "pieces": [], - "attributes": ['xml:id="<&>xml:id<;>"', 'source="<&>source<;>"', 'alt="<&>alt<;>"', 'width="<&>width<;>%"', 'margins="<&>marginleft<;>% <&>marginright<;>%"'] - }, - "source": { - "pieces": [["",""]], - "attributes": [["source", ""], ["width", "40"], ["marginleft", "20"], ["marginright", "40"], ["alt", ""]] - } - }, - - "bareimage": { - "html": { - "tag": "img", - "pieces": [], - "attributes": ['src="<&>source<;>"', 'alt="<&>alt<;>"', 'class="contained"'], - } - }, - - "sidebyside": { - "html": { - "tag": "div", - "pieces": [["{sbsrow}",""]], - "attributes": ['id="<&>xml:id<;>"', 'class="<&>{cssclass}<;>"'], - "cssclass": "sidebyside" - }, - "pretext": { - "tag": "sidebyside", - "pieces": [["content", ""]], - "attributes": ['xml:id="<&>xml:id<;>"', 'margins="<&>marginleft<;>% <&>marginright<;>%"', 'width="<&>(percentlist,widths)<;>"'], - }, - "source": { - "pieces": [["content",""]], - "attributes": [["marginleft", ""], ["marginright", ""], ["widths", ""]] - } - }, - "sbsrow": { - "html": { - "tag": "div", - "pieces": [["content",""]], // ???? - "attributes": ['class="<&>{cssclass}<;>"', 'style="margin-right: <&>marginright<;>%; margin-left: <&>marginleft<;>%"'], - "data_editable": "89", - "cssclass": "sbsrow" - }, - "pretext": { - "tag": "", - "pieces": [["content",""]], - "attributes": [] - }, - "source": { - "pieces": [["content",""]], - "attributes": [["marginleft", "20"], ["marginright", "40"]] - } - }, - "sbspanel": { - "html": { - "tag": "div", - "pieces": [["content",""]], - "attributes": ['id="<&>xml:id<;>"', 'class="<&>{cssclass}<;>"', 'style="width:<&>(nthitem,widths)<;>%"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "90", - "cssclass": "sbspanel" - }, - "pretext": { - "tag": "stack", - "pieces": [["content", ""]], - "attributes": ['xml:id="<&>xml:id<;>"'] - }, - "source": { - "pieces": [["content",""]] - } - }, - - "proof": { - "html": { - "tag": "article", - "cssclass": "proof", - "pieces": [["{proof_heading}", ""], ["proof",""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "data_editable": "60" - }, - "pretext": { - "tag": "proof", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["proof", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - "proof-standalone": { - "html": { - "tag": "article", - "cssclass": "proof", - "pieces": [["{XXXXXnorbeingusedXXXXXXX_proof_heading}", ""], ["content",""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "data_editable": "60" - }, - "pretext": { - "tag": "proof", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - - "caption": { - "html": { - "tag": "figcaption", - "data_editable": "321", - // "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "attributes": ['id="<&>xml:id<;>"'], - "pieces": [["{caption_like_heading}", ""], ["{captiontext}",""]] - // "pieces": [["(literal, caption goes here)",""]] - }, - "pretext": { - "tag": "caption", - "attributes": [], - "pieces": [["captiontext", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "captiontext": { /* not used */ - "html": { - "tag": "p", - "data_editable": "321", - // "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], -// do it like editabe title? - "attributes": ['data-source_id="<&>xml:id<;>"', 'data-component="caption"', 'class="caption"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "pieces": [["captiontext",""]] - }, - "pretext": { - "tag": "", - "attributes": [], - "pieces": [["captiontext", ""]] - }, - "source": { - "pieces": [["captiontext", ""]] - } - }, - - "references": { - "html": { - "tag": "article", - "cssclass": "bib", - "data_editable": "33", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{section_like_heading}", ""], ["content",""]] - }, - "pretext": { - "tag": "references", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", ""], ["content",""]] - }, - "source": { - "pieces": [["title", ""], ["content",""]] - } - }, - -/* biblio, the items directly following it, and the refrences above, - are not usable at this time. references have to be handled in - a text editor. 3 Dec 2021 -*/ - "biblio": { - "html": { - "tag": "div", - "cssclass": "bibentry", - "data_editable": "333", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{bib-title}", ""], ["{journal}",""], ["{volume}",""], ["{number}",""], ["{author}",""], ["{pages}",""]] - }, - "pretext": { - "tag": "biblio", - "attributes": ['xml:id="<&>xml:id<;>"', 'type="raw"'], - "pieces": [["title", ""], ["journal",""], ["volume",""], ["number",""], ["author",""], ["pages",""]] - }, - "source": { - "pieces": [["title", ""], ["journal",""], ["volume",""], ["number",""], ["author",""], ["pages",""]] - } - }, - - "bib-title": { - "html": { - "tag": "i", - "pieces": [["title", "zz"]] - } - }, - "author": { - "html": { - "tag": "", - "pieces": [["author", ""], ["{comma}", ""]] - } - }, - "journal": { - "html": { - "tag": "", - "pieces": [["journal", ""]] - } - }, - "volume": { - "html": { - "tag": "b", - "pieces": [["volume", ""]] - } - }, - "pages": { - "html": { - "tag": "jjj", - "pieces": [["pages", ""]] - } - }, - "number": { - "html": { - "tag_opening": "no. ", - "tag_closing": " ", - "pieces": [["number", ""]] - } - }, - - "remark-like": { - "html": { - "tag": "article", - "cssclass": "remark-like", - "data_editable": "92", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{theorem_like_heading}", ""], ["statement",""]] - }, - "pretext": { - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["statement", "statement"]] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"]] - } - }, - - "project-like-tasks": { - "html": { - "tag": "article", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "cssclass": "project-like", - "data_editable": "194", - "pieces": [["{theorem_like_heading}", ""], ["content",""], ["tasks", ""]] - }, - "pretext": { - "tag": "sourcetag", - "pieces": [["title", "title"], ["content", ""], ["tasks", ""]], - "attributes": ['xml:id="<&>xml:id<;>"'] - }, - "source": { - "pieces": [["title", ""], ["content", "p"], ["tasks", ""]] - // "attributes": [["workspace", "0"]] - } - }, - "project-like": { - "html": { - "tag": "article", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "cssclass": "project-like", - "data_editable": "94", - "pieces": [["{theorem_like_heading}", ""], ["statement",""], ["%hint%", "hint"], ["%answer%", "answer"], ["%solution%", "solution"], ["{workspace}", ""]] - }, - "pretext": { - "tag": "sourcetag", - "pieces": [["title", "title"], ["statement", "statement"], ["hint", "hint"], ["answer", "answer"], ["solution", "solution"]], - "attributes": ['xml:id="<&>xml:id<;>"', 'workspace="<&>workspace<;>"'] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"], ["hint", ""], ["answer", ""], ["solution", ""]], - "attributes": [["workspace", "0"]] - } - }, - - "definition-like": { - "html": { - "tag": "article", - "cssclass": "definition-like", - "data_editable": "95a", - "pieces": [["{theorem_like_heading}", ""], ["statement", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'] - }, - "pretext": { - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["statement", "statement"]] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"]] - } - }, - - "theorem-like": { - "html": { - "tag": "article", - "cssclass": "theorem-like", - "data_editable": "93", - "pieces": [["{theorem_like_heading}", ""], ["statement", ""], ["{proof}", ""]], - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'] - }, - "pretext": { - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["statement", "statement"], ["{proof}", ""]] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"], ["proof", ""]] - } - }, - - "task": { - "html": { - "tag": "article", - "cssclass": "exercise-like task", - "data_editable": "94ZZZA", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{task_like_heading}", ""], ["statement",""], ["%hint%", "hint"], ["%answer%", "answer"], ["%solution%", "solution"], ["{workspace}", ""]] - }, - "pretext": { - "tag": "task", - "pieces": [["title", "title"], ["statement", "statement"], ["hint", ""], ["answer", ""], ["solution", ""]], - "attributes": ['workspace="<&>workspace<;>"'] - }, - "source": { - "pieces": [["title", ""], ["statement", "p"], ["hint", ""], ["answer", ""], ["solution", ""]], - "attributes": [["workspace", "0"]] - } - }, - -/* consolidate H/A/S */ - "hint": { - "html": { - "tag": "article", - "cssclass": "solution-like hint", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{proof_like_heading}", ""], ["content",""]], -// go back and make the lack of data_editable automatically make the contained p editable -/* "data_editable": "454", */ - "data_editable": "hhhh" - }, - "pretext": { - "tag": "hint", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - "answer": { - "html": { - "tag": "article", - "cssclass": "solution-like answer", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{proof_like_heading}", ""], ["content",""]], -// go back and make the lack of data_editable automatically make the contained p editable -/* "data_editable": "454", */ - "data_editable": "hhhh" - }, - "pretext": { - "tag": "answer", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - "solution": { - "html": { - "tag": "article", - "cssclass": "solution-like solution", - "attributes": ['id="<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [["{proof_like_heading}", ""], ["content",""]], -// go back and make the lack of data_editable automatically make the contained p editable -/* "data_editable": "454", */ - "data_editable": "hhhh" - }, - "pretext": { - "tag": "solution", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["title", "title"], ["content", ""]] - }, - "source": { - "pieces": [["content", "p"]] - } - }, - - "workspace": { - "html": { - "tag": "div", - "cssclass": "workspace", - "data_editable": "WwW", - "attributes": ['data-parent_id="<&>xml:id<;>"', 'data-space="<&>workspace<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"', 'class="<&>{cssclass}<;>"'], - "pieces": [] - } - }, - - "term": { // need to mark it as inline - "html": { - "tag": "dfn", - "attributes": ['id="<&>xml:id<;>"', 'class="terminology"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "ttt", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "term", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "em": { // need to mark it as inline - "html": { - "tag": "em", - "attributes": ['id="<&>xml:id<;>"', 'class="emphasis"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "eemm", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "em", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "fn": { // need to mark it as inline - "html": { - "tag": "a", - "attributes": ['id="<&>xml:id<;>"', 'class="id-ref fn-knowl original"', 'data-knowl=" "', 'href=" "', 'data-refid="hk-<&>xml:id<;>"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "fnfnfn", -// "pieces": [["content", "sup"]] - "pieces": [["(literal,footnote)", "sup"]] - }, - "pretext": { - "tag": "fn", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "alert": { // need to mark it as inline - "html": { - "tag": "em", - "attributes": ['id="<&>xml:id<;>"', 'class="alert"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "aall", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "alert", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "init": { // need to mark it as inline - "html": { - "tag": "abbr", - "attributes": ['id="<&>xml:id<;>"', 'class="initialism"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "iinniitt", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "init", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "c": { // need to mark it as inline - "html": { - "tag": "code", - "attributes": ['id="<&>xml:id<;>"', 'class="code-inline tex2jax_ignore"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "ccoo", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "c", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "ellipsis": { // need to mark it as inline - "html": { - "tag": "span", - "attributes": ['id="<&>xml:id<;>"', 'class="abbrev"', 'contenteditable="false"'], - "data_editable": "abbr", - "pieces": [["(literal,…)", ""]] - }, - "pretext": { - "tag": "ellipsis", - "pieces": [] - }, - "source": { - } - }, - "etc": { // need to mark it as inline - "html": { - "tag": "span", - "attributes": ['id="<&>xml:id<;>"', 'class="abbrev"', 'contenteditable="false"'], - "pieces": [["(literal,etc)", ""]] - }, - "pretext": { - "tag": "etc", - "pieces": [] - }, - "source": { - } - }, - - "q": { // need to mark it as inline - "html": { - "tag": "q", - "attributes": ['id="<&>xml:id<;>"', 'class="quote"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "qqq", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "q", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "m": { // need to mark it as inline - "html": { - "tag_opening": "\\(", - "tag_closing": "\\)", - // "tag": "script", - // "attributes": ['type="math/tex"'], - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "m", - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - - "me": { - "html": { - "tag": "div", - "attributes": ['id="<&>xml:id<;>"', 'class="displaymath process-math"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "42", - "pieces": [["{me_raw}", ""]] - }, - "pretext": { - "tag": "me", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "men": { - "html": { - "tag": "div", - "attributes": ['id="<&>xml:id<;>"', 'class="displaymath process-math"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "42", - "pieces": [["{me_raw}", ""]] - }, - "pretext": { - "tag": "men", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "md": { - "html": { - "tag": "div", - "attributes": ['id="<&>xml:id<;>"', 'class="displaymath process-math"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "42", - "pieces": [["{md_raw}", ""]] - }, - "pretext": { - "tag": "md", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "mdn": { - "html": { - "tag": "div", - "attributes": ['id="<&>xml:id<;>"', 'class="displaymath process-math"', 'data-editable="<&>{data_editable}<;>"', 'tabindex="-1"'], - "data_editable": "42", - "pieces": [["{me_raw}", ""]] - }, - "pretext": { - "tag": "mdn", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - }, - "me_raw": { - "html": { - "tag_opening": "\\begin{equation*}", - "tag_closing": "\\end{equation*}", - "pieces": [["content", ""]] - } - }, - "md_raw": { - "html": { - "tag_opening": "\\begin{align*}", - "tag_closing": "\\end{align*}", - "pieces": [["content", ""]] - } - }, -// check if mrow is actually used - "mrow": { - "html": { - "tag_opening": "", - "tag_closing": "\\cr", - "data_editable": "422", - "pieces": [["content", ""]] - }, - "pretext": { - "tag": "mrow", - "attributes": ['xml:id="<&>xml:id<;>"'], - "pieces": [["content", ""]] - }, - "source": { - "pieces": [["content", ""]] - } - } - -} - -var environment_instances = { - "definition-like": ["definition", "conjecture", "axiom", "principle", "heuristic", "hypothesis", "assumption"], - "theorem-like": ["lemma", "proposition", "theorem", "corollary", "claim", "fact", "identity", "algorithm"], - "remark-like": ["remark", "warning", "note", "observation", "convention", "insight"], - "project-like-tasks": ["investigation", "exploration", "project"], - "project-like": ["exercise", "activity"] -} - -for (const [owner, instances] of Object.entries(environment_instances)) { - var data_editable_base = objectStructure[owner].html.data_editable; - var cssclass_base = objectStructure[owner].html.cssclass; - var source_pieces = objectStructure[owner].source.pieces; - var pretext_pieces = objectStructure[owner].pretext.pieces; - var pretext_attributes = (objectStructure[owner].pretext.attributes || []); - var source_attributes = (objectStructure[owner].source.attributes || []); - for (var j=0; j < instances.length; ++j) { - var this_tag = instances[j]; - objectStructure[this_tag] = { - "owner": owner, - "html": { - "tag": objectStructure[owner].html.tag, - "pieces": objectStructure[owner].html.pieces, - "attributes": objectStructure[owner].html.attributes, - "cssclass": cssclass_base + " " + this_tag, - "data_editable": data_editable_base + j.toString(), - "heading": objectStructure[owner].html.heading - }, - "pretext": { - "tag": this_tag, - "pieces": pretext_pieces, - "attributes": pretext_attributes - }, - "source": { - "tag": this_tag, - "pieces": source_pieces, - "attributes": source_attributes - } - } - } -} - -editorLog('objectStructure["exercise"]', objectStructure["exercise"]); - -var sidebyside_instances = { -"sbs": [["2 panels", "sbs2"], ["3 panels", "sbs3"], ["4 panels", "sbs4"]], -//"sbs2": [["full across XX", "sbs2_0_50_50_0"], ["gap but no margin", "sbs2_0_40_40_0"], ["spaced equally", "sbs2_5_40_40_5"]], -"sbs2": [["full across", "sbs_0_50_50_0"], ["gap but no margin", "sbs_0_45_45_0"], ["spaced equally", "sbs_5_40_40_5"]], -"sbs3": [["full across", "sbs_0_34_32_34_0"], ["gap but no margin", "sbs_0_28_28_38_0"], ["spaced equally", "sbs_5_25_26_25_5"]], -"sbs4": [["full across", "sbs_0_25_25_25_25_0"], ["gap but no margin", "sbs_0_20_20_20_20_0"], ["spaced equally", "sbs_3_18_18_18_18_3"]] -} - -Object.assign(objectStructure, sidebyside_instances); - -// shoudl we distinguish empty tags by format? -var always_empty_tags = ["img", "image", "xref"]; -// eventially xref will move to allowed_empty_tags -var allowed_empty_tags = ["div", "span", "p", "stack"]; -var tag_display = { /* the default is "block" */ - "inline": ["m", "em", "ellipsis", "span", "term", "dfn", "q", "c", "code", "alert", "nbsp", "xref", "idx", "h", "init"], - "title": ["title", "idx", "h1", "h2", "h3", "h4", "h5", "h6", "div", "usage", "image"], - "block-tight": [] // ["mp", "mrow"] -} - -inline_tags = tag_display["inline"]; -inline_math = ["m"]; -inline_abbrev = ["ellipsis", "ie", "eg", "etc"]; - -// contained_objects are a componnet of another object, not just buried in content -var contained_objects =["title", "statement", "caption", "captiontext", "proof", - "author", "journal", "volume", "number", "pages"]; - -function tag_type(tag) { - var this_type; - - if (["p", "ip", "mp", "fp"].includes(tag)) { this_type = "p" } - else if (["me", "men", "md", "mdn"].includes(tag)) { this_type = "md" } - else { this_type = tag } - - return this_type -} - -function process_value_from_source(fcn, piece, src) { - - editorLog(fcn, "process_value_from_source", piece, "in", src); - var content_raw = ""; - if (["literal", "codenumber", "period", "titleperiod", "space"].includes(fcn)) { - content_raw = piece; - } else { - if (piece in src) { - content_raw = src[piece] - } else { - if ("parent" in src) { - var parent_src = internalSource[src["parent"][0]]; - if (piece in parent_src) { - content_raw = parent_src[piece] - } else { - errorLog("Error: piece", piece, "fcn", fcn, "from", parent_src, "not in src or parent_src") - } - } else { - errorLog("at the top, or else there is an error") - } - } - } /* fcn != literal */ - -/* - if (typeof myVar == 'string') { - content_raw = content_raw.replace(/-standalone$/, "") // hack because we need alternate to sourcetag - } -*/ - if (fcn == "capitalize") { - content = content_raw.charAt(0).toUpperCase() + content_raw.slice(1); - } else if (fcn == "literal") { - editorLog("literally", piece); - // alert(piece); - content = piece - } else if (fcn == "space") { - content = content_raw + " " - } else if (fcn == "period") { - content = content_raw + "." - } else if (fcn == "comma") { - content = content_raw + "," - } else if (fcn == "titleperiod") { - if (src.title && !(/[!?]$/.test(src.title))) { - content = content_raw + "." - } - } else if (fcn == "percentlist") { - if (content_raw) { - content = content_raw.join("% ") + "%" - } else { - content = "MISSING" + "%" - } - } else if (fcn == "nthitem") { - - editorLog("calculating nthitem", piece, "from ", content_raw, "within", src); - var item_index = 0; // need to be its location among siblings - content = content_raw[item_index]; - } else if (fcn == "codenumber") { - editorLog(" CODENUMBER", src); - content = internalSource.root_data.number_base; - if (src["xml:id"] == top_level_id) { - // no need to add locan number - } else { - content += ".N" - } - } else { - content = content_raw - } - - return content -} - -$(".autopermalink > a").attr("tabindex", -1); - -var editable_objects = [["p", 99], ["ol", 97], ["ul", 96], ["article", 95], ["blockquote", 80], ["section", 66], - ["title", 20], ["caption", 890]]; -for(var j=0; j < editable_objects.length; ++j) { - $(editable_objects[j][0]).attr("data-editable", editable_objects[j][1]); - $(editable_objects[j][0]).attr("tabindex", -1); -} - -/* the code */ - -editorLog(" enabling edit"); - -user_level = "novice"; - -// we have to keep track of multiple consecutive carriage returns -this_char = ""; -prev_char = ""; -prev_prev_char = ""; - -// for resizing and layout changes -// clobal variables so we can adjust them dynamically -move_scale = 1; -magnify_scale = 1; - -final_added_object = ""; -previous_added_object = ""; - -// sometimes we have to prevent Tab from changing focus -this_focused_element = ""; -prev_focused_element = ""; -prev_prev_focused_element = ""; - -var menu_neutral_background = "#ddb"; -var menu_active_background = "#fdd"; - -var recent_editing_actions = []; // we unshift to this, so most recent edit is first. - // currently just a human-readable list -var ongoing_editing_actions = []; -var old_content = {}; // to hold old versions of changed materials - -// what will happen with internationalization? -var keyletters = ["KeyA", "KeyB", "KeyC", "KeyD", "KeyE", "KeyF", "KeyG", "KeyH", "KeyI", "KeyJ", "KeyK", "KeyL", "KeyM", "KeyN", "KeyO", "KeyP", "KeyQ", "KeyR", "KeyS", "KeyT", "KeyU", "KeyV", "KeyW", "KeyX", "KeyY", "KeyZ"]; - -var movement_location_options = []; -var movement_location = 0; -var first_move = true; // used when starting to move, because object no longer occupies its original location - -Storage.prototype.setObject = function(key, value) { -// this.setItem(key, JSON.stringify(value)); - this.setItem(key, JSON.stringify(value, function(key, val) { -// console.log("key", key, "value", value, "val", val); - return val.toFixed ? Number(val.toFixed(3)) : val; -})); -} - -Storage.prototype.getObject = function(key) { - var value = this.getItem(key); - return value && JSON.parse(value); -} - -function randomstring(len) { - if (!len) { len = 10 } - return "tMP" + (Math.random() + 1).toString(36).substring(2,len) -} - -function removeItemFromList(lis, value) { - var index = lis.indexOf(value); - if (index > -1) { - lis.splice(index, 1); - } - return lis; -} - -function rescale(width, max, margin_left, margin_right) { - var available_width = max - parseFloat(margin_left) - parseFloat(margin_right); - return width * 100 / available_width -} - -function spacemath_to_tex(text) { - thetext = text; - - thetext = thetext.replace(/ d([a-zA-Z])(\s|$)/, " \\,d$1$2"); - thetext = thetext.replace(/ *< */, " < "); - - return thetext -} - -function split_paragraphs(paragraph_content) { - - // does the textbox contain more than one paragraph? - var paragraph_content_list = paragraph_content.split("

    "); - editorLog("there were", paragraph_content_list.length, "paragraphs, but some may be empty"); - for (var j=0; j < paragraph_content_list.length; ++j) { - editorLog("paragraph", j, "begins", paragraph_content_list[j].substring(0,20)) - } - - var paragraph_content_list_trimmed = []; - - for (var j=0; j < paragraph_content_list.length; ++j) { - // probably each paragraph is wrapped in meaningless div tags - var this_paragraph_contents_raw = paragraph_content_list[j]; - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/<\/div>
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/
    /g, ""); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/<\/div>/g, ""); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/ /g, " "); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/ +
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.trim(); - if (!this_paragraph_contents_raw) { editorLog("empty paragraph") } - else { paragraph_content_list_trimmed.push(this_paragraph_contents_raw) } - editorLog("this_paragraph_contents_raw", this_paragraph_contents_raw); - } - - if (!paragraph_content_list_trimmed.length ) { - // empty, so insert it and delete it later - paragraph_content_list_trimmed = [""]; - } - - return paragraph_content_list_trimmed -} - -var submenu_options = { // revise as these are handled previously -"math-like": [["me"], ["chem"], ["code"]], -"image-like": [["image"], ["video"], ["audio"]], -"aside-like": [["aside"], ["historical"], ["biographical"]], -"list-like": [["itemized list", "list"], ["dictionary list", "dl"], ["table"]], -"layout-like": [["side-by-side panels", "sbs"], ["assemblage"], ["biographical aside"], ["titled paragraph", "paragraphs"]], -"section-like": ["section", "subsection", "paragraphs", "rq", "exercises"], -"sbs": [["2 panels", "sbs2"], ["3 panels", "sbs3"], ["4 panels", "sbs4"]], -"list-like": [["itemized list", "list"], ["dictionary list", "dl"], ["table"]], -"example-like": ["example", "question", "problem"] -} - -Object.assign(submenu_options, sidebyside_instances); - -Object.assign(submenu_options, environment_instances); // wrong because string not list - // or not wrong, if the code is more clever - -/* need to distinguish between the list of objects of a type, - and the list of types that can go in a location. - OR, is it okay that these are all in one list? - It seems to not be okay, because the "blockquote" entry - says that only a "p" can go in a blockquote. But blockquote - is an entry under "quoted". -*/ -base_menu_for = { -"section": [["paragraph", "p"], - ["display math/chemistry/code", "math-like", "c"], - ["list or table", "list-like"], - ["example-like", "example-like"], - ["definition-like", "definition-like"], - ["theorem-like", "theorem-like"], - ["remark-like"], - ["project/exercise-like", "project-like", "j"], - ["image/video/sound", "image-like", "v"], - ["blockquote/poem/music/etc", "quoted"], - ["aside-like", "aside-like", "d"], - ["interactives"], - ["proof", "proof-standalone", "o"], - ["layout-like"], - ["section-like"], - // ["Save", "save"], - ["PreTeXt source", "source"]], - // need to unify section with paragraphs (when sections are managed by the CAT) -"paragraphs": [["paragraph", "p"], - ["display math/chemistry/code", "math-like", "c"], - ["list or table", "list-like"], - ["example-like", "example-like"], - ["definition-like", "definition-like"], - ["theorem-like", "theorem-like"], - ["remark-like"], - ["project/exercise-like", "project-like", "j"], - ["image/video/sound", "image-like", "v"], - ["blockquote/poem/music/etc", "quoted"], - ["aside-like", "aside-like", "d"], - ["interactives"], - ["proof", "proof-standalone", "o"], - ["layout-like"], - // ["Save", "save"], - ["PreTeXt source", "source"]], -"blockquote": [["paragraph", "p"]], -// "ol": [["list item", "li"]], -"article": [["paragraph", "p"], // this is for theorem-like and similar - ["math/chemistry/code", "math-like", "c"], - ["list or table", "list-like"], - ["image/video/sound", "image-like", "v"]], -"li": [["new list item", "li", "i"], - ["paragraph", "p"], - ["list or table", "list-like"], - ["math/chemistry/code", "math-like", "c"], - ["image/video/sound", "image-like", "v"]], -"p": [["emphasis-like"], ["formula"], ["abbreviation"], ["symbol"], ["ref or link", "ref"]] -} -base_menu_for["proof"] = base_menu_for["article"]; -base_menu_for["page"] = base_menu_for["section"]; - - -// not currently used -function past_edits() { - - var the_past_edits = []; - if(recent_editing_actions.length) { - the_past_edits = recent_editing_actions.map(x => [x.join(" ")])} - else { the_past_edits = [["no chnages yet"]] } - - return the_past_edits -} - -// this should be created from inner_menu_for -editing_container_for = { "p": 1, "ip": 1, "mp": 1, "fp": 1, - "theorem-like": ["theorem", "proposition", "lemma", "corollary", "claim", "fact", "identity", "algorithm"], - "definition-like": ["definition", "conjecture", "axiom", "hypothesis", "principle", "heuristic", "assumption"], -"remark-like": ["remark", "warning", "note", "observation", "convention", "insight"], -"example-like": ["example", "question", "problem"], -"exercise-like": ["exercise"], -"ol": ["item"], -"li": [""], -"list": [""], -"image": [""], -"sbs2": [""], -"sbs3": [""], -"sbs4": [""], -"source": 1, -"proof-standalone": [""], //just a guess -"proof": [""] //just a guess -} - -function make_current_editing_tree_from_id(theid) { - -//current_editing keeps track of where we are in the tree. maybe need a better name? - - editorLog(" OOOOO make_current_editing_tree_from_id", theid); - editorLog(" which has internalSource", internalSource[theid]); - editorLog(" within", internalSource); - editorLog(" and the DOM object is", document.getElementById(theid)); - // the existing current_editing know the top level id -// var top_id = current_editing["tree"][0][0].id; - var top_id = top_level_id; - - // but now we need to start over and go bottom-up - current_editing = { - "level": -1, - "location": [], - "tree": [ ] - } - - var current_id = theid; - var current_element = document.getElementById(current_id); - console.log("current_id", current_id, "current_element", current_element); - var selectable_parent, current_element_siblings, selectable_parent_id; - var ct=0; - while (current_id != top_id && ct < 10) { - ct += 1; - editorLog("ct", ct); - editorLog("looking to match current_element", current_element, "until we hit", top_id); - selectable_parent = current_element.parentElement.closest("[data-editable]"); - current_element_siblings = next_editable_of(selectable_parent, "children"); - current_id = selectable_parent.id; - editorLog("current_id", current_id); - current_editing["tree"].unshift(current_element_siblings); - editorLog("looking for", current_element, "in", current_element_siblings); - for (var j=0; j < current_element_siblings.length; ++j) { - if (current_element == current_element_siblings[j]) { - current_editing["level"] += 1; - current_editing["location"].unshift(j); - editorLog("this is item", j); - break - } else { - editorLog(current_element == current_element_siblings[j], "aaa", current_element,"zzz", current_element_siblings[j]) - } - } - current_element = selectable_parent - } - current_editing["level"] += 1; - current_editing["location"].unshift(0); - current_editing["tree"].unshift([document.getElementById(top_id)]); - - editorLog("built current_editing after", ct, "levels"); - editorLog("current_editing[level]", current_editing["level"]); - editorLog("current_editing[location]", current_editing["location"]); - editorLog("current_editing[tree]", current_editing["tree"]) - - editorLog(" OOOOO done with make_current_editing_tree_from_id", theid, document.getElementById(theid)); - -} - -function standard_title_form(object_id) { - var the_object = internalSource[object_id]; - var the_title = the_object.title; - - var title_form = '' + the_title + ''; - - return title_form -} -function standard_caption_form(object_id) { - var the_object = internalSource[object_id]; - editorLog("editing caption of object_id", object_id, "which contains", the_object); - var the_caption = the_object.caption; - - var caption_form = '' + the_caption + ''; - - return caption_form -} - - -function menu_options_for(object_id, component_type, level) { - // this should be a function of the object, not just its tag - // p in li vs p child of section, for example - var menu_for; - - if (!component_type) { component_type = internalSource[object_id]["sourcetag"] } - editorLog("component_tag", component_type); - if (level == "base") { - menu_for = base_menu_for - } else if (level == "move-or-delete") { - editorLog("C0 menu options for", component_type); - var m_d_options; - var component_parent = internalSource[object_id]["parent"][0]; - var component_parent_tag = internalSource[component_parent]["sourcetag"]; - if (component_type == "p" && component_parent_tag == "li") { - m_d_options = [ - ["move-local-p", "Move these words within this page"], - ["move-local-li", "Move this list item within this page"], - ["move-global", "Move this another page (not implemented yet)"], - ["delete", "Delete"] // does it matter whether there are other p in this li? - ]; - } else if(tag_type(component_type) == "p") { - m_d_options = [ - ["move-local-p", "Move this text within this page"], - ["move-global", "Move to another page (not implemented yet)"], - ["delete", "Delete"] - ]; - } else { - m_d_options = [ - ["move-local", "Move within this page"], - ["move-global", "Move to another page (not implemented yet)"], - ["delete", "Delete"] - ]; - } - var this_menu = ""; - for (var i=0; i < m_d_options.length; ++i) { - this_menu += '
  • ' + this_item_shortcut + ''); - } - } else { - this_menu += 'data-jump="' + this_item_name.charAt(0) + '"'; - } - if (i==0) { this_menu += ' id="choose_current"'} - this_menu += '>'; - - if (this_item_name.match(/^[a-z]/i)) { - first_character = this_item_name.charAt(0); - this_item_name = this_item_name.replace(first_character, "" + first_character + ""); - } - - this_menu += this_item_name - // little right triangle if there is a submenu - // if (this_item_label in inner_menu_for()) { this_menu += '
    ▻
    ' } - if (this_item_label in submenu_options) { this_menu += '
    ▻
    ' } - this_menu += '
  • '; - } - - return this_menu -} - -function top_menu_options_for(this_obj) { - editorLog("top menu options for aa", this_obj); - var this_id = this_obj.id; - -// maybe the "classList" in this function shoudl instead look at the internalSource? - - var this_list = ""; - - if (this_obj.classList.contains("heading")) { - var this_obj_parent = this_obj.parentElement; - editorLog("heading options for bbb", this_obj_parent); - var this_obj_parent_id = this_obj_parent.id; - var this_obj_parent_source = internalSource[this_obj_parent_id]; - var this_obj_environment = this_obj_parent_source["sourcetag"]; - - editorLog("this_obj_environment", this_obj_environment); - - this_list = '
  • Change the title
  • '; - this_list += '
  • Change "' + this_obj_environment + '" to
    ▻
  • '; - } else { - var this_object_type = this_obj.tagName; // needs to examine other attributes and then look up a reasonable name -//consolidate this redundancy - this_obj_id = this_obj.id; - if (!this_obj_id) { - this_obj_id=this_obj.getAttribute("data-parent_id") - editorLog("now has id", this_obj_id); - } - this_obj_source = internalSource[this_obj_id]; - editorLog("this_obj_source", this_obj_source); - editorLog("this_obj", this_obj, "classList", this_obj.classList, "T/F", this_obj.classList.contains("image-box")); - this_obj_environment = this_obj_source["sourcetag"]; - if (this_object_type == "P" || this_obj.classList.contains("displaymath")) { - this_list = '
  • Edit ' + this_obj_environment + '
  • '; - var editable_children = next_editable_of(this_obj, "children"); - editorLog("editable_children", editable_children); - if (editable_children.length && !(this_object_type == "P")) { - this_list += '
  • Enter ' + this_obj_environment + '
  • '; - } - if (editable_children.length > 2 && (this_object_type == "SECTION")) { - this_list += '
  • Go to end of ' + this_obj_environment + '
  • '; - } - } else if (this_obj.classList.contains("image-box")) { - editorLog("found an image-box"); - this_list = '
  • Modify layout
    ▻
  • '; - } else if (this_obj.classList.contains("sbspanel")) { - this_list = '
  • Modify layout
    ▻
  • '; - } else { - this_list += '
  • Enter ' + this_obj_environment + '
  • '; - if (this_object_type == "SECTION") { - this_list += '
  • Go to end of ' + this_obj_environment + '
  • '; - } - } - - if (this_obj.classList.contains("sbspanel")) { - this_list += '
  • Insert in panel
    ▻
  • '; - } - - if (this_obj.classList.contains("project-like")) { - this_list += '
  • Add a task
  • '; - } - - if (this_id != top_level_id) { - this_list += '
  • Insert before
    ▻
  • '; - this_list += '
  • Insert after
    ▻
  • '; - - this_list += '
  • Move or delete
    ▻
  • '; - } - this_list += '
  • Metadata
    ▻
  • '; - if (this_id != top_level_id) { - this_list += '
  • Revert
    ▻
  • '; - } - if (previous_editing() && this_id == top_level_id) { - this_list += '
  • Resume previous editing
  • '; - } - this_list += '
  • Save
  • '; - this_list += '
  • Stop editing
  • '; - } - return this_list -} - -function edit_menu_from_current_editing(motion) { - // obviously we need to think a bit about current_editing and how it is used - var object_of_interest = current_editing["tree"][ current_editing["level"] ][ current_editing["location"][ current_editing["level"] ] ]; - edit_menu_for(object_of_interest, motion); -} - -function edit_menu_for(this_obj_or_id, motion) { - editorLog("make edit menu", motion, "for", this_obj_or_id); - - // delete the old menu, if it exists - if (document.getElementById('edit_menu_holder')) { - var current_menu = document.getElementById('edit_menu_holder'); - editorLog("current_menu", current_menu); - editorLog("this_choice", document.getElementById('enter_choice')); - if (this_choice = document.getElementById('enter_choice')) { - if (this_choice.getAttribute("data-location") == "stay") { - current_menu.previousSibling.classList.remove("may_leave") - } else { - current_menu.parentElement.classList.remove("may_select"); - current_menu.parentElement.classList.remove("may_enter"); - } - } - current_menu.parentElement.classList.remove("may_select"); - current_menu.parentElement.classList.remove("may_enter"); - current_menu.remove(); - } - - if (!this_obj_or_id) { - errorLog("error: empty this_obj_or_id", motion); - return "" - } else { - editorLog("this_obj_or_id", this_obj_or_id, "string?", typeof this_obj_or_id === 'string'); - editorLog("which has parent", this_obj_or_id.parentElement) - } - - console.log("this_obj_or_id", this_obj_or_id, typeof this_obj_or_id); - if (typeof this_obj_or_id === 'string') { - this_obj = document.getElementById(this_obj_or_id) - } else { - this_obj = this_obj_or_id - } - console.log("this_obj", this_obj); - var this_id = this_obj.id; -// this_obj = document.getElementById(this_obj); // because is is an id? Maybe need cases here - - if (motion == "entering") { - menu_location = "afterbegin"; - this_obj.classList.remove("may_leave"); - if (next_editable_of(this_obj, "children").length && !(this_obj.tagName == "P")) { - this_obj.classList.add("may_enter"); - } else { - this_obj.classList.add("may_select"); - } - if (inline_tags.includes(this_obj.tagName.toLowerCase())) { - this_obj.classList.add("inline"); - } - } else { menu_location = "afterend"; - this_obj.classList.remove("may_select"); - this_obj.classList.remove("may_enter"); - this_obj.classList.add("may_leave"); - editorLog("added may_leave to", this_obj) - } // when motion is 'leaving' - - var edit_menu_holder = document.createElement('div'); - edit_menu_holder.setAttribute('id', 'edit_menu_holder'); - edit_menu_holder.setAttribute('class', 'edit_menu_holder'); - edit_menu_holder.setAttribute('tabindex', '-1'); - editorLog("adding menu for", this_obj_or_id, "menu_location", menu_location); - editorLog("which has tag", this_obj.tagName); - editorLog("does", this_obj.classList, "include type", this_obj.classList.contains("type")); - - this_obj.insertAdjacentElement(menu_location, edit_menu_holder); - editorLog("added edit_menu_holder", document.getElementById("edit_menu_holder"), motion); - - var edit_option = document.createElement('span'); - edit_option.setAttribute('id', 'enter_choice'); - - if (motion == "entering") { - editorLog("inline_tags", inline_tags, "tag", this_obj.tagName.toLowerCase()); - editorLog("next_editable_of(this_obj, children)", next_editable_of(this_obj, "children")); - if (false && inline_tags.includes(this_obj.tagName.toLowerCase())) { - edit_option.innerHTML = "change this?"; - edit_option.setAttribute('data-location', 'inline'); - } else if (this_obj.classList.contains("type")) { - // e.g., changing "proposition" to "theorem" - // need to code this better: over-writing edit_option - edit_option = document.createElement('ol'); - edit_option.setAttribute('id', 'edit_menu'); - edit_option.setAttribute('class', 'edit_menu'); - this_obj_parent_id = this_obj.parentElement.parentElement.id; - this_obj_environment = internalSource[this_obj_parent_id]["sourcetag"]; - edit_option.innerHTML = '
  • Change "' + this_obj_environment + '" to
    ▻
  • '; - edit_option.setAttribute('data-location', 'inline'); - } else if (this_obj.classList.contains("image-box")) { - edit_option.innerHTML = "modify this image layout, or add near here?"; - } else if (this_obj.classList.contains("sbspanel")) { - edit_option.innerHTML = "modify this panel layout, or change panel contents?"; - } else if (this_obj.classList.contains("title") || this_obj.classList.contains("caption")) { - var this_contained_type = "title"; - if (this_obj.classList.contains("caption")) { this_contained_type = "caption" } - edit_option = document.createElement('ol'); - edit_option.setAttribute('id', 'edit_menu'); - edit_option.setAttribute('class', 'edit_menu'); - editorLog("this_obj", this_obj); - editorLog("this_obj.innerHTML", this_obj.innerHTML); - editorLog("menu only?", this_obj.innerHTML == '
    '); - this_obj_parent_id = this_obj.parentElement.parentElement.id; - this_obj_environment = internalSource[this_obj_parent_id]["sourcetag"]; - if (this_obj.innerHTML == '
    ') { - edit_option.innerHTML = '
  • Add a ' + this_contained_type + '
  • '; - } else { - edit_option.innerHTML = '
  • Change ' + this_contained_type + '
  • '; - } - edit_option.setAttribute('data-location', 'inline'); - } else if ((this_obj.classList.contains("placeholder") && (this_obj.classList.contains("hint") || - this_obj.classList.contains("answer") || - this_obj.classList.contains("solution") || - this_obj.classList.contains("proof")) ) ) { - var theverb = "add" - var thenoun = this_obj.getAttribute("data-HAS"); - edit_option.setAttribute('id', 'choose_current'); - edit_option.setAttribute('data-env', thenoun); - edit_option.setAttribute('data-parent_id', this_obj.getAttribute("data-parent_id")); - edit_option.innerHTML = "" + theverb + "" + " " + thenoun; - } else if (this_obj.classList.contains('workspace')) { - edit_option.setAttribute('id', 'choose_current'); - edit_option.setAttribute('data-env', 'workspace'); - edit_option.setAttribute('data-action', 'modify'); - edit_option.setAttribute('data-parent_id', this_obj.getAttribute("data-parent_id")); - - edit_option.innerHTML = "" + "adjust" + "" + " " + "workspace"; - } else { - if (next_editable_of(this_obj, "children").length && this_obj.tagName != "P") { - editorLog("this_obj", this_obj); - if (this_id == top_level_id) { - edit_option.innerHTML = "enter this " + internalSource[this_obj.id]["sourcetag"] + "?"; - } else { - edit_option.innerHTML = "enter this " + internalSource[this_obj.id]["sourcetag"] + ", or add near here?"; - } - } else { - edit_option.innerHTML = "edit this passage, or add near here?"; - } - edit_option.setAttribute('data-location', 'next'); - } - } else { - edit_option.setAttribute('data-location', 'stay'); - edit_option.innerHTML = "continue editing this " + internalSource[this_obj.id]["sourcetag"]; - } - editorLog("edit_option", edit_option); - document.getElementById("edit_menu_holder").insertAdjacentElement("afterbegin", edit_option); - document.getElementById('edit_menu_holder').focus(); -} - -function next_editable_of(obj, relationship) { - var next_to_edit; - editorLog("finding", relationship, "editable of", obj); - if (relationship == "children") { - next_to_edit = $(obj).find(' > [data-editable], > .sidebyside > .sbsrow > [data-editable], > li > [data-editable], > .heading > [data-editable], > .hint > [data-editable], > .answer > [data-editable]') - } else if (relationship == "outer-block") { // for example, a direct child of a section - next_to_edit = $(obj).find(' > [data-editable]') - } else if (relationship == "inner-block") { // typically a paragraph - next_to_edit = $(obj).find('section > [data-editable], [data-editable="99"], [data-editable="42"]') - } else if (relationship == "li-only") { // typically a paragraph - next_to_edit = $(obj).find('li') - } else { - editorLog("unimplemented next_editable_of") - } - - editorLog("next_to_edit", next_to_edit); - return next_to_edit -} - -function create_new_internal_object(new_tag, new_id, parent_description) { - - var new_source = {"xml:id": new_id, "sourcetag": new_tag, "parent": parent_description, "title": ""} - - editorLog("create new internal object", new_tag, "new_id", new_id, "parent_description", parent_description); - editorLog("within", internalSource[parent_description[0]]); - if (new_tag.startsWith("sbs")) { // creating an sbs, which contains one sbsrow, which contains several sbspanels - new_source.sourcetag = "sidebyside"; - var sbs_layout = new_tag.split("_"); - var [margin_left, margin_right] = [sbs_layout[1], sbs_layout[sbs_layout.length - 1]]; - editorLog("sbs side margins", margin_left, "jj", margin_right); - new_source.marginleft = margin_left; - new_source.marginright = margin_right; - - var col_content = ""; - var widths = []; - for (var j=2; j <= sbs_layout.length - 2; ++j) { - widths.push(sbs_layout[j]); - var new_col_id = randomstring(); - col_content += "<&>" + new_col_id + "<;>"; - internalSource[new_col_id] = {"xml:id": new_col_id, "sourcetag": "sbspanel", - "content": "", "parent": [new_id, "content"]} - } - new_source.widths = widths; - new_source.content = col_content; - - editorLog("new sbs", new_source); - - } else { - - editorLog("new_tag", new_tag); - var thisstructure = objectStructure[new_tag]; - var thisownersourcestructure = {}; - if (!thisstructure) { errorLog(new_tag + " not implemented yet"); return "" } - if ("owner" in thisstructure) { - var thisownerstructure = objectStructure[thisstructure.owner]; - thisownersourcestructure = thisownerstructure.source; - } - var thissourcestructure = Object.assign({},thisownersourcestructure, thisstructure.source); - - editorLog("thissourcestructure", thissourcestructure); - - if ("attributes" in thissourcestructure) { - these_source_attributes = thissourcestructure.attributes; - for (var j=0; j < these_source_attributes.length; ++j) { - editorLog("adding", j, "attribute", these_source_attributes[j]); - new_source[these_source_attributes[j][0]] = these_source_attributes[j][1] - } - } - -/* here need to also use the owner structure */ - var these_source_pieces = thissourcestructure.pieces; - for (var j=0; j < these_source_pieces.length; ++j) { - editorLog("adding a piece", these_source_pieces[j]); - var [this_piece, this_piece_contains] = these_source_pieces[j]; - - if (this_piece_contains) { - var new_child_id = randomstring(); - new_source[this_piece] = "<&>" + new_child_id + "<;>"; - create_new_internal_object(this_piece_contains, new_child_id, [new_id, this_piece]); - } else { - new_source[this_piece] = "" - } - } - } - - editorLog("made the new_source", new_source); - - internalSource[new_id] = new_source; - - editorLog("parent_description", parent_description, "new_tag", new_tag, "new_id", new_id); - editorLog("internalSource", internalSource); - if (new_tag == "list") { - // do nothing, because it is the child "li" which we are really creating - // chack that: maybe do add, if the stack is in the proper order - } else if (tag_type(new_tag) == "p"){ - // p is the default, so no need to keep track of it - } else if (new_tag == "source"){ - // not really a tag - } else if (new_tag.startsWith("sbs")){ - ongoing_editing_actions.push(["new", "sbs", new_id]); - } else { - ongoing_editing_actions.push(["new", new_tag, new_id]); - } - return new_tag -} - -function show_source(sibling, relative_placement) { -// var current_source = document.getElementById("newpretextsource"); -// if (current_source) { editorLog("curr sou", current_source); alert("curr sour"); current_source.remove() } - var edit_placeholder = document.createElement("span"); - edit_placeholder.setAttribute('id', "newsource"); - sibling.insertAdjacentElement(relative_placement, edit_placeholder); - - editorLog("just added", edit_placeholder); - - var the_pretext_source = output_from_id("", top_level_id, "pretext"); - - the_pretext_source = the_pretext_source.replace(/\n\n/g, '\n'); - - // remove temporary ids - the_pretext_source = the_pretext_source.replace(/ xml:id="tMP[0-9a-z]+"/g, ''); - the_pretext_source = the_pretext_source.replace(/^ +$/mg, ''); // m = multiline - -// var the_old_source = document.getElementById("newsource"); -// if (the_old_source) { the_old_source.remove() } - edit_placeholder.insertAdjacentHTML('afterend', ''); -} - -// unify with show_source, and maybe make the clean up part of output_from_id -function save_source() { -// var current_source = document.getElementById("newpretextsource"); -// if (current_source) { editorLog("curr sou", current_source); alert("curr sour"); current_source.remove() } - editorLog(" QQ saving"); - - var the_pretext_source = output_from_id("", top_level_id, "pretext"); - - the_pretext_source = the_pretext_source.replace(/\n\n/g, '\n'); - // remove temporary ids - the_pretext_source = the_pretext_source.replace(/ xml:id="tMP[0-9a-z]+"/g, ''); - the_pretext_source = the_pretext_source.replace(/^ +$/mg, ''); // m = multiline - - editorLog(" RR saving", top_level_id, "which begins", the_pretext_source.substring(0,50)); - parent.save_file(top_level_id, the_pretext_source) -} - -function create_object_to_edit(new_tag, new_objects_sibling, relative_placement) { - - // when relative_placement is "afterbegin", the new_objects_sibling is actually its parent - editorLog("create object to edit", new_tag, new_objects_sibling, relative_placement); - // first insert a placeholder to edit-in-place - var new_id = randomstring(); - recent_editing_actions.push(["new", new_tag, new_id]); - // we won;t need all of these, so re-think when these are created - var edit_placeholder = document.createElement("span"); - edit_placeholder.setAttribute('id', new_id); - - // when adding an li, you are actually focused on somethign inside an li - // but, maybe that distinction shoud be mede before calling create object to edit ? - if (new_tag == "li") { new_objects_sibling = new_objects_sibling.parentElement } - - var sibling_id, parent_description, object_neighbor; - - if (["hint", "answer", "solution", "proof"].includes(new_tag)) { // this is only for the case that a solution does not already exist -// create_new - - sibling_id = new_objects_sibling.parentElement.id; - parent_description = [sibling_id, new_tag] - - editorLog(new_tag, "parent_description", parent_description); - object_neighbor = "" ; // will not be used - - } else if(new_objects_sibling.classList.contains("sbspanel")) { //bad hack! use internalCOntents! - sibling_id = new_objects_sibling.id; - editorLog("special case for empty sbspanel",sibling_id); - // alert("special sbspanel case"); - parent_description = [sibling_id, "content"] - object_neighbor = "" ; // will not be used??? - } else { - // and describe where it goes - editorLog("new_objects_sibling",new_objects_sibling); - sibling_id = new_objects_sibling.id; - parent_description = internalSource[sibling_id]["parent"]; - object_neighbor = new RegExp('(<&>' + sibling_id + '<;>)'); - } - - if (relative_placement == "afterbegin" && new_tag != "image") { // when adding to a sbs panel - // redo the condition so that it explicitly uses sbs - // redundant with the "special case" above? - // parent_description = [new_id, "content"]; - } - var object_neighbor = new RegExp('(<&>' + sibling_id + '<;>)'); - if (new_tag == "task" && !(new_objects_sibling.classList.contains("task"))) { - // when task is being added by selecting from the parent exercise - relative_placement = "atend"; - parent_description = [sibling_id, "tasks"]; - } - if (["hint", "answer", "solution", "proof"].includes(new_tag)) { // this is only for the case that a solution does not already exist - relative_placement = "replace"; - } - editorLog(new_tag, "parent_description", parent_description); - - // then create the empty internalSource for the new object - var new_obj = create_new_internal_object(new_tag, new_id, parent_description); - if (!new_obj) { return "" } - - // we have made the new object, but we still have to put it in the correct location - - var the_current_arrangement = internalSource[parent_description[0]][parent_description[1]]; - editorLog(" the_current_arrangement", the_current_arrangement); - editorLog(" from parent_description", parent_description, "internalSource[parent_description[0]]", internalSource[parent_description[0]]); - editorLog(" current_editing", current_editing); - -// maybe the changes to current_editing is different for lists? - - var neighbor_with_new = ''; - var current_level = current_editing["level"]; - var current_location = current_editing["location"][current_level]; - editorLog(" UUU current_editing", current_editing["level"], current_editing["location"].length, current_editing["tree"].length, current_editing["tree"][current_editing["level"]]) - if (relative_placement == "beforebegin" || relative_placement == "afterbegin") { - neighbor_with_new = '<&>' + new_id + '<;>' + '$1'; - } - else if (relative_placement == "afterend" || relative_placement == "beforeend"){ - neighbor_with_new = '$1' + '<&>' + new_id + '<;>' - current_location += 1 - } - editorLog("makking new_arrangement from", object_neighbor, "by", neighbor_with_new); - - if (relative_placement == "atend" || relative_placement == "replace" ) { - // this is not quire gight, but it works for hint/answer/solution - new_arrangement = the_current_arrangement + '<&>' + new_id + '<;>'; - } else if(the_current_arrangement) { - new_arrangement = the_current_arrangement.replace(object_neighbor, neighbor_with_new); - } else { - new_arrangement = '<&>' + new_id + '<;>'; - } - editorLog("which became", new_arrangement); -// alert("here"); - internalSource[parent_description[0]][parent_description[1]] = new_arrangement; - if (new_tag == "list") { - // current_editing["level"] += 1; - // current_editing["location"].push(0); - // current_editing["tree"].push([document.getElementById(new_p_id)]) - } else { - current_editing["location"][current_level] = current_location; - } - editorLog(" new_arrangement", new_arrangement); - editorLog("tried to insert", new_id, "next to", sibling_id, "in", the_current_arrangement) - editorLog(" updated current_editing", current_editing); - editorLog(" VVV current_editing", current_editing["level"], current_editing["location"].length, current_editing["tree"].length, current_editing["tree"][current_editing["level"]]) - editorLog("relative_placement", relative_placement, "edit_placeholder", edit_placeholder); - - if (relative_placement == "atend") { - new_objects_sibling.insertAdjacentElement("beforeend", edit_placeholder); - } else if (relative_placement == "replace") { - new_objects_sibling.replaceWith(edit_placeholder); - } else { - new_objects_sibling.insertAdjacentElement(relative_placement, edit_placeholder); - } - - return edit_placeholder -} - -function edit_in_place(obj, oldornew) { - // currentlt old_or_new is onlu use as "new" for a new li, so that we know - // to immediately make a new li to edit - // previous comment probebly wrong/out of date - - var thisID; - editorLog("in edit in place", obj); - if (thisID = obj.getAttribute("id")) { - editorLog("will edit in place id", thisID, "which is", obj); - thisTagName = obj.tagName.toLowerCase(); - } else { // editing somethign without an id, so probably is a title or caption - if (obj.classList.contains("heading")) { - editorLog("changing a heading"); - editorLog("except we don;t know how to do that") - } else { - errorLog("error: I don't know how to edit", obj) - } - return "" - } - - // this only works for paragraphs, - // which may be right, because existing content is mostly titles and paragraphs - if ( internalSource[thisID] ) { - var new_tag = internalSource[thisID]["sourcetag"]; - var new_id = thisID; // track down why new_id is in the code - editorLog("new_tag is", new_tag, "from thisID", thisID, "from", internalSource[thisID]); - if (tag_type(new_tag) == "p" || tag_type(new_tag) == "md") { // make into a category? - var this_content_container = document.createElement('div'); - this_content_container.setAttribute('id', "actively_editing"); - this_content_container.setAttribute('data-age', oldornew); - editorLog("thing with thisID", thisID, "is",document.getElementById(thisID)); - $("#" + thisID).replaceWith(this_content_container); - - var idOfEditText = 'editing' + '_input_text'; - var paragraph_editable = document.createElement('div'); - paragraph_editable.setAttribute('contenteditable', 'true'); - if (tag_type(new_tag) == "md") { - paragraph_editable.setAttribute('class', 'text_source displaymath_input'); - } else { - paragraph_editable.setAttribute('class', 'text_source paragraph_input'); - } - paragraph_editable.setAttribute('id', idOfEditText); - paragraph_editable.setAttribute('data-source_id', thisID); - paragraph_editable.setAttribute('data-parent_id', internalSource[thisID]["parent"][0]); - paragraph_editable.setAttribute('data-parent_component', internalSource[thisID]["parent"][1]); - - document.getElementById('actively_editing').insertAdjacentElement("afterbegin", paragraph_editable); - - editorLog("setting", $('#' + idOfEditText), "to have contents", internalSource[thisID]["content"]); - -// from https://stackoverflow.com/questions/21257688/paste-rich-text-into-content-editable-div-and-only-keep-bold-and-italics-formatt - -// figure out better how to do this as needed. - $('[contenteditable]').on('paste',function(e) { - e.preventDefault(); - var text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('Paste something..'); - document.execCommand('insertText', false, text); - }); - the_contents = internalSource[thisID]["content"]; - the_contents = expand_condensed_source_html(the_contents, "edit"); - the_contents = the_contents.replace(/\\cr/g, "

    "); - $('#' + idOfEditText).html(the_contents); - document.getElementById(idOfEditText).focus(); - editorLog("made edit box for", thisID); - editorLog("which is", document.getElementById(idOfEditText)); - editorLog("Whth content CC" + document.getElementById(idOfEditText).innerHTML + "DD"); - editorLog("Whth content EE" + document.getElementById(idOfEditText).innerText + "FF"); - editorLog("Whth content GG" + document.getElementById(idOfEditText).textContent + "HH"); - this_char = ""; - prev_char = ""; - - } else if (new_tag == "image") { - var this_content_container = document.createElement('div'); - this_content_container.setAttribute('id', "actively_editing"); - this_content_container.setAttribute('data-age', oldornew); - this_content_container.setAttribute('style', "width:50%; margin-left:auto; margin-right: auto; padding: 2em 3em 3em 3em; background: #fed"); - $("#" + thisID).replaceWith(this_content_container); - - var idOfEditText = 'editing' + '_input_image'; - var image_editable = document.createElement('div'); - image_editable.setAttribute('contenteditable', 'true'); - image_editable.setAttribute('class', 'image_source'); - image_editable.setAttribute('id', idOfEditText); - image_editable.setAttribute('style', "background: #fff"); - image_editable.setAttribute('data-source_id', thisID); - image_editable.setAttribute('data-parent_id', internalSource[thisID]["parent"][0]); - image_editable.setAttribute('data-parent_component', internalSource[thisID]["parent"][1]); - - document.getElementById('actively_editing').insertAdjacentElement("afterbegin", image_editable); - - var edit_instructions = document.createElement('span'); - edit_instructions.setAttribute('style', "font-size: 90%"); - edit_instructions.innerHTML = "URL of image:" - document.getElementById('actively_editing').insertAdjacentElement("afterbegin", edit_instructions); - - document.getElementById(idOfEditText).focus(); - editorLog("made edit box for", thisID); - editorLog("which is", document.getElementById(idOfEditText)); - editorLog("Whth content CC" + document.getElementById(idOfEditText).innerHTML + "DD"); - editorLog("Whth content EE" + document.getElementById(idOfEditText).innerText + "FF"); - editorLog("Whth content GG" + document.getElementById(idOfEditText).textContent + "HH"); - this_char = ""; - prev_char = ""; - - } else { - - editorLog(new_tag, "create the object, then edit p in place", obj); - - var this_object = html_from_internal_id(new_id, ""); - var where_it_goes = document.getElementById(thisID); - where_it_goes.insertAdjacentHTML('afterend', this_object[0]); - where_it_goes.remove(); - var where_it_is = document.getElementById(thisID); - - - editorLog("added this_object", this_object); - editorLog("where it is", where_it_is); - - var this_source = internalSource[thisID]; - if (this_source.sourcetag == "sidebyside") { // generalize to container was added - editorLog("added an sbs", document.getElementById(thisID)); - editorLog("its .firstChild", document.getElementById(thisID).firstElementChild); - editorLog("its .firstChild.firstchild", document.getElementById(thisID).firstElementChild.firstElementChild); - var first_panel_id = document.getElementById(thisID).firstElementChild.firstElementChild.id; - editorLog("first_panel_id", first_panel_id, document.getElementById(first_panel_id)); - make_current_editing_tree_from_id(first_panel_id); - edit_menu_from_current_editing("entering"); - } else { - var empty_p_child = $(where_it_is).find("p"); - if (empty_p_child[0]) { - editorLog("found the empty p", empty_p_child); - editorLog("found the empty p[0]", empty_p_child[0]); - edit_in_place(empty_p_child[0], "new"); - } else { - errorLog("error: no empty p to edit") - } - } - } - - } else { - editorLog("Error: edit in place of object that is not already known", obj); - editorLog("What is known:", internalSource) - } -} - -function resume_editing() { - internalSource = previous_editing(); - replace_by_id(internalSource["root_data"]["id"], "html"); - edit_menu_for(top_level_id, "entering"); - console.log("editing resumed"); -} - -function replace_by_id(theid, format) { - - if (format != "html") { return "" } - - var this_object_new = output_from_id("",theid, format); - - console.log("id", theid); -// GO BACK AND REVISIT THE NEXT 3 LINES -// document.getElementById(theid).setAttribute("id", "delete_me"); -// document.getElementById("delete_me").insertAdjacentHTML('beforebegin', this_object_new); -// document.getElementById("delete_me").remove(); - -// need to also work with MJ3 -// MathJax.Hub.Queue(['Typeset', MathJax.Hub, document.getElementById(theid)]); - console.log("MathJax on", theid, document.getElementById(theid)); -// MathJax.typesetPromise(document.getElementById(theid)); - MathJax.typesetPromise(); - - console.log("adjusting workspace"); -window.setTimeout(adjustWorkspace, 1000); -} - -// temporary: need to unify img and sbs layout -function modify_by_id(theid, modifier) { - editorLog("modifying by id", theid); - if (internalSource[theid]["sourcetag"] == "sbspanel") { - modify_by_id_sbs(theid, modifier) - } else if (environment_instances["project-like"].includes(internalSource[theid]["sourcetag"]) - || internalSource[theid]["sourcetag"] == "task") { - modify_by_id_workspace(theid, modifier) - } else { - modify_by_id_image(theid, modifier) - } - save_edits() -} - -function modify_by_id_workspace(theid, modifier) { - - var the_height = internalSource[theid]["workspace"]; - editorLog("the_height", the_height, "from", internalSource[theid]); - -//modify: enlarge, shrink, enlargeslightly, shrinkslightly, done - - the_height = parseInt(the_height); - editorLog('the_height, ', the_height); - - if (modifier == "enlarge") { the_height += 10 } - else if (modifier == "shrink") { the_height -= 10 } - else if (modifier == "enlargeslightly") { the_height += 1 } - else if (modifier == "shrinkslightly") { the_height -= 1 } - - if (the_height < 0) { the_height = 0 } - - internalSource[theid]["workspace"] = the_height; - editorLog("the_height is now", the_height); - - var this_workspace = document.getElementById(theid).querySelector(".workspace"); - this_workspace.setAttribute("style", "height:" + the_height*10 + "px"); - this_workspace.setAttribute("data-space", the_height); -} - -function modify_by_id_image(theid, modifier) { - - var width = internalSource[theid]["width"]; - var marginleft = internalSource[theid]["marginleft"]; - var marginright = internalSource[theid]["marginright"]; - editorLog('width, , marginright, , marginleft', width, "mr", marginright, "ml", marginleft); - width = parseInt(width); - marginright = parseInt(marginright); - marginleft = parseInt(marginleft); - - var scale_direction = 1; - var moving_direction = 1; - if (modifier == "shrink") { scale_direction = -1 } - else if (modifier == "left") { moving_direction = -1 } - if ("enlarge shrink".includes(modifier)) { - if ((width >= 100 && scale_direction == 1) || (width <= 0 && scale_direction == -1)) { - editorLog("can't go above 100 or below 0"); - return - } else { - width += 2*scale_direction*magnify_scale; - } - if (marginleft > 0 && marginright > 0) { - marginleft += -1*scale_direction*magnify_scale; - marginright += -1*scale_direction*magnify_scale; - } else if (marginleft > 0) { - marginleft += -2*scale_direction*magnify_scale; - } else if (marginright > 0) { - marginright += -2*scale_direction*magnify_scale; - } else if (scale_direction < 0) { // applies when we shrink a 100 width image - marginleft += -1*scale_direction*magnify_scale; - marginright += -1*scale_direction*magnify_scale; - } else { - // do nothing: this is a placeholder which is reached when both margins are 0 - editorLog("already have no margins, width is", width); - } - } else if ("left right".includes(modifier)) { - editorLog("marginleft*moving_direction", marginleft*moving_direction, "marginright*moving_direction", marginright*moving_direction); - if ((marginleft > 0 && marginright > 0) || (marginright*moving_direction > 0) || (marginleft*moving_direction < 0)) { - marginleft += moving_direction*move_scale; - marginright += -1*moving_direction*move_scale; - } else { - // do nothing: this is a placeholder which is reached when both margins are 0 - // we choose to prioritize scale, so a 100% image cannot be shifted - editorLog("already at 100%, width is", width); - } - } - - var the_new_sizes = "width: " + width + "%;"; - the_new_sizes += "margin-right: " + marginright + "%;"; - the_new_sizes += "margin-left: " + marginleft + "%;"; - - internalSource[theid]["width"] = width; - internalSource[theid]["marginleft"] = marginleft; - internalSource[theid]["marginright"] = marginright; - - document.getElementById(theid).setAttribute("style", the_new_sizes); -} - -function modify_by_id_sbs(theid, modifier) { - - var this_panel_source = internalSource[theid]; -// var this_width = this_panel_source["width"]; - var this_sbs_id = this_panel_source["parent"][0]; - var this_sbs_source = internalSource[this_sbs_id]; - editorLog("this_sbs_source", this_sbs_source); - var marginleft = parseInt(this_sbs_source["marginleft"]); - var marginright = parseInt(this_sbs_source["marginright"]); - var these_siblings = this_sbs_source["content"]; - these_siblings = these_siblings.replace(/^\s*<&>\s*/, ""); - these_siblings = these_siblings.replace(/\s*<;>\s*$/, ""); - these_siblings = these_siblings.replace(/>\s*<"); - editorLog("these_siblings", these_siblings); - var these_siblings_list = these_siblings.split("<;><&>"); - var this_panel_index = these_siblings_list.indexOf(theid); - editorLog("this panel", theid, "is", this_panel_index, "within", these_siblings_list); - var these_panel_widths = this_sbs_source.widths; - var this_width = parseInt(these_panel_widths[this_panel_index]); - var total_width = 0; - editorLog("these html siblings",document.getElementById(these_siblings_list[0])," and ", document.getElementById(these_siblings_list[1])) - editorLog("these siblings source", internalSource[these_siblings_list[0]], "and", internalSource[these_siblings_list[1]]); - for(var j=0; j < these_siblings_list.length; ++j) { - // var t_wid = parseInt(internalSource[these_siblings_list[j]]["width"]); - var t_wid = parseInt(these_panel_widths[j]); - these_panel_widths[j] = t_wid; // put it back as an integer - editorLog("adding width", t_wid); - total_width += t_wid; - // these_panel_widths.push(t_wid); - } -// if (this_width != these_panel_widths[this_panel_index]) { -// errorLog("error: width", this_width, "not on list", these_panel_widths) -// } else { -// editorLog("width", this_width, "on list", these_panel_widths) -// } - - editorLog("occ", marginleft, "u", total_width, "pi", marginright, "total", marginleft + total_width + marginright, "ratio", marginright/total_width) - var remaining_space = 100 - (marginleft + total_width + marginright); - editorLog("remaining_space", remaining_space); - -//modify: enlarge, shrink, left, right, ??? done - -// make the data structure better, then delete this comment -// currently style looks like "width: 66%; margin-right: 17%; margin-left: 17%" - editorLog('width', this_width, "mr", marginright, "ml", marginleft); - - editorLog("modifier", modifier); - - var scale_direction = 1; - var moving_direction = 1; - - if (modifier == "enlargeall") { - editorLog("enlarging all", "remaining space", remaining_space); - if (remaining_space >= these_panel_widths.length) { - for (var j=0; j < these_panel_widths.length; ++j) { - these_panel_widths[j] += 1 - } - // probablu the next case handles the first case - } else if (remaining_space + marginleft + marginright >= these_panel_widths.length) { - for (var j=0; j < these_panel_widths.length; ++j) { - these_panel_widths[j] += 1 - } - var missing_length = these_panel_widths.length - remaining_space; - while (missing_length) { - missing_length -= 1; - if (missing_length % 2) { - if (marginleft) { marginleft -= 1 } - else { marginright -= 1 } - } else { - if (marginright) { marginright -= 1 } - else { marginleft -= 1 } - } - } - } else { - editorLog("Problem: not implemented yet") - } - } else if (modifier == "shrinkall") { - for (var j=0; j < these_panel_widths.length; ++j) { - if (these_panel_widths[j]) { these_panel_widths[j] -= 1 } - } - } else if (modifier == "enlarge") { - editorLog("enlarging one"); - if (remaining_space) { these_panel_widths[this_panel_index] += 1 } - } else if (modifier == "shrink") { - editorLog("shrinking one"); - if (these_panel_widths[this_panel_index]) { these_panel_widths[this_panel_index] -= 1 } - } else if (modifier == "leftplus") { - if (remaining_space) { marginleft += 1 } - } else if (modifier == "leftminus") { - if (marginleft) { marginleft -= 1 } - } else if (modifier == "rightplus") { - if (remaining_space) { marginright += 1 } - } else if (modifier == "rightminus") { - if (marginright) { marginright -= 1 } - } - editorLog("now these_panel_widths", these_panel_widths); - -// missing cases?? - - internalSource[this_sbs_id]["marginleft"] = marginleft; - internalSource[this_sbs_id]["marginright"] = marginright; - internalSource[this_sbs_id]["widths"] = these_panel_widths; - -// next is wrong, becuase the sbsrow does not have an id -/* - document.getElementById(this_sbs_id).style.marginLeft = marginleft + "%"; - document.getElementById(this_sbs_id).style.marginRight = marginright + "%"; -*/ - document.getElementById(theid).parentElement.style.marginLeft = marginleft + "%"; - document.getElementById(theid).parentElement.style.marginRight = marginright + "%"; - - for (var j=0; j < these_siblings_list.length; ++j) { - var this_id = these_siblings_list[j]; -// internalSource[this_id]["width"] = these_panel_widths[j]; - var width = rescale(these_panel_widths[j], 100, marginleft, marginright) - // document.getElementById(this_id).style.width = these_panel_widths[j] + "%"; - document.getElementById(this_id).style.width = width + "%"; - } - editorLog("NOW these html siblings",document.getElementById(these_siblings_list[0])," and ", document.getElementById(these_siblings_list[1])) - editorLog("NOW these siblings source", internalSource[these_siblings_list[0]], "and", internalSource[these_siblings_list[1]]); - editorLog("and internalSource[this_id]", internalSource[this_id]); - editorLog("and also internalSource[this_sbs_id]", internalSource[this_sbs_id]); -} - -function move_by_id_local(theid, thehandleid) { - // when moving an object within a page, we create a phantomobject that is manipulated - // the actual movement is handled by move_object(e) - - first_move = true; - - document.getElementById("edit_menu_holder").remove() - document.getElementById(theid).classList.remove("may_select"); - - moved_content = internalSource[theid]; - moved_content_tag = moved_content["sourcetag"]; - ongoing_editing_actions.push(["moved", moved_content_tag, theid]); - moved_parent_and_location = moved_content["parent"]; - editorLog("moving", theid); - editorLog("moved_parent_and_location", moved_parent_and_location); - // code duplicated elsewhere - var where_it_was = internalSource[moved_parent_and_location[0]][ moved_parent_and_location[1] ]; - editorLog("where_it_was", where_it_was); - var object_in_parent = '<&>' + theid + '<;>'; - var where_it_is = where_it_was.replace(object_in_parent, ""); - editorLog("where_it_is ZZ" + where_it_is + "EE"); - internalSource[moved_parent_and_location[0]][ moved_parent_and_location[1] ] = where_it_is; - - // but first, remember the initial location of the object - - moving_object = document.getElementById(theid); - editorLog("moving", moving_object, "within this page"); - editorLog("moving_id", theid); - editorLog("current_editing[tree][0]", current_editing["tree"][0]); - if (moved_content_tag == "li") { - movement_location_neighbors = next_editable_of(current_editing["tree"][0][0], "li-only"); - } else if (tag_type(moved_content_tag) == "p") { - movement_location_neighbors = next_editable_of(current_editing["tree"][0][0], "inner-block"); - } else { - movement_location_neighbors = next_editable_of(current_editing["tree"][0][0], "outer-block"); - } - editorLog("movement_location_neighbors", movement_location_neighbors); - var foundit = false; - var movement_location_tmp = 0; - for (var j=0; j < movement_location_neighbors.length; ++j) { - if (movement_location_neighbors[j] == moving_object) { - movement_location_tmp = j; - // delete the one which is being moved, because - // we are making a list of slots to place it, and its slot will still be there - // isn't there a better way to delete one item from a list? - movement_location_neighbors.splice(j, 1); - foundit = true; - break; - } - } - - if (!foundit) { errorLog("serious error: trying to move an object that is not movable", theid) } - - editorLog("movement_location_tmp", movement_location_tmp); - // a paragraph by itself in an item or a statement can have a new paragraph before or after it - movement_location_options = [[movement_location_neighbors[0], "beforebegin"], - [movement_location_neighbors[0], "afterend"]]; - movement_location = 0; - var movement_location_ct = 1; - for (var j=1; j < movement_location_neighbors.length; ++j) { - if (movement_location_tmp == j) { movement_location = movement_location_ct } - movement_location_ct += 1; - if (movement_location_neighbors[j-1].parentElement == movement_location_neighbors[j].parentElement) { - movement_location_options.push([movement_location_neighbors[j], "afterend"]) - } else { - movement_location_ct += 1; - movement_location_options.push([movement_location_neighbors[j], "beforebegin"]) - movement_location_options.push([movement_location_neighbors[j], "afterend"]) - } - } - editorLog("movement_location_ct", movement_location_ct); - editorLog("movement_location", movement_location); - - editorLog("made", movement_location_options.length, "movement_location_options", movement_location_options); - editorLog("from", movement_location_neighbors.length, "movement_location_neighbors", movement_location_neighbors); - - var the_phantomobject = document.createElement('div'); - the_phantomobject.setAttribute("id", "phantomobject"); - the_phantomobject.setAttribute("data-moving_id", theid); - the_phantomobject.setAttribute("data-handle_id", thehandleid); - the_phantomobject.setAttribute("class", "phantomobject move"); - the_phantomobject.setAttribute("tabindex", "-1"); - var these_instructions = '
    ↑

    "shift-tab", or "up arrow", to move up

    '; - these_instructions += '

    "return" or "escape" to set in place

    '; - these_instructions += '
    ↓

    "tab" or "down arrow" to move down

    '; - the_phantomobject.innerHTML = these_instructions; - // if we are moving a p which has parent li, and it is the only p there, then delete the parent li - // note: this will be wrong if there is other non-p siblings inside the li - var moving_object_replace = moving_object; - if (tag_type(moved_content_tag) == "p" && internalSource[moved_parent_and_location[0]]["sourcetag"] == "li") { - // check if that p is the only thing inside the li (so the li is empty when we move the p), and if so, - // remove that li from internalSource and also the HTML, and the reverence to it in internalSource - if (moving_object.parentElement.getElementsByTagName("p").length == 1) { - moving_object_replace = moving_object.parentElement - var now_empty_li_id = moved_parent_and_location[0]; - editorLog("list item now empty:", now_empty_li_id); - var now_empty_li_parent_and_location = internalSource[now_empty_li_id]["parent"]; - var where_it_was = internalSource[now_empty_li_parent_and_location[0]][ now_empty_li_parent_and_location[1] ]; - var object_in_parent = '<&>' + now_empty_li_id + '<;>'; - var where_it_is = where_it_was.replace(object_in_parent, ""); - delete internalSource[now_empty_li_id]; - editorLog("where_it_is II" + where_it_is + "OO"); - internalSource[now_empty_li_parent_and_location[0]][ now_empty_li_parent_and_location[1] ] = where_it_is; - } - } - moving_object_replace.replaceWith(the_phantomobject) - document.getElementById("phantomobject").focus(); -} - -function move_object(e) { - // we have alread set movement_location_options and movement_location - editorLog("movement_location",movement_location); - if ((e.code == "Tab" && e.shiftKey) || e.code == "ArrowUp") { // Shift-Tab up the page - e.preventDefault(); - if (movement_location == 0) { - alert("can't move past the top") - } else { - if (first_move) { first_move = false; } - movement_location -= 1 - } - } else if ((e.code == "Tab" || e.code == "ArrowDown") && !e.shiftKey) { - e.preventDefault(); - if (first_move) { first_move = false; editorLog("did first move") } - if (movement_location == movement_location_options.length - 1) { - alert("can't move past the bottom") - } else { - movement_location += 1 - } - } else if (e.code == "Escape" || e.code == "Enter" || e.code == "ArrowRight") { - e.preventDefault(); - editorLog(" decided where to put moving_object", moving_object); - var id_of_moving_object = document.getElementById('phantomobject').getAttribute("data-moving_id"); - editorLog("moving object started as", internalSource[id_of_moving_object]); - var handle_of_moving_object = document.getElementById('phantomobject').getAttribute("data-handle_id"); - document.getElementById('phantomobject').remove(); - var new_anchor_and_position = movement_location_options[movement_location] - editorLog("new_location_anchor",new_anchor_and_position); - new_anchor_and_position[0].insertAdjacentElement(new_anchor_and_position[1], moving_object); - - // the html appears to be updated, but we still need to update both the internal source: - var new_neighbor_id = new_anchor_and_position[0].id; - editorLog("new_neighbor_id", new_neighbor_id); - editorLog("which has source", internalSource[new_neighbor_id]); - var new_neighbor_rel_pos = new_anchor_and_position[1]; - var [new_neighbor_parent, new_neighbor_location] = internalSource[new_neighbor_id]["parent"]; - var new_neighbor_in_context = internalSource[new_neighbor_parent][new_neighbor_location]; - editorLog("new_neighbor_in_context was", new_neighbor_in_context); - var neighbor_tag = '<&>' + new_neighbor_id + '<;>'; - var neighbor_tag_re = new RegExp(neighbor_tag); - - var moving_object_tag = '<&>' + id_of_moving_object + '<;>'; - if (new_neighbor_rel_pos == "beforebegin") { - // new_neighbor_in_context.replace(neighbor_tag, moving_object_tag + "\n" + neighbor_tag) -// RegExp - new_neighbor_in_context = new_neighbor_in_context.replace(neighbor_tag_re, moving_object_tag + "\n" + neighbor_tag) - } else { - new_neighbor_in_context = new_neighbor_in_context.replace(neighbor_tag_re, neighbor_tag + "\n" + moving_object_tag) - } - editorLog("new_neighbor_in_context is", new_neighbor_in_context); - internalSource[new_neighbor_parent][new_neighbor_location] = new_neighbor_in_context; - internalSource[id_of_moving_object]["parent"] = [new_neighbor_parent, new_neighbor_location]; - editorLog("moving object ended as", internalSource[id_of_moving_object]); - - save_edits(); - - // and the navigation information - make_current_editing_tree_from_id(handle_of_moving_object); - - var most_recent_edit = ongoing_editing_actions.pop(); - recent_editing_actions.unshift(most_recent_edit); - - edit_menu_from_current_editing("entering"); - return - - } else { - editorLog("don't know how to move with", e.code) - } - - editorLog("now movement_location", movement_location); - var the_phantomobject = document.getElementById('phantomobject'); - movement_location_options[movement_location][0].insertAdjacentElement(movement_location_options[movement_location][1], the_phantomobject); - document.getElementById("phantomobject").focus(); -} - -function delete_by_id(theid, thereason) { - // reasons to delete something: author wants it deleted, it is empty, ... - // first delete the specific object - final_added_object = ""; - editorLog("deleting by theid", theid, "with content", internalSource[theid]); - var deleted_content = internalSource[theid]; - var parent_and_location = deleted_content["parent"]; - delete internalSource[theid]; - editorLog("deleted", theid, "so", theid in internalSource, "now", internalSource); - // and save what was deleted - if (theid in old_content) { - old_content[theid].push(deleted_content) - } else { - old_content[theid] = [deleted_content] - } - if (thereason != "newempty") { // not sure newempty can still happen - ongoing_editing_actions.push(["deleted ", deleted_content["sourcetag"], theid]); - } - // update the parent of the object - var current_level = current_editing["level"]; - var where_it_was = internalSource[parent_and_location[0]][ parent_and_location[1] ]; - var object_in_parent = '<&>' + theid + '<;>'; - var where_it_is = where_it_was.replace(object_in_parent, ""); - editorLog("where_it_is ZZ" + where_it_is + "EE"); - internalSource[parent_and_location[0]][ parent_and_location[1] ] = where_it_is; - // if the parent is empty, delete it - if (!(where_it_is.trim()) && (parent_and_location[1] == "content" || parent_and_location[1] == "statement")) { - editorLog(" deleted from within", internalSource[parent_and_location[0]]); - document.getElementById(theid).removeAttribute("data-editable"); // so it is invisible to next-editable-of as we delete its parent - if (internalSource[parent_and_location[0]][ "sourcetag" ] == "li") { - editorLog("not going up a level, because it is a list element") - } else { - current_editing["level"] -= 1; - } - delete_by_id(parent_and_location[0], thereason) - } else { // else, because the parent is going to be deleted, so no need to delete the child - // delete from the html - var current_index = current_editing["location"][current_level] + 1; // +1 because the deleted item is still in the current_editing tree - if (thereason == "empty" || thereason == "newempty") { - editorLog("removing from DOM", document.getElementById(theid)); - document.getElementById(theid).remove(); - current_index -= 1; - editorLog("current_index", current_index, "current_level", current_level); - editorLog(current_editing["tree"][ current_level ]); - // hack because adding a list (inside a defn?) is not updating the tree properly - if (current_index > current_editing["tree"][ current_level ].length - 1) { - current_index = current_editing["tree"][ current_level ].length - 1 - } - if (current_editing["tree"][ current_level ][ current_index ].id == theid) { - current_editing["tree"][ current_level ].splice(current_index, 1) - } - editorLog("empty or newempty", thereason) - } else { - editorLog("deleting for another reason", thereason) - document.getElementById("edit_menu_holder").remove() - document.getElementById(theid).setAttribute("id", "deleting"); - document.getElementById("deleting").removeAttribute("data-editable"); // so it is invisible to next-editable-of - setTimeout(() => { document.getElementById("deleting").remove(); }, 600); - } - - if (current_index >= current_editing["tree"][ current_level ].length) { - current_index = current_editing["tree"][ current_level ].length - 2; - } - editorLog("current_index", current_index, "in", current_editing["tree"][ current_level ]); - editorLog("object of interest", current_editing["tree"][ current_level ][ current_index ]); - editorLog("current_level", current_level, "on", current_editing["tree"]); - make_current_editing_tree_from_id(current_editing["tree"][ current_level ][ current_index].id); - edit_menu_from_current_editing("entering"); - } - save_edits() -} - - -var internalSource = { // currently the key is the HTML id - "root_data": {"id": "page-1", "number_base": "0.1" } -} - -/* top_level_id is a mistake: just use internalSource.root_data.id */ -var top_level_id = internalSource["root_data"]["id"]; - -var current_editing = { - "level": 0, - "location": [0], - "tree": [ [document.getElementById(top_level_id)] ] -} - - -function create_local_menu() { - -// this does not work, but local menu navigator would not have worked either - - editorLog("make local edit menu for", this_obj_id); - var local_menu_holder = document.createElement('div'); - local_menu_holder.setAttribute('id', 'local_menu_holder'); - local_menu_holder.setAttribute('tabindex', '-1'); - editorLog("adding local menu for", this_obj_id); - document.getElementById(this_obj_id).insertAdjacentElement("afterbegin", local_menu_holder); - - var enter_option = document.createElement('ol'); - enter_option.setAttribute('id', 'edit_menu'); - enter_option.setAttribute('class', 'edit_menu'); - - enter_option.innerHTML = menu_options_for(this_obj_id, "XunusedX", "base"); - - document.getElementById("local_menu_holder").insertAdjacentElement("afterbegin", enter_option); - -} - -function extract_internal_contents(some_text) { - - // some_text must be a paragraph with mixed content only contining - // non-nested tags - the_text = some_text; - editorLog(" xxxxxxxxxx the_text is", the_text); - editorLog("extract_internal_contents"); - - // delete class information - the_text = the_text.replace(/ class="[^"]"/g, ""); - - // inline from previous editing - editorLog("extracting where 'data-editable...'"); - the_text = the_text.replace(/<([^<]+) data-editable="[^"]+" tabindex="-1">(.*?)<[^<]+>/g, save_internal_cont); - editorLog("extracting where 'contenteditable...'"); - the_text = the_text.replace(/<([^<]+) contenteditable="false">(.*?)<[^<]+>/g, save_internal_cont); - // new $math$ - editorLog("extracting new $math$"); - the_text = the_text.replace(/(^|\s)\$([^\$]+)\$(\s|$|[.,!?;:])/mg, extract_new_math); - // new \\(math\\) - editorLog("extracting new \\(math\\)"); - the_text = the_text.replace(/(^|.)\\\(([^\$]+)\\\)(.|$)/g, extract_new_math); - // new math - editorLog("extracting new math"); - the_text = the_text.replace(/(^|.)<m>(.*?)<\/m>(.|$)/g, extract_new_math); - - // "..." to , which will then be processed - the_text = the_text.replace(/\.\.\./g, '<ellipsis\/>'); - // same for etc - the_text = the_text.replace(/(\s)etc\.?([^a-zA-Z])/g, '$1<etc\/>$2'); - - for (var j=0; j < inline_abbrev.length; ++j) { - var this_tag = inline_abbrev[j]; - editorLog("this_tag", this_tag); - var this_tag_search = "<(" + this_tag + ")\\/>"; - editorLog("searching for", this_tag_search); - var this_tag_search_re = new RegExp(this_tag_search,"g"); - the_text = the_text.replace(this_tag_search_re, extract_new_inline) - } - - // "quote" to quote, which will then be processed - the_text = the_text.replace(/(^|\s)"([^"]+)"(\s|$|[.,!?;:])/g, '$1<q>$2<\/q>$3'); - the_text = the_text.replace(/(^|\s)“([^”]+)”(\s|$|[.,!?;:])/g, '$1<q>$2<\/q>$3'); - the_text = the_text.replace(/(^|\s)‘([^’]+)’(\s|$|[.,!?;:])/g, '$1<q>$2<\/q>$3'); - - for (var j=0; j < inline_tags.length; ++j) { - var this_tag = inline_tags[j]; - editorLog("this_tag", this_tag); - var this_tag_search = "<(" + this_tag + ") *>" + "(.*?)" + "<\\/" + this_tag + ">"; - editorLog("searching for", this_tag_search); - var this_tag_search_re = new RegExp(this_tag_search,"g"); - the_text = the_text.replace(this_tag_search_re, extract_new_inline) - } - - return the_text -} - -function extract_new_math(match, sp_before, math_content, sp_after) { - var new_math_id = randomstring(); - internalSource[new_math_id] = { "xml:id": new_math_id, "sourcetag": "m", - "content": math_content} - return sp_before + "<&>" + new_math_id + "<;>" + sp_after -} -function extract_new_inline(match, the_tag, the_content) { - var new_id = randomstring(); - editorLog("extracting", the_content, "inside", the_tag); - internalSource[new_id] = { "xml:id": new_id, "sourcetag": the_tag, - "content": the_content}; - return "<&>" + new_id + "<;>" -} -function extract_new_abbrev(match, the_tag) { - var new_id = randomstring(); - editorLog("extracting", the_content, "inside", the_tag); - internalSource[new_id] = { "xml:id": new_id, "sourcetag": the_tag}; - return "<&>" + new_id + "<;>" -} - -// rename this next function -function save_internal_cont(match, contains_id, the_contents) { - this_id = contains_id.replace(/.*id="(.+?)".*/, '$1'); - - editorLog("id", this_id, "now has contents", the_contents); - if ("content" in internalSource[this_id]) { // not all objects have content - internalSource[this_id]["content"] = the_contents; - } else if (internalSource[this_id]["sourcetag"] == "xref") { - // this needs work once we have text="custom" references - internalSource[this_id]["ref"] = the_contents; - } - editorLog("all of it is now", internalSource[this_id]); - return "<&>" + this_id + "<;>" -} -function assemble_internal_version_changes(object_being_edited) { - editorLog("in assemble_internal_version_changes"); - editorLog("current active element to be saved", object_being_edited); - editorLog("which has parent", object_being_edited.parentElement); - editorLog("whose age is", object_being_edited.parentElement.getAttribute("data-age")); - - var oldornew = object_being_edited.parentElement.getAttribute("data-age"); - if (!oldornew) { oldornew = object_being_edited.getAttribute("data-age") } - editorLog(" OLDorNEW", oldornew); - - var possibly_changed_ids_and_entry = []; - var nature_of_the_change = ""; - -// var object_being_edited = document.activeElement; - var location_of_change = object_being_edited.parentElement; - var this_arrangement_of_objects = ""; - - if (object_being_edited.classList.contains("paragraph_input")) { - editorLog("found paragraph_input"); - nature_of_the_change = "replace"; - var paragraph_content = object_being_edited.innerHTML; - // editorLog("paragraph_content from innerHTML", paragraph_content); - paragraph_content = paragraph_content.trim(); - - var cursor_location = object_being_edited.selectionStart; - - editorLog("cursor_location", cursor_location, "out of", paragraph_content.length, "paragraph_content", paragraph_content); - - var parent_and_location = [object_being_edited.getAttribute("data-parent_id"), object_being_edited.getAttribute("data-parent_component")]; - editorLog("parent_and_location", parent_and_location); - editorLog("of ", object_being_edited); - - var prev_id = object_being_edited.getAttribute("data-source_id"); - editorLog("prev_id", prev_id); - editorLog("which contains", internalSource[prev_id]); - - // need to replace the below by split_paragraphs - - // does the textbox contain more than one paragraph? - var paragraph_content_list = paragraph_content.split("

    "); - editorLog("there were", paragraph_content_list.length, "paragraphs, but some may be empty"); - for (var j=0; j < paragraph_content_list.length; ++j) { - editorLog("paragraph", j, "begins", paragraph_content_list[j].substring(0,20)) - } - - var paragraph_content_list_trimmed = []; - - for (var j=0; j < paragraph_content_list.length; ++j) { - // probably each paragraph is wrapped in meaningless div tags - var this_paragraph_contents_raw = paragraph_content_list[j]; - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/<\/div>
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/
    /g, ""); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/<\/div>/g, ""); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/ /g, " "); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/ +
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.replace(/
    /g, "\n"); - this_paragraph_contents_raw = this_paragraph_contents_raw.trim(); - if (!this_paragraph_contents_raw) { editorLog("empty paragraph") } - else { paragraph_content_list_trimmed.push(this_paragraph_contents_raw) } - // editorLog("this_paragraph_contents_raw", this_paragraph_contents_raw); - editorLog("done transforming paragraph", j, "with object_being_edited",object_being_edited); - editorLog("which has contents", this_paragraph_contents_raw) - } - - if (!paragraph_content_list_trimmed.length ) { - // empty, so insert it and delete it later - paragraph_content_list_trimmed = [""]; - } - - for (var j=0; j < paragraph_content_list_trimmed.length; ++j) { - editorLog("_trimmed paragraph", j, "begins", paragraph_content_list_trimmed[j].substring(0,20)) - } - for (var j=0; j < paragraph_content_list_trimmed.length; ++j) { - var this_paragraph_contents = paragraph_content_list_trimmed[j]; - editorLog("this_paragraph_contents", this_paragraph_contents.substring(0,20)); - if (j == 0 && prev_id) { - if (prev_id in internalSource) { - // the content is referenced, so we update the referenced content - // need to check internal content, such as em or math - this_paragraph_contents = extract_internal_contents(this_paragraph_contents); - if (internalSource[prev_id]["content"] != this_paragraph_contents) { - if (internalSource[prev_id]["content"]) { - ongoing_editing_actions.push(["changed", "p", prev_id]); - } else if (this_paragraph_contents) { - ongoing_editing_actions.push(["new", "p", prev_id]); - } - internalSource[prev_id]["content"] = this_paragraph_contents; - editorLog("changed content of", prev_id) - } else if (!this_paragraph_contents) { // adding an empty paragraph - ongoing_editing_actions.push(["empty", "p", prev_id]); - } else { - // this means the contents are nonempty and unchanged, so don't record is as a change - } - possibly_changed_ids_and_entry.push([prev_id, "content", oldornew]); - this_arrangement_of_objects = internalSource[parent_and_location[0]][parent_and_location[1]]; - } else { - errorLog("error: existing tag from input", prev_id, "not in internalSource") - } - } else { // a newly created paragraph - var this_object_internal = {"sourcetag": "p", "title": ""}; //p don't have title - this_object_label = randomstring(); - this_object_internal["xml:id"] = this_object_label; - this_object_internal["parent"] = parent_and_location; - - // put the new p after the previous p in the string describing the neighboring contents - var object_before = new RegExp('(<&>' + prev_id + '<;>)'); - this_arrangement_of_objects = this_arrangement_of_objects.replace(object_before, '$1' + '\n<&>' + this_object_label + '<;>'); - prev_id = this_object_label; - - this_paragraph_contents = extract_internal_contents(this_paragraph_contents); - this_object_internal["content"] = this_paragraph_contents; - internalSource[this_object_label] = this_object_internal - editorLog("just inserted at label", this_object_label, "content starting", this_paragraph_contents.substring(0,11), "which is now", internalSource[this_object_label]); - ongoing_editing_actions.push(["added", "p", this_object_label]); -// here is where we can record that somethign is empty, hence should be deleted - possibly_changed_ids_and_entry.push([this_object_label, "content", "new"]); - } - } - editorLog("parent_and_location", parent_and_location); - editorLog("this_arrangement_of_objects was", internalSource[parent_and_location[0]][parent_and_location[1]]); - internalSource[parent_and_location[0]][parent_and_location[1]] = this_arrangement_of_objects; - editorLog("this_arrangement_of_objects is", this_arrangement_of_objects); - } else if (object_being_edited.classList.contains("displaymath_input")) { - editorLog("found displaymath_input"); - nature_of_the_change = "replace"; - var paragraph_content = object_being_edited.innerHTML; - // editorLog("paragraph_content from innerHTML", paragraph_content); - paragraph_content = paragraph_content.trim(); - - var cursor_location = object_being_edited.selectionStart; - - editorLog("cursor_location", cursor_location, "out of", paragraph_content.length, "paragraph_content", paragraph_content); - - var parent_and_location = [object_being_edited.getAttribute("data-parent_id"), object_being_edited.getAttribute("data-parent_component")]; - - editorLog("parent_and_location", parent_and_location); - editorLog("of ", object_being_edited); - - var prev_id = object_being_edited.getAttribute("data-source_id"); - editorLog("prev_id", prev_id); - editorLog("which contains", internalSource[prev_id]); - - // textbox may contain more than one paragraph - var paragraph_content_list = split_paragraphs(paragraph_content); - var this_paragraph_contents = paragraph_content_list.join("\n\\cr\n"); - this_paragraph_contents = extract_internal_contents(this_paragraph_contents); - - if (!internalSource[prev_id]["content"]) { - ongoing_editing_actions.push(["new", "md", prev_id]); - } else { - ongoing_editing_actions.push(["changed", "md", prev_id]); - } - - internalSource[prev_id]["content"] = this_paragraph_contents - possibly_changed_ids_and_entry.push([prev_id, "content", oldornew]); - - } else if (object_being_edited.getAttribute('data-component') == "title" || - object_being_edited.getAttribute('data-component') == "caption") { - - var this_content_type = object_being_edited.getAttribute('data-component'); - nature_of_the_change = "replace"; - var line_being_edited = object_being_edited; - var line_content = line_being_edited.innerHTML; - line_content = line_content.trim(); - editorLog("the content (is it a title or caption?) is", line_content); - var owner_of_change = object_being_edited.getAttribute("data-source_id"); - var component_being_changed = object_being_edited.getAttribute("data-component"); - editorLog("component_being_changed", component_being_changed, "within", owner_of_change); - if (internalSource[owner_of_change][component_being_changed]) { - ongoing_editing_actions.push(["changed", this_content_type, owner_of_change]); - } else { - ongoing_editing_actions.push(["added", this_content_type, owner_of_change]); - } - // update the title of the object - internalSource[owner_of_change][component_being_changed] = line_content; - possibly_changed_ids_and_entry.push([owner_of_change, this_content_type]); - - } else if (object_being_edited.classList.contains("image_source")) { - // currently this only handles images by URL. - // later do the case of uploading an image. - var image_src = object_being_edited.innerHTML; - - // what is the right way to do this? - image_src = image_src.replace(/
    /g, ""); - image_src = image_src.replace(/<\/div>/g, ""); - image_src = image_src.trim(); - editorLog("changing image src to", image_src); - - var image_being_changed = object_being_edited.getAttribute("data-source_id"); - editorLog("image_being_changed ", image_being_changed); - - if (internalSource[image_being_changed]["source"]) { - ongoing_editing_actions.push(["changed", "source", image_being_changed]); - } else { - ongoing_editing_actions.push(["added", "source", image_being_changed]); - } - internalSource[image_being_changed]["source"] = image_src; - editorLog("image being changed is", internalSource[image_being_changed]); - // possibly_changed_ids_and_entry.push([owner_of_change, "image"]); - possibly_changed_ids_and_entry.push([image_being_changed, "image"]); - - - } else if (inline_tags.includes(object_being_edited.tagName.toLowerCase())) { - editorLog(object_being_edited, "is inline, so processing parent"); - return assemble_internal_version_changes(object_being_edited.parentElement) - } else if (object_being_edited.classList.contains("edit_math_row")) { - nature_of_the_change = "replace"; - var line_being_edited = object_being_edited; - var line_content = line_being_edited.innerHTML; - line_content = line_content.trim(); - editorLog("the content (is it a title?) is", line_content); - var owner_of_change = object_being_edited.getAttribute("id"); - // var component_being_changed = object_being_edited.getAttribute("data-component"); - var component_being_changed = "content"; - editorLog("component_being_changed", component_being_changed, "within", owner_of_change); - // update the title of the object - if (internalSource[owner_of_change][component_being_changed]) { - ongoing_editing_actions.push(["changed", "mrow", owner_of_change]); - } else { - ongoing_editing_actions.push(["added", "mrow", owner_of_change]); - } - internalSource[owner_of_change][component_being_changed] = line_content; - possibly_changed_ids_and_entry.push([owner_of_change, "mrow"]); - - } else { - errorLog("trouble editing", object_being_edited, "AAA", object_being_edited.tagName.toLowerCase(), "not in", inline_tags); - alert("don;t know how to assemble internal_version_changes of " + object_being_edited.tagName) - } - editorLog("finished assembling internal version, which is now:",internalSource); - editorLog(" NUMBER of things chagnged:", possibly_changed_ids_and_entry.length); - return [nature_of_the_change, location_of_change, possibly_changed_ids_and_entry] -} - -function wrap_tag(tag, content, attribute_values) { - // tag is either an XML tag name, or [opening_tag, closing_tag] - - // layout: inline or block or title - // is this the right place to handle empty content? -// editorLog("calling wrap_tag", "tag", tag, "content", content, "attribute_values", attribute_values); - if (!content && !tag) { return "" } - if (!content && !always_empty_tags.includes(tag) && !allowed_empty_tags.includes(tag)) { return "" } - if (!tag) { return content } - - var opening_tag = closing_tag = ""; - - if (typeof tag == "string") { - if (tag) { - opening_tag = "<" + tag; - for (var j=0; j < attribute_values.length; ++j) { - opening_tag += ' ' + attribute_values[j] - } - closing_tag = ""; - } - if (!content && (always_empty_tags.includes(tag) || allowed_empty_tags.includes(tag))) { - opening_tag += "/>"; - closing_tag = ""; - } else { - opening_tag += ">"; - } - - if (tag_display["inline"].includes(tag)) { - // do nothing - } else if (tag_display["title"].includes(tag)) { - opening_tag = "\n" + opening_tag; - closing_tag = closing_tag + "\n" - } else if (tag_display["block-tight"].includes(tag)) { - // do nothing - } else { //the default - opening_tag = "\n" + opening_tag + "\n"; - if (closing_tag) { - closing_tag = "\n" + closing_tag + "\n" - } - } - } else if (tag) { - [opening_tag, closing_tag] = tag - for (var j=0; j < attribute_values.length; ++j) { - opening_tag += ' ' + attribute_values[j] - } - } else { - opening_tag = ""; - closing_tag = ""; - } - if (!opening_tag) { opening_tag = "" } - if (!closing_tag) { closing_tag = "" } - - if (content.includes("N.m")) { editorLog("3 ----- content",content); editorLog("opening_tag", opening_tag) } - - if (opening_tag.startsWith("(.*?)<;>/g, function (match, newid) { - if (newid.startsWith("{")) { - newid = newid.slice(1,-1); - if (newid in output_structure) { - return output_structure[newid] - } else { // don't want to return 'undefined' - return "" - } - } else if (newid.startsWith("(")) { - var this_piece = newid.slice(1,-1); - var this_fcn; - [this_fcn, this_piece] = this_piece.split(","); - return process_value_from_source(this_fcn, this_piece, the_object) - } else { - if (newid in the_object) { - return the_object[newid] - } else { - return "" - } - } - }); - editorLog(" attr_val", attr_val); - if (attr_val && !attr_val.includes('""')) { - output_attributes_values.push(attr_val) - } - } - - editorLog("output_structure", output_tag, "is", output_structure); - editorLog("output_attributes_values", output_attributes_values); - editorLog("output_structure.pieces", output_structure.pieces); - for (var j=0; j < output_structure.pieces.length; ++j) { - var this_piece_output = ""; - var [this_piece, this_tag] = output_structure.pieces[j]; - editorLog("output_structure", output_structure); - // when this_piece is provisional, then this_tag is actually the key for the required content - editorLog(j, "this_piece", this_piece, "this_tag", this_tag, "output_tag", output_tag); - if (this_piece.startsWith("{")) { - this_piece = this_piece.slice(1,-1); - this_piece_output += output_from_source(the_object, objectStructure[this_piece][format], format); - editorLog("wrapping in bracketed tag", this_tag); - the_answer += wrap_tag(this_tag, this_piece_output, []) - } else if (this_piece.startsWith("%")) { - // need to distinguish between the case where this object exists, - // and when it does not exist and we want a placeholder - this_piece = this_piece.slice(1,-1); - editorLog("% % % % % % % % % ", this_piece, "this_tag", this_tag, "the_object", the_object); - editorLog("% % % % % % % % % ", the_object[this_piece]); - editorLog("% % % % % % % % % ", the_object[this_tag]); - if (the_object[this_tag]) { - // var sub_object = {}; - -// Object.assign(sub_object, the_object); - - // sub_object['type-contained'] = this_tag; - // editorLog("sub_object", sub_object); - // this_piece_output = output_from_source(sub_object, objectStructure[this_piece][format], format); - this_piece_output = expand_condensed_source_html(the_object[this_tag],"html?"); - // this_piece_output = output_from_source(sub_object, objectStructure[this_piece][format], format); - the_answer += this_piece_output; - editorLog("this piece exists", this_piece, "this_piece_output", this_piece_output) - } else { - editorLog("making placeholder for", this_piece); - the_answer += wrap_tag("div", "", ['class="placeholder ' + this_piece + '"', 'data-parent_id="' + the_object['xml:id'] + '"', 'data-has="' + this_piece + '"', 'tabindex="-1"', 'data-editable="123456"', 'data-placeholder=""']) - } - } else if (this_piece.startsWith("(")) { - editorLog("whole this_piece", this_piece); - this_piece = this_piece.slice(1,-1); - var this_fcn; - [this_fcn, this_piece] = this_piece.split(","); - var this_content = process_value_from_source(this_fcn, this_piece, the_object) - editorLog(j, "parenthesized content", this_content, "this_piece", this_piece, "XX", this_tag) - the_answer += wrap_tag(this_tag, this_content, []) - } else if (this_piece in the_object) { - this_piece_output = output_from_text(the_object[this_piece], format); - if (format == "pretext" && output_tag == "md" && this_piece == "content") { - // convert \cr to mrow - this_piece_output = this_piece_output.replace(/\s*\\cr\b\s*/g, "\n\n"); - this_piece_output = "\n" + this_piece_output + "\n"; - } - the_answer += wrap_tag(this_tag, this_piece_output, []) - } else { - editorLog("missing piece:", this_tag, "with no", this_piece) - } - } - - // pretty print the output - if (format == "pretext" && !(inline_tags.includes(output_tag)) && !(inline_math.includes(output_tag))) { - the_answer = the_answer.replace(/(^|\n)( *(\w|<))/g, "$1 $2"); - } - the_answer = wrap_tag(output_tag, the_answer, output_attributes_values) -// editorLog("now the answer is", the_answer); - - return the_answer -} - -function output_from_text(text, format) { - editorLog("output_from_text of ", text, "with format", format); - if (text.includes("<&>")) { - // return text.replace(/\s*<&>(.*?)<;>\s*/g, function (match, newid) { return output_from_id(match, newid, format)}) - return text.replace(/<&>(.*?)<;>/g, function (match, newid) { return output_from_id(match, newid, format)}) - } else { - return text - } -} - -function output_from_id(match, the_id, format) { - var the_answer = ""; - editorLog("expanding the_id", the_id); - debugLog("expanding the_id", the_id); - var the_object = internalSource[the_id]; - if (!the_object) { - errorLog("error: no content for", the_id); - return the_id - } - var src_tag = the_object.sourcetag; - editorLog("the_object",the_object); - var output_structure; - if (src_tag in objectStructure) { - output_structure = objectStructure[src_tag][format]; - } else { - errorLog("error: unknown structure:", src_tag); - // so make reasonable assumptions about the structure - output_structure = { - "tag": src_tag, - "pieces": [["content", ""]] - } - } - - editorLog("output_structure", output_structure); - // var output_tag = output_structure.tag; - - the_answer = output_from_source(the_object, output_structure, format); - - return the_answer -} - -function expand_condensed_source_html(text, context) { - editorLog("iiiiiii in expand_condensed_source_html"); - if (text.includes("<&>")) { - editorLog(" qqqqq expand_condensed_source_html", text); - if (context == "edit") { - return text.replace(/<&>(.*?)<;>/g,expand_condensed_src_edit) - } else { - return text.replace(/<&>(.*?)<;>/g,expand_condensed_src_html) - } - } else { - editorLog("returning text XX" + text.substring(0,17) + "YY"); - editorLog("returning from expand_condensed_source_html"); - return text - } -} -function expand_condensed_src_html(match, the_id) { - return html_from_internal_id(the_id, "inner") -} -function expand_condensed_src_edit(match, the_id) { - return html_from_internal_id(the_id, "edit") -} - -function html_from_internal_id(the_id, is_inner) { - // the outer element needs to be constructed as document.createElement - // but the inner content is just plain text - // maybe saying it better: sometimes we want to create an object and - // insert it into the DOM. Other times we just want to construct the - // HTML markup fo rthe object and return that. - var the_object = internalSource[the_id]; - editorLog("making html of", the_object, "is_inner", is_inner, "the_id", the_id); - var sourcetag = the_object["sourcetag"]; - editorLog("which has tag", sourcetag); - - editorLog("m in inline_math", inline_math.includes("m")); - - var html_of_this_object; - var the_html_objects = []; - - if (sourcetag == "image") { - html_of_this_object = output_from_id("", the_id, "html"); - editorLog("html_of_this_object", html_of_this_object); - the_html_objects.push(html_of_this_object); - } else if (tag_type(sourcetag) == "p") { - html_of_this_object = output_from_id("", the_id, "html"); - editorLog("html_of_this_object", html_of_this_object); - the_html_objects.push(html_of_this_object); - } else if (inline_math.includes(sourcetag) && is_inner == "edit") { - // here we are assuming the tag is 'm' - var opening_tag = ''; - return opening_tag + spacemath_to_tex(the_object["content"]) + closing_tag - } else if (["me","men"].includes(sourcetag) && is_inner == "edit") { - var opening_tag = '
    '; - return opening_tag + spacemath_to_tex(the_object["content"]) + closing_tag - } else if (["md","mdn"].includes(sourcetag) && is_inner == "edit") { - var opening_tag = '
    '; - this_content = the_object["content"].replace(/<&>(.*?)<;>/g,expand_condensed_src_edit); - this_content = this_content.replace("MROWsepARATOR", "\n yyyy \n"); - return opening_tag + this_content + closing_tag - } else if (["mrow"].includes(sourcetag) && is_inner == "edit") { - var opening_tag = '
    '; - return opening_tag + "MROW" + spacemath_to_tex(the_object["content"]) + closing_tag - } else if (sourcetag == "xref" && is_inner == "edit") { - // here we are assuming the tag is 'm' - var opening_tag = ''; - return opening_tag + the_object["ref"] + closing_tag - } else { - html_of_this_object = output_from_id("", the_id, "html"); - editorLog("html_of_this_object", html_of_this_object); - the_html_objects.push(html_of_this_object); - - } - - editorLog(" RRRR returning the_html_objects", the_html_objects); - -// the_html_objects = the_html_objects.replace("MROWsepARATOR", "\n\\cr\n"); - return the_html_objects -} - -function insert_html_version(these_changes) { - - var nature_of_the_change = these_changes[0]; - var location_of_change = these_changes[1]; - var possibly_changed_ids_and_entry = these_changes[2]; - - editorLog("nature_of_the_change", nature_of_the_change); - editorLog("location_of_change", location_of_change); - editorLog("possibly_changed_ids_and_entry", possibly_changed_ids_and_entry); - - if (!possibly_changed_ids_and_entry.length) { - editorLog("nothing to change"); - // return "" - } - // we make HTML version of the objects with ids possibly_changed_ids_and_entry, - // and then insert those into the page. - -// here is where we detect deleting? -// or is that after this function is done? - if (nature_of_the_change != "replace") { - editorLog("should be replace, since it is the edit form we are replacing"); - } - - var object_as_html = ""; - var this_object_id, this_object_entry, this_object_oldornew, this_object; - - editorLog(" there are", possibly_changed_ids_and_entry.length, "items to process"); - - for (var j=0; j < possibly_changed_ids_and_entry.length; ++j) { - this_object_id = possibly_changed_ids_and_entry[j][0]; - this_object_entry = possibly_changed_ids_and_entry[j][1]; - this_object_oldornew = possibly_changed_ids_and_entry[j][2]; - editorLog("j=", j, "this thing", possibly_changed_ids_and_entry[j]); - this_object = internalSource[this_object_id]; - editorLog(j, "this_object", this_object); - if (tag_type(this_object["sourcetag"]) == "p" || this_object["sourcetag"] == "li" || tag_type(this_object["sourcetag"]) == "md") { - - var this_new_object = html_from_internal_id(this_object_id); - editorLog("inserting",this_new_object,"before",location_of_change); - location_of_change.insertAdjacentHTML('beforebegin', this_new_object[0]); - object_as_html = document.getElementById(this_object_id); - - } else if (this_object_entry == "title") { - var object_as_html = document.createElement('span'); - object_as_html.setAttribute("class", "title"); - object_as_html.setAttribute('data-editable', 20); - object_as_html.setAttribute('tabindex', -1); - // next line should apply a transform to the source - object_as_html.innerHTML = this_object[this_object_entry]; - editorLog("inserting",object_as_html,"before",location_of_change); - // location_of_change is the .header . We want it to be the .title - location_of_change = location_of_change.querySelector("#actively_editing"); - editorLog("now location_of_change",location_of_change); - location_of_change.insertAdjacentElement('beforebegin', object_as_html); - } else if (this_object_entry == "caption") { - console.log("Error: don't know what to do with 'caption'") - } else if (this_object_entry == "image") { - editorLog("image, this_object", this_object); - var this_new_object = html_from_internal_id(this_object_id); - editorLog("inserting",this_new_object,"before",location_of_change); - location_of_change.insertAdjacentHTML('beforebegin', this_new_object[0]); - object_as_html = document.getElementById(this_object_id); - - } else { - editorLog("trouble making", this_object); - } - MathJax.typesetPromise(); -// MathJax.Hub.Queue(['Typeset', MathJax.Hub, this_object_id]); - } - location_of_change.remove(); - - editorLog("returning from insert html version", object_as_html); - // call mathjax, in case the new content contains math - return object_as_html // the most recently added object, which we may want to - // do something, like add an editing menu -} // insert html version - -function save_edits() { - - var currentState = internalSource; - - editorLog("saving", currentState); - localStorage.setObject("savededits", currentState); - return ""; -} - -function previous_editing() { - var old_internal_source = localStorage.getObject("savededits"); - return (old_internal_source || "") -} - -function local_editing_action(e) { - editorLog("in local editing action for" ,e.code); - var most_recent_edit; - if (e.code == "Escape" || e.code == "Enter") { - editorLog("I saw a Rettttt"); - if (document.activeElement.getAttribute('data-component') == "title" || - document.activeElement.getAttribute('data-component') == "caption") { - editorLog("probably saving a ", document.activeElement.getAttribute('data-component')); - e.preventDefault(); - these_changes = assemble_internal_version_changes(document.activeElement); - final_added_object = insert_html_version(these_changes); - most_recent_edit = ongoing_editing_actions.pop(); - recent_editing_actions.unshift(most_recent_edit); - editorLog("most_recent_edit should be title change", most_recent_edit); - editorLog("final_added_object", final_added_object); - this_char = ""; - prev_char = ""; - save_edits(); - - // .title is in a .heading, and neither have an id - make_current_editing_tree_from_id(final_added_object.parentElement.parentElement.id); - edit_menu_from_current_editing("entering"); - -// editing_input_image - } else if (e.code == "Escape" || (prev_char.code == "Enter" && prev_prev_char.code == "Enter") || document.getElementById("editing_input_image")) { - editorLog("need to save"); -editorLog(" HHH current_editing", current_editing, "with active element", document.activeElement); - - e.preventDefault(); - this_char = ""; - prev_char = ""; - these_changes = assemble_internal_version_changes(document.activeElement); - editorLog(" CCC these_changes", these_changes); - editorLog(" CCC0 these_changes[0]", these_changes[0]); - editorLog("ongoing_editing_actions", ongoing_editing_actions); - editorLog("actively_editing", document.getElementById("actively_editing")); -editorLog(" III current_editing", current_editing, current_editing["tree"][current_editing["level"]]); - previous_added_object = final_added_object; - final_added_object = insert_html_version(these_changes); - editorLog("final_added_object, previous_added_object", final_added_object, previous_added_object); -editorLog(" LLL current_editing", current_editing, current_editing["tree"][current_editing["level"]]); - editorLog("the final_added_object", final_added_object); - editorLog("the actively_editing", document.getElementById("actively_editing")); - editorLog("OO", ongoing_editing_actions.length, " ongoing_editing_actions", ongoing_editing_actions); -/* - editorLog("ongoing_editing_actions[0]", ongoing_editing_actions[0]); - editorLog("ongoing_editing_actions[0][2]", ongoing_editing_actions[0][2]); -*/ - // maybe this next if only handles when we delete by removing the letters in a p? - if (these_changes[0] == "empty") { - editorLog("NN", ongoing_editing_actions.length, " ongoing_editing_actions", ongoing_editing_actions); - editorLog("ongoing_editing_actions[0]", ongoing_editing_actions[0]); - editorLog("ongoing_editing_actions[0][2]", ongoing_editing_actions[0][2]); - editorLog(" going to delete", these_changes[2][0]); - // this is sort-of a hack to detext the end of inserting li - if (ongoing_editing_actions.length == 2 && - ongoing_editing_actions[1][0] == "empty" && - ongoing_editing_actions[1][1] == "p" && - ongoing_editing_actions[0][0] == "new" && - ongoing_editing_actions[0][1] == "li") { - ongoing_editing_actions.pop(); // content was empty, so there is no editing action - ongoing_editing_actions.pop(); - delete_by_id(these_changes[2][0][0], "newempty"); - current_editing["location"][current_editing["level"]] -= 1 - final_added_object = previous_added_object; // this approach makes the updating of current_editing moot? - } else { - delete_by_id(these_changes[2][0][0], "empty"); - } - editorLog("MM", ongoing_editing_actions.length, " ongoing_editing_actions", ongoing_editing_actions); - for (var j=0; j= 0; --j) { - editorLog(" X", j, "the_whole_object[j]", the_whole_object[j]); - document.getElementById("actively_editing").insertAdjacentElement("afterend", the_whole_object[j]) - MathJax.typesetPromise(); - // MathJax.Hub.Queue(['Typeset', MathJax.Hub, the_whole_object[j]]); - } - - editorLog("here is where we need to update current_editing", "parent:", this_parent,"which is",document.getElementById(this_parent[0]), "level:", current_editing["level"], "loation:", current_editing["location"], "tree:", current_editing["tree"]); - $("#actively_editing").remove(); - -editorLog(" DDD current_editing", current_editing, current_editing["tree"][current_editing["level"]]); - - } - - most_recent_edit = ["","",""]; - while (ongoing_editing_actions.length) { - most_recent_edit = ongoing_editing_actions.pop(); - recent_editing_actions.unshift(most_recent_edit); - editorLog(" most_recent_edit", most_recent_edit); - } - editorLog(" 8888 final_added_object", final_added_object); - - save_edits() - - // is this in the right place? - editorLog("most_recent_edit", most_recent_edit); - - // sometimes, such as when adding items to a list, you want to - // automatically start adding something else. - // maybe refactor theorem to add proof after? - if (most_recent_edit[1] == "li") { // added to a list, so try adding again - // note that when adding an li, the neichbor is a p within the actual li neighbor - var new_obj = create_object_to_edit("li", document.getElementById(most_recent_edit[2]).firstElementChild, "afterend") - edit_in_place(new_obj, "new"); - editorLog("now editing the assumed new li"); -editorLog(" GGG current_editing", current_editing, current_editing["tree"][current_editing["level"]]); - - } else { - - editorLog("re-making the tree from final_added_object", final_added_object); - make_current_editing_tree_from_id(final_added_object.id); - editorLog("and then adding a menu"); - edit_menu_from_current_editing("entering"); - } - - } else if ( document.getElementById("actively_editing")) { - document.getElementById("actively_editing").remove(); - // were actively editing, and now just re-making the menu - edit_menu_from_current_editing("entering"); - } else { - // default makng the menu - edit_menu_from_current_editing("entering"); - } - } // esc or enter enter enter - editorLog ("processed an enter"); - } // esc or enter - else { - editorLog("e.code was not one of those we were looking for", e) - } - editorLog("leaving local editing action") -} - -function main_menu_navigator(e) { // we are not currently editing - // so we are building the menu, and possibly moving aroung the document, - //for the user to decide what/how to edit - -// There are 3 modes: -// #enter_choice, data-location="next" -// #enter_choice, data-location="stay" -// above means we are deciding whenter to edit/enter/leave and object, or to move on -// #choose_current -// 3rd option means we already have a menu - - if (document.getElementById("enter_choice")) { - theEnterChoice = document.getElementById("enter_choice"); - editorLog("enter_choice", e); - var theMotion = theEnterChoice.getAttribute("data-location"); - var object_of_interest; - if (theMotion == "stay") { - object_of_interest = theEnterChoice.parentElement.previousSibling; - } else { - object_of_interest = theEnterChoice.parentElement.parentElement; - } - editorLog(" MMN: want to", theMotion, "on", object_of_interest, "from", theEnterChoice) - - editorLog("current_editing", current_editing); - editorLog("theEnterChoice", theEnterChoice); - var current_level = current_editing["level"]; - var current_location = current_editing["location"][current_level]; - var current_siblings = current_editing["tree"][current_level]; - editorLog("current_level", current_level, "current_location", current_location, "current_siblings", current_siblings); - - if ((e.code == "Tab" || e.code == "ArrowDown") && !e.shiftKey) { - e.preventDefault(); - if (current_level == 0) { // at the top, so no "next" object - return "" - } - // go to next sibling, or stage to exit if on last sibling - if (current_location == (current_siblings.length - 1)) { // on last sibling - editorLog("on last sibling, level was", current_level,"siblings was", current_siblings, "tree", current_editing["tree"]); - editorLog("current_location was", current_location); - current_level -= 1; - current_location = current_editing["location"][current_level]; - current_editing["level"] = current_level; - current_editing["location"][current_level] = current_location; - current_siblings = current_editing["tree"][current_level]; - editorLog("current_location is", current_location); - editorLog("stay menu A"); - object_of_interest.classList.remove("may_leave"); - object_of_interest.classList.remove("may_elect"); - edit_menu_from_current_editing("leaving") - } else { - editorLog("moving to the next editable sibling"); - editorLog("level was", current_level,"siblings was", current_siblings, "tree", current_editing["tree"]); - editorLog("current_location was", current_location); - editorLog(current_location, "was", current_editing); - current_location += 1; - object_of_interest.classList.remove("may_leave"); - object_of_interest.classList.remove("may_elect"); - editorLog("current_location is", current_location); - editorLog("stay menu B"); - current_editing["location"][current_level] = current_location; - editorLog(current_location, "is", current_editing); - edit_menu_from_current_editing("entering") - } - } else if ((e.code == "Tab" && e.shiftKey) || e.code == "ArrowUp") { // Shift-Tab to prevous object - e.preventDefault(); - // go to previous sibling, or up one if on first sibling - editorLog("Arrow Up:", "current_location", current_location, "current_level", current_level); - if (theMotion == "stay") { // about to leave, to return to the top of that region - edit_menu_from_current_editing("entering") - } else if (current_location == 0) { - if (!current_level) { // already at the top, so nowhere to go, so do nothing - editorLog("at the top, so can't go up"); - return "" - } - current_level -= 1; - current_editing["level"] = current_level; - current_location = current_editing["location"][current_level]; - editorLog("AA new current_location", current_location, " current_editing['tree']", current_editing["tree"]); - editorLog(" current_editing['tree'][0]", current_editing["tree"][0]); - current_siblings = current_editing["tree"][current_level]; - editorLog("current_siblings", current_siblings); - edit_menu_from_current_editing("entering") - } else { - current_location -= 1; - current_editing["location"][current_level] = current_location; - editorLog("current_siblings", current_siblings); - editorLog("BB new current_location", current_location, "at level", current_level, " current_editing['tree']", current_editing["tree"]); - edit_menu_from_current_editing("entering") - } - } else if (e.code == "Escape" || e.code == "ArrowLeft") { - e.preventDefault(); - if (current_level == 0) { return "" } // already at the top, so nowhere to go, so do nothing -// copied from A1 - editorLog("At ArrowLeft, level was", current_level, "with location", current_editing["location"], "and tree", current_editing["tree"][current_level]); - current_level -= 1; - current_editing["level"] = current_level; - current_location = current_editing["location"][current_level]; - current_siblings = current_editing["tree"][current_level]; - editorLog("now level id", current_level, "with location", current_editing["location"], "and tree", current_editing["tree"][current_level]); - edit_menu_from_current_editing("entering") - } else if (e.code == "Enter" || e.code == "ArrowRight") { - e.preventDefault(); - if (theMotion == "stay") { - edit_menu_from_current_editing("entering"); - return "" - } - var edit_submenu = document.createElement('ol'); - edit_submenu.setAttribute('id', 'edit_menu'); - edit_submenu.setAttribute('class', 'edit_menu'); - - var to_be_edited = object_of_interest; - editorLog("to_be_edited", to_be_edited); - edit_submenu.innerHTML = top_menu_options_for(to_be_edited); - $("#enter_choice").replaceWith(edit_submenu); - document.getElementById('choose_current').focus(); - } - editorLog(" Just handled the case of enter_choice"); - return "" - - } else if (document.getElementById("choose_current")) { - var theChooseCurrent = document.getElementById("choose_current"); - var dataLocation = theChooseCurrent.getAttribute("data-location"); // may be null - var dataAction = theChooseCurrent.getAttribute("data-action"); // may be null - var dataModifier = theChooseCurrent.getAttribute("data-modifier"); // may be null - var dataEnv = theChooseCurrent.getAttribute("data-env"); // may be null - // a hack because of how the menus were originally set up - if (dataEnv == "save") { dataAction = "save" } - var dataEnvParent = theChooseCurrent.getAttribute("data-env-parent"); // may be null - var object_of_interest; - if (document.getElementById("edit_menu_holder")) { - object_of_interest = document.getElementById("edit_menu_holder").parentElement - } else if (document.getElementById("local_menu_holder")) { - object_of_interest = document.getElementById("local_menu_holder").parentElement - } else { - editorLog("something is confused: should be a menu, but isn't"); - if (theChooseCurrent.id) { - make_current_editing_tree_from_id(theChooseCurrent.id); - object_of_interest = theChooseCurrent - } else { - make_current_editing_tree_from_id(theChooseCurrent.parentElement.id); - object_of_interest = theChooseCurrent.parentElement - } - editorLog("made entering menu for", object_of_interest); - edit_menu_from_current_editing("entering") - } - current_level = current_editing["level"]; - current_location = current_editing["location"][current_level]; - current_siblings = current_editing["tree"][current_level]; - editorLog("in choose_current", dataLocation, "of", object_of_interest); - editorLog("dataAction ", dataAction); - editorLog("dataLocation ", dataLocation); - // we have an active menu, and have selected an item - // there are three main sub-cases, depending on whether there is a data-location attribute, - // a data-action attribute, or a data-env attribute. - // That is the primary order in which those attributes are considered - // however, some actions (such as Tab and shift-Tab) are the same - // in each sub-case (because all we are doing is moving up and down the - // current list of options), so we handle those first. - - if ((e.code == "Tab" || e.code == "ArrowDown") && !e.shiftKey) { - e.preventDefault(); - next_menu_item = theChooseCurrent.nextSibling; - editorLog("theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - if (!next_menu_item) { next_menu_item = theChooseCurrent.parentNode.firstChild } - editorLog("theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - if (theChooseCurrent == next_menu_item) { //only one item on menu, so Tab shold move to the next editable item - // if last editable child, go up one - if (current_location == (current_siblings.length - 1)) { - current_level -= 1; - current_location = current_editing["location"][current_level]; - current_editing["level"] = current_level; - current_editing["location"][current_level] = current_location; - edit_menu_from_current_editing("leaving") - } else { - current_location += 1; - editorLog("single item menu, current_location now", current_location); - current_editing["location"][current_level] = current_location; - edit_menu_from_current_editing("entering"); - } - } - theChooseCurrent.removeAttribute("id"); - editorLog("theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - next_menu_item.setAttribute("id", "choose_current"); - editorLog("setting focus on",next_menu_item); - next_menu_item.focus(); - } // Tab - else if ((e.code == "Tab" && e.shiftKey) || e.code == "ArrowUp") { // Shift-Tab to prevous object - e.preventDefault(); - editorLog("just saw a", e.code); - editorLog("focus is on", $(":focus")); - editorLog("saw an",e.code); - next_menu_item = theChooseCurrent.previousSibling; - editorLog("W1 theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - if (!next_menu_item) { next_menu_item = theChooseCurrent.parentNode.lastChild } - editorLog("W2 theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - if (theChooseCurrent == next_menu_item) { //only one item on menu, so Shift-Tab shold move to previous or up one level - if (current_editing["location"][ current_editing["level"] ] == 0) { - current_editing["level"] -= 1; - } else { - current_editing["location"][ current_editing["level"] ] -= 1; - } - editorLog("single item menu, current_level now", current_level); - edit_menu_from_current_editing("entering"); - } else { - theChooseCurrent.removeAttribute("id"); - editorLog("W3 theChooseCurrent", theChooseCurrent, "next_menu_item", next_menu_item); - theChooseCurrent.classList.remove("chosen"); - next_menu_item.setAttribute("id", "choose_current"); - editorLog("setting focus on",next_menu_item); - next_menu_item.focus(); - } - } - else if (e.code == "Escape" || e.code == "ArrowLeft") { - editorLog("processing ESC"); - editorLog("At ArrowLeft, level was", current_level, "xx", current_editing["level"], "with location", current_editing["location"], "and tree", current_editing["tree"][current_level]); - // I think the next if can never be true, because of how to route keystrokes - if (document.getElementById("local_menu_holder")) { // hack for when the interface gets confused - document.getElementById("local_menu_holder").remove() - } else { - editorLog("W4 theChooseCurrent", theChooseCurrent); - // need to go up one level in the menu - var previous_menu_item = theChooseCurrent.parentElement.parentElement; // li > ol > li - if (previous_menu_item.id == "edit_menu_holder") { - var thenewchoice = ''; - thenewchoice += 'edit or add nearby'; - thenewchoice += ''; - previous_menu_item.innerHTML = thenewchoice - } else { - theChooseCurrent.parentElement.remove(); - previous_menu_item.classList.remove('chosen'); - previous_menu_item.parentElement.classList.remove('past'); - previous_menu_item.setAttribute("id", "choose_current"); - previous_menu_item.focus(); - } - } - } - else if (keyletters.includes(e.code)) { - key_hit = e.code.toLowerCase().substring(3); // remove forst 3 characters, i.e., "key" - editorLog("key_hit", key_hit); - theChooseCurrent = document.getElementById('choose_current'); - editorLog('theChooseCurrent', theChooseCurrent ); - editorLog( $(theChooseCurrent) ); - // there can be multiple data-jump, so use ~= to find if the one we are looking for is there - // and start from the beginning in case the match is earlier (make the second selector better) - if ((next_menu_item = $(theChooseCurrent).nextAll('[data-jump~="' + key_hit + '"]:first')[0]) || - (next_menu_item = $(theChooseCurrent).prevAll('[data-jump~="' + key_hit + '"]:last')[0])) { // check there is a menu item with that key - theChooseCurrent.removeAttribute("id", "choose_current"); - next_menu_item.setAttribute("id", "choose_current"); - next_menu_item.focus(); - } else { - // not sure what to do if an irrelevant key was hit - editorLog("that key does not match any option") - } - } - -// Now only Enter and ArrowRight are meaningful in this context. -// The effect will depend on the other attributes of #choose_current: -// dataLocation, dataAction, dataEnv - - else if (e.code == "Enter" || e.code == "ArrowRight") { - e.preventDefault(); - if (dataLocation) { - if (dataLocation == "enter") { // we are moving down into an object - - editorLog("theChooseCurrent", theChooseCurrent); - var object_to_be_entered = object_of_interest; - editorLog("object_to_be_entered", object_to_be_entered); - object_to_be_entered.classList.remove("may_select"); - object_to_be_entered.classList.remove("may_enter"); - object_to_be_entered.classList.remove("may_leave"); - editorLog('next_editable_of(object_to_be_entered, "children")'); - editableChildren = next_editable_of(object_to_be_entered, "children"); - current_level += 1; - current_editing["level"] = current_level; - current_editing["location"][current_level] = 0; - current_editing["tree"][current_level] = editableChildren; - editorLog("current_editing", current_editing); - - editorLog("object_to_be_entered", object_to_be_entered); - editorLog("with some children", editableChildren); - // put menu on the item at the top of the block_we_are_reentering - // this is a repeat of a Tab case, so consolidate - editorLog("menu place 10"); - editorLog("document.activeElement", document.activeElement); - - editorLog("menu on", editableChildren[0]); - edit_menu_for(editableChildren[0], "entering"); - - return "" - // combine the next with previous, because the ony difference is which object receives focus - } else if (dataLocation == "end") { // move to the end of an object - - editorLog("theChooseCurrent", theChooseCurrent); - var object_to_be_entered = object_of_interest; - editorLog("object_to_be_entered", object_to_be_entered); - object_to_be_entered.classList.remove("may_select"); - object_to_be_entered.classList.remove("may_enter"); - object_to_be_entered.classList.remove("may_leave"); - editorLog('next_editable_of(object_to_be_entered, "children")'); - editableChildren = next_editable_of(object_to_be_entered, "children"); - var num_editableChildren = editableChildren.length; - current_level += 1; - current_editing["level"] = current_level; - // current_editing["location"][current_level] = 0; - current_editing["location"][current_level] = num_editableChildren - 1; - current_editing["tree"][current_level] = editableChildren; - editorLog("current_editing", current_editing); - - editorLog("object_to_be_entered", object_to_be_entered); - editorLog("with some children", editableChildren); - // put menu on the item at the top of the block_we_are_reentering - // this is a repeat of a Tab case, so consolidate - editorLog("menu place 10end"); - editorLog("document.activeElement", document.activeElement); - - editorLog("menu on", editableChildren[num_editableChildren - 1]); - edit_menu_for(editableChildren[num_editableChildren - 1], "entering"); - - return "" - } else if ((dataLocation == "beforebegin") || (dataLocation == "afterend") || (dataLocation == "afterbegin")) { // should be the only other options - theChooseCurrent.parentElement.classList.add("past"); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.classList.add("chosen"); - - var parent_id = document.getElementById('edit_menu_holder').parentElement.parentElement.id; - if (!parent_id) { - editorLog(document.getElementById('edit_menu_holder').parentElement.parentElement, "has no id, so going down one level"); - parent_id = document.getElementById('edit_menu_holder').parentElement.id; - } - editorLog("making a menu for", parent_id); - var edit_submenu = document.createElement('ol'); - edit_submenu.innerHTML = menu_options_for(parent_id, "", "base"); - editorLog("just inserted inner menu_options_for(" + parent_id + ")", menu_options_for(parent_id, "", "base")); - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - document.getElementById('choose_current').focus(); - editorLog("focus is on", $(":focus")); - - return "" - } else { - editorLog("Error: unknown dataLocation:", dataLocation) - } - } // dataLocation - - else if (dataAction) { - if (dataAction == "edit") { - editorLog("going to edit", object_of_interest); - edit_in_place(object_of_interest, "old"); - } else if (dataAction == "replace") { // no longer used? - editorLog("replace", object_of_interest, "by id", object_of_interest.id); - replace_by_id(object_of_interest.id, "html") - } else if (dataAction == "stop_editing") { - editorLog("stop_editing", object_of_interest, "by id", object_of_interest.id); - replace_by_id(object_of_interest.id, "html") - eraseCookie(chosen_edit_option_key) - } else if (dataAction == "save") { - save_source(); - edit_menu_from_current_editing("entering"); - } else if (dataAction == "resume") { - editorLog("resuming previous editing session"); - resume_editing() - } else if (dataAction == "change-env-to") { - // shoudl use dataEnv ? - var new_env = theChooseCurrent.getAttribute("data-env"); - editorLog("changing environment to", new_env); - // #edit_menu_holder is in span.type, inside .heading, inside article - to_be_edited = document.getElementById('edit_menu_holder').parentElement.parentElement.parentElement; - editorLog("to_be_edited", to_be_edited); - var id_of_object = to_be_edited.id; - var this_object_source = internalSource[id_of_object]; - editorLog("current envoronemnt", this_object_source); - var old_env = internalSource[id_of_object]["sourcetag"]; - internalSource[id_of_object]["sourcetag"] = new_env; - recent_editing_actions.push([old_env, new_env, id_of_object]); - editorLog("the change was", "changed " + old_env + " to " + new_env + " " + id_of_object); - var the_whole_object = html_from_internal_id(id_of_object); - editorLog("B: the_whole_object", the_whole_object); - $("#" + id_of_object).replaceWith(the_whole_object[0]); // later handle multiple additions - editorLog("just edited", $("#" + id_of_object)); - // since we changed an object which is in - editorLog("curent_editing level", current_editing["level"], "with things", current_editing["tree"][current_editing["level"]]); - current_editing["level"] -= 1; - current_editing["tree"][current_editing["level"]] = next_editable_of(document.getElementById(id_of_object).parentElement, "children"); - editorLog("now curent_editing level", current_editing["level"], "with things", current_editing["tree"][current_editing["level"]]); - edit_menu_from_current_editing("entering"); - return "" - - } else if (dataAction == 'change-env') { - // #edit_menu_holder is in span.type, inside .heading, inside article - current_env = document.getElementById('edit_menu_holder').parentElement.parentElement.parentElement; - current_env_id = current_env.id; - - theChooseCurrent.parentElement.classList.add("past"); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.classList.add("chosen"); - - var edit_submenu = document.createElement('ol'); - editorLog("J1 lookinh for menu options for", current_env_id); - edit_submenu.innerHTML = menu_options_for(current_env_id, "", "change"); - editorLog("just inserted inner menu_options_for(parent_type)", menu_options_for(current_env_id, "", "change")); - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - document.getElementById('choose_current').focus(); - editorLog("focus is on", $(":focus")); - } else if (dataAction == 'modify') { - // #edit_menu_holder is in span.type, inside .heading, inside article - current_env = document.getElementById('edit_menu_holder').parentElement; - current_env_id = current_env.id; - - if (!dataModifier) { - theChooseCurrent.parentElement.classList.add("past"); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.classList.add("chosen"); - - var edit_submenu = document.createElement('ol'); - // this may only hapen when adjusting workspace: - if (!current_env_id) { - edit_submenu.setAttribute('id', 'edit_menu'); - edit_submenu.setAttribute('class', 'edit_menu'); - current_env_id = current_env.getAttribute("data-parent_id"); - editorLog("current_env_id", current_env_id); - } - editorLog("J2a looking for menu options for", current_env_id); - edit_submenu.innerHTML = menu_options_for(current_env_id, "", "modify"); - editorLog("just inserted inner menu_options_for(parent_type)", menu_options_for(current_env_id, "", "modify")); - if (theChooseCurrent.tagName == "SPAN") { // when adjusting workspace - theChooseCurrent.replaceWith(edit_submenu); - } else { - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - } - document.getElementById('choose_current').focus(); - editorLog("focus is on", $(":focus")); - } else if (dataModifier == "done") { - edit_menu_from_current_editing("entering"); - } else if (dataModifier == "arrows") { - // setup_arrow_modify() // is different for images and SBSs - } else { - // this may only hapen when adjusting workspace: - if (!current_env_id) { - current_env_id = current_env.getAttribute("data-parent_id"); - editorLog("current_env_id from parent", current_env_id); - } - modify_by_id(current_env_id, dataModifier) - } - } else if (dataAction == "move-or-delete") { - // almost all repeats from dataAction == 'change-env' - // except for current_env and menu options for. Consolidate - // maybe also separate actions which give anotehr menu, from actions which change content - current_env = document.getElementById('edit_menu_holder').parentElement; - editorLog("current_env", current_env); - current_env_id = current_env.id; - - theChooseCurrent.parentElement.classList.add("past"); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.classList.add("chosen"); - - var edit_submenu = document.createElement('ol'); - editorLog("J3 looking for menu options for", current_env_id); - edit_submenu.innerHTML = menu_options_for(current_env_id, "", "move-or-delete"); - editorLog("just inserted inner menu_options_for(parent_type)", menu_options_for(current_env_id, "", "move-or-delete")); - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - document.getElementById('choose_current').focus(); - editorLog("focus is on", $(":focus")); - } else if (dataAction == "delete") { - current_env = document.getElementById('edit_menu_holder').parentElement; - editorLog("current_env", current_env); - current_env_id = current_env.id; - delete_by_id(current_env_id, "choice") - } else if (["move-local", "move-local-p", "move-local-li"].includes(dataAction)) { - current_env = document.getElementById('edit_menu_holder').parentElement; - current_env_id = current_env.id; - handle_env_id = current_env_id; // we were focused on that p, even though - // we are moving an li. Later refocus on p - if (dataAction == "move-local-li") { - current_env.classList.remove("may_select"); - current_env = current_env.parentElement; - current_env.classList.add("may_select"); - current_env_id = current_env.id; - } - editorLog("current_env", current_env); - move_by_id_local(current_env_id, handle_env_id) - } else if (dataAction == "change-title") { - var this_heading = document.getElementById('edit_menu_holder').parentElement.parentElement; - var this_env_id = this_heading.getAttribute("data-parent_id"); - var new_title_form = standard_title_form(this_env_id); - document.getElementById('edit_menu_holder').parentElement.insertAdjacentHTML("afterend",new_title_form); - document.getElementById('edit_menu_holder').parentElement.remove(); - editorLog("change-title in progress") - document.getElementById('actively_editing').focus(); - } else if (dataAction == "change-caption") { - alert("editing captions not implemented yet"); - return ; - var this_caption = document.getElementById('edit_menu_holder').parentElement; - var this_env_id = this_caption.getAttribute("data-source_id"); - var new_title_form = standard_caption_form(this_env_id); - document.getElementById('edit_menu_holder').parentElement.insertAdjacentHTML("afterend",new_title_form); - document.getElementById('edit_menu_holder').parentElement.remove(); - editorLog("change-caption in progress") - document.getElementById('actively_editing').focus(); - } else { - editorLog("unknown dataAction", dataAction); - alert("I don;t know what to do llllllll dataAction " + dataAction) - } - } // dataAction - else if (dataEnv) { // this has to come after dataAction, because if both occur, - // dataAction says to do something, and dataEnv says what to do - e.preventDefault(); // was this handled earlier? - editorLog("in dataEnv", dataEnv); - editorLog("selected a menu item with no action and no location"); - $("#choose_current").parent().addClass("past"); - editorLog("apparently selected", theChooseCurrent); - theChooseCurrent.removeAttribute("id"); - theChooseCurrent.setAttribute('class', 'chosen'); - - // if (dataEnv in inner_menu_for()) { // object names a collection, so make submenu - if (dataEnv in submenu_options) { // object names a collection, so make submenu - editorLog("making a menu for", dataEnv); - var edit_submenu = document.createElement('ol'); - edit_submenu.innerHTML = menu_options_for("", dataEnv, "inner"); - theChooseCurrent.insertAdjacentElement("beforeend", edit_submenu); - document.getElementById('choose_current').focus(); - - // determine whether both of these next cases can occur - } else if (dataEnv in objectStructure || dataEnvParent in objectStructure) { - // we just selected an action, so do it - // that probably involves adding something before or after a given object - editorLog("making a new", dataEnv, "within", dataEnvParent); - - var before_after = $("#edit_menu_holder > #edit_menu > .chosen").attr("data-location"); - - if (dataEnv == "source") { - alert(" making source"); - show_source(object_of_interest, before_after); - edit_menu_from_current_editing("entering"); - return - // } else if (dataEnv == "save") { - // save_source(); - // edit_menu_from_current_editing("entering"); - } - editorLog("create object to edit",dataEnv, object_of_interest, before_after); - var new_obj = create_object_to_edit(dataEnv, object_of_interest, before_after); - if (!new_obj) { edit_menu_from_current_editing("entering"); return "" } - editorLog("new_obj", new_obj); - edit_in_place(new_obj, "new"); - var new_obj_id = new_obj.id; - editorLog("are we editing id", new_obj_id); - editorLog("are we editing", new_obj); - editorLog(" JJJ current_editing", current_editing["level"], current_editing["location"].length, current_editing["tree"].length, current_editing["tree"][current_editing["level"]]); - editorLog(" current_editing", current_editing); - object_of_interest.classList.remove("may_select"); - object_of_interest.classList.remove("may_enter"); - if (tmp = document.getElementById('edit_menu_holder')) { tmp.remove() } - if (dataEnv.startsWith("sbs")) { - editorLog("added sbs, now add to it", new_obj_id); - editorLog("document.getElementById(new_obj_id)", document.getElementById(new_obj_id)); - var first_panel_id = document.getElementById(new_obj_id).firstElementChild.firstElementChild.id; - editorLog("first_panel_id", first_panel_id, document.getElementById(first_panel_id)); - make_current_editing_tree_from_id(first_panel_id); - edit_menu_from_current_editing("entering"); - } - } else { - editorLog("Error: unknown dataEnv", dataEnv); - editorLog("Or maybe unknown dataEnvParent", dataEnvParent); - editorLog("moving up the menu -- not"); - alert("Sorry, not implemented yet!"); - theChooseCurrent.classList.remove("chosen"); - theChooseCurrent.parentElement.classList.remove("past"); - theChooseCurrent.setAttribute("id", "choose_current"); - } - } - } // // dataEnv - else { - editorLog("key that is not meaningful when navigating a menu:", e.code) - } - } -} // main menu navigator - -editorLog("adding tab listener"); - -document.addEventListener('keydown', logKeyDown); - -function logKeyDown(e) { - if (e.code == "ShiftLeft" || e.code == "ShiftRight" || e.code == "Shift") { return } - prev_prev_char = prev_char; - prev_char = this_char; - this_char = e; - editorLog("logKey",e,"XXX",e.code); - editorLog("are we editing", document.getElementById('actively_editing')); - editorLog("is there already an edit menu?", document.getElementById('edit_menu_holder')); - - var input_region = document.activeElement; - editorLog("input_region", input_region); - // if we are writing something, keystrokes usually are just text input - if (document.getElementById('actively_editing')) { - editorLog(" we are actively editing"); - - if (e.code == "Tab" && !document.getElementById('local_menu_holder')) { - // disabled for now - e.preventDefault(); - return "" - create_local_menu() - } else if (document.getElementById('local_menu_holder')) { - main_menu_navigator(e); - } else { - local_editing_action(e) - } - - } else if (document.getElementById('phantomobject')) { - var the_phantomobject = document.getElementById('phantomobject'); - - if (the_phantomobject.classList.contains('move')) { - move_object(e) - } else { - alert("do not know what to do with that") - } - } else { - main_menu_navigator(e); - } -} - -document.addEventListener('focus', function() { -// editorLog('focused:', document.activeElement) -// editorLog('which has content XX' + document.activeElement.innerHTML + "VV") - prev_prev_focused_element = prev_focused_element; - prev_focused_element = this_focused_element; - this_focused_element = document.activeElement; - $('.in_edit_tree').removeClass('in_edit_tree'); -// $(':focus').parent().addClass('in_edit_tree'); - $('#edit_menu_holder:first-child').parent().addClass('in_edit_tree'); - $('#edit_menu_holder').prev().addClass('in_edit_tree'); -/* - var edit_tree = $(':focus').parents(); - // put little lines on teh right, to show the local heirarchy - for (var i=0; i < edit_tree.length; ++i) { - if (edit_tree[i].getAttribute('id') == "content") { break } - edit_tree[i].classList.add('in_edit_tree') - } -*/ -}, true); - -function initialize_editing(xml_st) { - - createCookie(chosen_edit_option_key,1,0.01); - // console.log("QQQQQQQQ", xml_st, "PPPPPPPPPP"); - // Space Math uses a blank line to indicate mrows - xml_st = xml_st.replace(/<\/mrow>\s*/g, " \n\\cr\n "); - xml_st = xml_st.replace(//g, " "); - xml_st = xml_st.replace(/<\/mrow>/g, " "); - - xmlToObject(xml_st); - record_children(sourceobj); - internalSource = re_transform_source(); - - console.log("mostly done initializing"); - console.log(internalSource); - - current_editing = { - "level": 0, - "location": [0], - // "tree": [ [document.getElementById(top_level_id)] ] - "tree": [ [internalSource.root_data.id] ] - } - console.log("initial current_editing", current_editing); - - e_tree = current_editing["tree"]; - editorLog("e_tree", e_tree); - e_level = current_editing["level"]; - editorLog("e_level", e_level); - e_location = current_editing["location"]; - editorLog("e_location", e_location); - console.log(" making the initial menu for", e_tree[e_level][e_location]); - -// document.getElementById("content").firstElementChild.setAttribute("id", internalSource.root_data.id); - - console.log("replacing by id", internalSource.root_data.id); - replace_by_id(internalSource.root_data.id, "html"); - - edit_menu_for(e_tree[e_level][e_location], "entering") - - console.log("internalSource internalSource internalSource internalSource internalSource internalSource", internalSource); - - // done rebulding HTML, so now process math - // NOT CURRENTLY DOING ANYTHING???? - console.log("ready to edit, so typeset the math"); - document.getElementById("content").classList.add("canedit"); - MathJax.typesetPromise(); -} - -var this_source_txt; -var source_url = window.location.href; -source_url = source_url.replace(/(#|\?).*/, ""); -source_url = source_url.replace(/html$/, "ptx"); -fetch(source_url).then( - function(u){ return u.text();} - ).then( - function(text){ - this_source_txt = text; - // console.log("ppppppppppp this_source_txt",this_source_txt) - if (this_source_txt.includes("404 Not")) { - console.log("Error: source unavailable") - } else if (this_source_txt.includes(" 0) { -// bad code because I dopied and was too lazy to rewrite - parseLog(xml.nodeName, "has attributes", xml.attributes); - for (var j = 0; j < xml.attributes.length; j++) { - var attribute = xml.attributes.item(j); - if (attribute.nodeName == "permid") { this_id = attribute.nodeValue } - // these look backward, but that seems to be how PTX does it currently - if (!this_id && attribute.nodeName == "xml:id") { this_id = attribute.nodeValue } - } - } - if (!this_id) { - this_id = randomstring() - } - return this_id -} - -var sourceobj = {}; -var new_top_id = ""; - -function xmlToObject(xml_st) { - var xml; - if (typeof xml_st == "string") { - // parseLog("xml starts", xml_st.slice(0,50)); - parser = new DOMParser(); - xml = parser.parseFromString(xml_st, "text/xml"); -// xml = $.parseXML(xml_st); - } else { - xml = xml_st - } - - parseLog("xml", xml); - parseLog("xml.nodeName", xml.nodeName, "xml.nodeType", xml.nodeType); -// var obj = {}; - var this_id = ""; - var this_node_content = xml.nodeValue; - - if (xml.nodeType == 9) { // document - xml = xml.documentElement; - } - - parseLog("this_node_content", this_node_content); - - if (xml.nodeType == 1) { // element - this_id = xml_id_of(xml); - if (!new_top_id) { - new_top_id = this_id; - top_level_id = new_top_id; - sourceobj["root_data"] = {"id": new_top_id, "number_base": "X.Y"} - } - parseLog("found this_id", this_id); - var this_entry = {}; - this_entry["xml:id"] = this_id; - if (["ol", "ul", "dl"].includes(xml.nodeName)) { - this_entry["sourcetag"] = "list" -/* - } else if (["me", "men"].includes(xml.nodeName)){ - this_entry["sourcetag"] = "displaymath" -*/ - } else { - this_entry["sourcetag"] = xml.nodeName; - } - - this_node_content = ""; - if (xml.hasChildNodes()) { - for (var i = 0; i < xml.childNodes.length; i++) { - var item = xml.childNodes.item(i); - if (item.nodeType == 8) { - //comment, so skip - } else if (item.nodeType == 3) { // text - this_node_content += item.nodeValue - } else if (item.nodeType == 1) { // element - var sub_node_id = xmlToObject(item); // the contents, in certain cases - if (contained_objects.includes(item.nodeName)) { - this_entry[item.nodeName] = sub_node_id - } else { - this_node_content += "<&>" + sub_node_id + "<;>" - } - } else { - parseLog("what to do with this node?", item) - } - } - } - if (this_node_content) { - this_entry["content"] = this_node_content.trim(); - } - - if (xml.attributes.length > 0) { - // parseLog(xml.nodeName, "has attributes", xml.attributes); - for (var j = 0; j < xml.attributes.length; j++) { - var attribute = xml.attributes.item(j); - if (attribute.nodeName == "source") { this_entry["source"] = attribute.nodeValue } - else if (attribute.nodeName == "ref") { this_entry["ref"] = attribute.nodeValue } - else if (attribute.nodeName == "text") { this_entry["text"] = attribute.nodeValue } - // width for images, widths for sbs - else if (attribute.nodeName == "width") { - var widthvalue = attribute.nodeValue; - if (widthvalue.endsWith("%")) { widthvalue = widthvalue.slice(0,-1); } - this_entry["width"] = widthvalue - } else if (attribute.nodeName == "margins") { - var marginsvalues = attribute.nodeValue.split(' '); - if (marginsvalues.length == 1) { - var margin = marginsvalues[0]; - if (margin.endsWith("%")) { margin = margin.slice(0,-1); } - this_entry["marginleft"] = margin; - this_entry["marginright"] = margin; - } else if (marginsvalues.length == 2) { - var [marginleft, marginright] = marginsvalues; - if (marginleft.endsWith("%")) { marginleft = marginleft.slice(0,-1); } - if (marginright.endsWith("%")) { marginright = marginright.slice(0,-1); } - this_entry["marginleft"] = marginleft; - this_entry["marginright"] = marginright; - } else { - console.log("Error: too many margins in", xml) - } - } - } - } - // The CAT expects a width and margins on an image, but those myght not be - // specified in the source. So add those if not present. - if (xml.nodeName == "image") { - console.log("image attributes", xml.attributes, "ddd", xml.attributes["source"]); - if (!xml.attributes["width"]) { - console.log("no width"); - this_entry["width"] = 100; - } - if (!xml.attributes["margins"]) { - console.log("no margins"); - this_entry["marginleft"] = 0; - this_entry["marginright"] = 0; - } - } - - if (xml.attributes) { - parseLog(xml, "has attributes", xml.attributes) - } -// parseLog("item", item); - if (contained_objects.includes(xml.nodeName)) { - return this_node_content - } else { - sourceobj[this_id] = this_entry - return this_id - } - } else if (xml.nodeType == 8) { - // comment node, so do nothing - this_node_content = "" - } else if (xml.nodeType == 3) { // text - // can this, or the previous case, actually happen? - } else { - console.log("failed to deal with", xml) - } -} - -function record_children(internal_src) { - for (key in internal_src) { - var this_item = internal_src[key]; - if ("content" in this_item) { // skip empty tags - var this_content = this_item["content"]; - parseLog("this_content", this_content); - var child_items = this_content.match(/<&>.*?<;>/g) || ""; - for (var j=0; j < child_items.length; ++j) { - var this_child = child_items[j].slice(3,-3); - parseLog("this_child", this_child, "has a parent", key); - internal_src[this_child]["parent"] = [key, "content"] - } - } - // need to handle content and statement better - if ("statement" in this_item) { // skip empty tags - var this_statement = this_item["statement"]; - // parseLog("this_statement", this_statement); - var child_items = this_statement.match(/<&>.*?<;>/g) || ""; - for (var j=0; j < child_items.length; ++j) { - var this_child = child_items[j].slice(3,-3); - // parseLog("this_child", this_child, "has a parent", key); - internal_src[this_child]["parent"] = [key, "statement"] - } - } - if ("proof" in this_item) { // skip empty tags - var this_proof = this_item["proof"]; - // parseLog("this_statement", this_statement); - var child_items = this_proof.match(/<&>.*?<;>/g) || ""; - for (var j=0; j < child_items.length; ++j) { - var this_child = child_items[j].slice(3,-3); - // parseLog("this_child", this_child, "has a parent", key); - internal_src[this_child]["parent"] = [key, "proof"] - } - } - } - return internal_src -} - -// transofrm again, to un-wrap list in p - -/* rewrite with sourceobj not global */ -function re_transform_source() { - var ids_to_delete = []; - for (var id in sourceobj) { - var this_item = sourceobj[id]; - if (this_item["sourcetag"] == "list") { - // I think this takes the list out of its parent p, - // but I forgot to write this comment when I first wrote the code. - parseLog("found a list", this_item); - var [parent_id, parent_content] = this_item["parent"]; - parseLog("with parent", sourceobj[parent_id]); - if (sourceobj[parent_id]["sourcetag"] == "p") { - var [parent_parent_id, parent_parent_content] = sourceobj[parent_id]["parent"]; - parseLog("with parents parent", sourceobj[parent_parent_id]); - // need to skip the intermediate parent - var old_p_p_content = sourceobj[parent_parent_id][parent_parent_content]; - var new_p_p_content = old_p_p_content.replace("<&>" + parent_id + "<;>", "<&>" + id + "<;>"); - sourceobj[parent_parent_id][parent_parent_content] = new_p_p_content; - sourceobj[id]["parent"] = [parent_parent_id, parent_parent_content]; - // then eliminate the intermediate parent - parseLog("deleting", parent_id); - // delete sourceobj[parent_id]; - ids_to_delete.push(parent_id); - parseLog("now sourceobj[parent_parent_id]", sourceobj[parent_parent_id]) - } - } else if (this_item["sourcetag"] == "image") { - if ("width" in this_item && !("marginleft" in this_item)) { - parseLog("no width in" + this_item["xml:id"]) - var width = parseInt(this_item["width"]); - var margins = (100 - width)*0.5; - this_item["marginleft"] = margins; - this_item["marginright"] = margins; - } - } else if (["md", "mdn", "me", "men"].includes(this_item["sourcetag"])) { - // to handle the case of more than one displaymath in a p, - // we do it in two passes. First we just record the ids of the me/men's. - // Then we simplify the problem by handling the displaymath in the - // order they occur. - parseLog("found displaymath", this_item); - parseLog("with parent", sourceobj[this_item["parent"][0]]); - var displaymath_id= this_item["xml:id"]; - if ("includedmath" in sourceobj[this_item["parent"][0]]) { - sourceobj[this_item["parent"][0]]["includedmath"].push("<&>" + displaymath_id + "<;>") - } else { - sourceobj[this_item["parent"][0]]["includedmath"] = ["<&>" + displaymath_id + "<;>"] - } - } else if (["caption"].includes(this_item["sourcetag"])) { - parseLog("found a caption", this_item); - var [parent_id, parent_content] = this_item["parent"]; - parseLog("with parent", sourceobj[parent_id]); - if (sourceobj[parent_id]["sourcetag"] == "figure") { - var old_p_content = sourceobj[parent_id][parent_content]; - var new_p_content = old_p_content.replace("<&>" + id + "<;>", ""); - sourceobj[parent_id][parent_content] = new_p_content; - sourceobj[parent_id]["captiontext"] = sourceobj[id]["content"]; - // then eliminate the caption object, because now it is an attribute of a figure - // delete sourceobj[id]; - ids_to_delete.push(id); - parseLog("now sourceobj[parent_id]", sourceobj[parent_id]) -alert("testing") - } else { alert("error: caption not in figure") } - } - } - // now go through and fix the "p" containing displaymath - for (var id in sourceobj) { - var this_item = sourceobj[id]; - if (this_item["sourcetag"] == "p") { - if ("includedmath" in this_item) { - console.log("found includedmath", this_item); - var outer_parent = this_item["parent"]; - var context_of_outer_parent = sourceobj[outer_parent[0]][outer_parent[1]]; - console.log("this item id", id, "with parent", outer_parent, "in context", context_of_outer_parent); - var these_includedmath = this_item["includedmath"]; - var this_content = this_item["content"]; - var these_includedmath_index = []; - for (var j=0; j < these_includedmath.length; ++j) { - var this_math_tag = these_includedmath[j]; - these_includedmath_index.push([this_content.indexOf(this_math_tag),this_math_tag]); - console.log("this_math_tag", this_math_tag, "has index", this_content.indexOf(this_math_tag)) - } - these_includedmath_index.sort(); - parseLog("sorted list", these_includedmath_index) - - // var displaymath_parent_original_content = sourceobj[outer_parent[0]]["content"]; - parseLog("ocntent before splitting up", context_of_outer_parent); - this_math_tag = these_includedmath_index[0][1]; - parseLog("this_math_tag", this_math_tag); - var this_math_id = this_math_tag.slice(3,-3); - parseLog("this_math_id", this_math_id); - parseLog("with source", sourceobj[this_math_id]); - // move punctuation inside the display math - // (for easier editing. move it back out later) - var find_char_after = new RegExp('^(.*' + this_math_tag + ")(.)\s*(.*)$", "s"); - var char_after = this_content.replace(find_char_after, "$2"); - if ([".", ",", ";", ":"].includes(char_after)) { - console.log("found punctuation", char_after); - this_content = this_content.replace(find_char_after, "$1$3"); // go back an omit white space - sourceobj[this_math_id]["content"] += char_after - } - // the original p ends at the first displaymath - var displaymath_id_and_before = new RegExp('^.*' + this_math_tag, "s"); // s = dotAll - var displaymath_id_and_after = new RegExp(this_math_tag + '.*$', "s"); - sourceobj[id]["content"] = - this_content.replace(displaymath_id_and_after, ""); - sourceobj[id]["sourcetag"] = "ip" - this_content = this_content.replace(displaymath_id_and_before, ""); - parseLog("updated this_content", this_content); - // the first displaymath now has a different parent - sourceobj[this_math_id]["parent"] = outer_parent; - // that parent needs to know where to put the first displaymath - context_of_outer_parent = context_of_outer_parent.replace("<&>" + id + "<;>", "<&>" + id + "<;>" + "\n" + this_math_tag); - parseLog("updated context_of_outer_parent", context_of_outer_parent); - sourceobj[outer_parent[0]][outer_parent[1]] = context_of_outer_parent; - // here need to check if this_content is nonempty (after removing trailing white space - var new_id = "XXXX" + randomstring(); - sourceobj[new_id] = {"xml:id":new_id, "sourcetag": "mp"}; - sourceobj[new_id]["content"] = this_content; - sourceobj[new_id]["parent"] = outer_parent; - context_of_outer_parent = context_of_outer_parent.replace(this_math_tag, this_math_tag + "\n" + "<&>" + new_id + "<;>"); - sourceobj[outer_parent[0]][outer_parent[1]] = context_of_outer_parent; - for (var j=1; j < these_includedmath_index.length; ++j) { - this_math_tag = these_includedmath_index[j][1]; - this_math_id = this_math_tag.slice(3,-3); - - // move punctuation inside the display math - // (for easier editing. move it back out later) - var find_char_after = new RegExp('^(.*' + this_math_tag + ")(.)\s*(.*)$", "s"); - var char_after = this_content.replace(find_char_after, "$2"); - if ([".", ",", ";", ":"].includes(char_after)) { - console.log("found punctuation", char_after); - this_content = this_content.replace(find_char_after, "$1$3"); // go back an omit white space - sourceobj[this_math_id]["content"] += char_after - } - - displaymath_id_and_before = new RegExp('^.*' + this_math_tag, "s"); // s = dotAll - displaymath_id_and_after = new RegExp(this_math_tag + '.*$', "s"); - sourceobj[new_id]["content"] = this_content.replace(displaymath_id_and_after, ""); - this_content = this_content.replace(displaymath_id_and_before, ""); - // this displaymath now has a different parent - sourceobj[this_math_id]["parent"] = outer_parent; - // that parent needs to know where to put the first displaymath - context_of_outer_parent = context_of_outer_parent.replace("<&>" + new_id + "<;>", "<&>" + new_id + "<;>" + "\n" + this_math_tag); - sourceobj[outer_parent[0]][outer_parent[1]] = context_of_outer_parent; - // omit next if this_content is only white space - new_id = "XXXX" + randomstring(); - sourceobj[new_id] = {"xml:id":new_id, "sourcetag": "mp"}; - sourceobj[new_id]["content"] = this_content; - sourceobj[new_id]["parent"] = outer_parent; - context_of_outer_parent = context_of_outer_parent.replace(this_math_tag, this_math_tag + "\n" + "<&>" + new_id + "<;>"); - sourceobj[outer_parent[0]][outer_parent[1]] = context_of_outer_parent; - } - sourceobj[new_id]["sourcetag"] = "fp" - } - } - } - // trim leading white space in paragraph content - for (var id in sourceobj) { - var this_item = sourceobj[id]; - if (["p", "ip", "mp", "fp"].includes(this_item["sourcetag"])) { - var this_content = sourceobj[id]["content"]; - this_content = this_content.replace(/\n +/g, "\n"); - sourceobj[id]["content"] = this_content; - } else if (["me", "men", "md", "mdn"].includes(this_item["sourcetag"])) { - var this_content = sourceobj[id]["content"]; - this_content = this_content.replace(/\n +/g, "\n "); - sourceobj[id]["content"] = this_content; - } - // next also needs table (or whatever it is that has a caption) - if (["figure"].includes(this_item["sourcetag"])) { - editorLog("adjusting a figure", this_item); - // ??? next line should involve captiontext instead of caption ? - var this_caption = sourceobj[id]["caption"]; - this_caption = this_caption.replace(/\n +/g, "\n"); - sourceobj[id]["captiontext"] = this_caption; - } - } - - for (var j=1; j < ids_to_delete.length; ++j) { - // delete sourceobj[ids_to_delete[j]] - } - - return sourceobj; -} - diff --git a/slides/_static/pretext/js/highlight.js b/slides/_static/pretext/js/highlight.js deleted file mode 100755 index 98f906a..0000000 --- a/slides/_static/pretext/js/highlight.js +++ /dev/null @@ -1,480 +0,0 @@ - -/* -highlight_css = document.createElement('style'); -highlight_css.type = "text/css"; -highlight_css.id = "highlight_css"; -document.head.appendChild(highlight_css); -var css_for_hl = 'span.hl { background: yellow; }\n'; -css_for_hl += '#hlmenu { position: absolute; top: 300px; left: 200px;}\n'; -css_for_hl += '#hlmenu { padding: 8px; background: #FFF; }\n'; -css_for_hl += '#hlmenu { box-shadow: 8px 10px 5px #888; border: 1px solid #aaa;}\n'; -css_for_hl += '#hlmenu .hldelete { background: #fdd; }'; -css_for_hl += '#hlmenu .hldelete:hover { background: #fbb; }'; -css_for_hl += '#hlmenu .hlcopy { background: #ddf; }'; -css_for_hl += '#hlmenu .hlcopy:hover { background: #bbf; }'; -css_for_hl += '#hlmenu .dismiss:hover { background: #ff9; }'; -css_for_hl += '#hlmenu > div { padding: 4px; font-size: 90%}'; -highlight_css.innerHTML = css_for_hl; -*/ - -hlmenu = document.createElement('div'); -hlmenu.id = "hlmenu"; -hlmenu.style.display = "none"; -hlmenu_contents = '
    copy to clipboard
    \n'; -hlmenu_contents += '
    delete highlight
    \n'; -hlmenu_contents += '
    dismiss menu
    '; -hlmenu.innerHTML = hlmenu_contents; -document.body.appendChild(hlmenu); - -var all_highlights = localStorage.getObject("all_highlights"); -if (!all_highlights) { - console.log("no highlights on this page",all_highlights); - all_highlights= {}; -} else { - console.log("highlights already",all_highlights); -} - -console.log("all_highlights.keys()", Object.keys(all_highlights)); -console.log("waiting for MathJax"); -MathJax.Hub.Register.StartupHook("End",function () { - // need to wait for MathJax, because MathJax changes the number of nodes in a paragraph - console.log("MathJax is done"); - display_all_highlights(all_highlights, Object.keys(all_highlights), 0); -}); - - -/* -for (var key in all_highlights) { - var this_key = key; - var these_highlights = all_highlights[key]; - console.log("adding highlights to", key); -// await display_highlights_on(key, all_highlights[key], 0) - for (var i=0; i< these_highlights.length; ++i) { - hl = these_highlights[i]; - console.log("inserting highlight",i,"which is",hl, "on", key); - // display_one_highlight(key, hl); -//fails because - setTimeout(function() { display_one_highlight(this_key, hl)}, i*2000); - - } -} -*/ - -function index_of_child(child) { - var i = 0; - while( (child = child.previousSibling) != null ) - {i++ } - return i -} - -function increment_id(list_of_things_with_ids) { // assume ids are of the form xxxxNN with N a digit and x a non-digit - console.log("incrementing id on", list_of_things_with_ids); - if (list_of_things_with_ids.length == 0) { - return 0 - } - - id_start = list_of_things_with_ids[0]["id"].replace(/^(.*?)[0-9]+$/, "$1"); - current_endings = []; - for (var i=0; i < list_of_things_with_ids.length; ++i) { - current_endings.push(list_of_things_with_ids[i]["id"].replace(/^.*?([0-9]+)$/, "$1")); - } - console.log("existing id endings", current_endings); - current_max = Math.max(...current_endings); - return id_start + (parseInt(current_max) + 1) -} - -function enclosing_p_or_li(obj) { - console.log("obj.tagName", obj.tagName, "ggg",obj); - if (!obj) { - console.log("problem with previous object"); - return null - } - else if (obj.tagName == 'P' || obj.tagName == 'LI') { - return obj - } - return enclosing_p_or_li(obj.parentNode) -} - -// If you just loop ofer the highlights to add them, -// you end up with a race condition because each highlight changes -// the structure of the paragraph. -async function display_one_highlight(parent_id, hl) { - var the_parent = document.getElementById(parent_id); - if (!the_parent) { - console.log("this id not on this page:", parent_id); - return - } - console.log("setting", hl, "on", parent_id); - var st_node_ind = hl['start_nn']; - var st_offset = hl['start_offset']; - var end_node_ind = hl['end_nn']; - var end_offset = hl['end_offset']; - console.log("st_node_ind", st_node_ind, "st_offset", st_offset, "end_node_ind", end_node_ind, "end_offset", end_offset); - // other error checks: same parent - if (st_offset < 0 || st_node_ind > the_parent.childNodes.length || end_node_ind > the_parent.childNodes.length || st_offset > the_parent.childNodes[st_node_ind].textContent.length || end_offset < 0 || end_offset > the_parent.childNodes[end_node_ind].textContent.length) { - console.log("highlight data inconsistent with paragraph structure that contains", the_parent.childNodes.length, "nodes"); - return - } - - let this_range = document.createRange(); - console.log("setting this_range.setStart", the_parent.childNodes[st_node_ind], "with offset", st_offset, "out of", the_parent.childNodes[st_node_ind].textContent.length); - this_range.setStart(the_parent.childNodes[st_node_ind], st_offset); - this_range.setEnd(the_parent.childNodes[end_node_ind], end_offset); - var inside_part = document.createElement("span") - inside_part.classList.add("hl"); - inside_part.id = hl['id']; - console.log("inside_part", inside_part, "going inside this_range",this_range); - console.log("in the_parent",the_parent); - this_range.surroundContents(inside_part); - return; -} - -//var display_highlights_on = function(parent_id, highlights_on, ind) { -async function display_highlights_on(parent_id, highlights_on, ind) { - console.log("display_highlights_on", parent_id, "xxxx", ind, "out of", highlights_on.length); - if (ind < highlights_on.length) { - console.log("about to display one highlight, number", ind, "on", parent_id); - await display_one_highlight(parent_id, highlights_on[ind]); - ++ind; - await display_highlights_on(parent_id, highlights_on, ind) - } - return; -} - -async function display_all_highlights(every_highlight, hl_p_keys, i) { - console.log("making hl on", hl_p_keys[i]); - if (i < hl_p_keys.length) { - await display_highlights_on(hl_p_keys[i], every_highlight[hl_p_keys[i]], 0); - ++i; - await display_all_highlights(every_highlight, hl_p_keys, i) - } - return; -} - -var DELAY = 500, clicks = 0, timer = null; -$("p[id], li[id]").on("click", function(e) { - clicks++; //count clicks - - if(clicks === 1) { - - if (e.target.classList.contains("hl")) { - modifyhighlight(e); - clicks = 0; - } else { - timer = setTimeout(function() { - newhighlight() - clicks = 0; //after action performed, reset counter - }, DELAY); - - } - - - } else if (clicks === 2) { - timer2 = setTimeout(function() { - clearTimeout(timer); - // alert("Double Click"); - clicks = 0; - }, DELAY/2); - } else { - clearTimeout(timer); //prevent single-click action - clearTimeout(timer2); //prevent double-click action - // alert("Triple Click"); //perform triple-click action - clicks = 0; //after action performed, reset counter - } -}); - -function save_highlights() { - hl_data = {"action": "save", "user": uname, "pw": emanu, "bookID": bodyID, "type": "highlights", "hl": JSON.stringify(all_highlights)} - $.ajax({ - url: "https://aimath.org/cgi-bin/u/highlights.py", - type: "post", - data: JSON.stringify(hl_data), - dataType: "json", - success: function(data) { - console.log("something", data, "back from highlight"); - // alert(data); - }, - error: function(errMsg) { - console.log("seems to be an error?",errMsg); - // alert("Error\n" + errMsg); - } - }); - - console.log("just ajax sent", JSON.stringify(reading_questions_object)); -} - -function newhighlight() { - var this_selection = window.getSelection(); - console.log("UUUUUUUUUUUUUUUUUUUUUUUUUUU"); - console.log("selection", this_selection, "as string", this_selection.toString(), "length", this_selection.toString().length); - if(this_selection.toString().length >= 3) { - console.log("this_selection", this_selection); - console.log("this_selection parentNode", this_selection.parentNode); - - num_selected_ranges = this_selection.rangeCount; - console.log("this_selection.rangeCount", this_selection.rangeCount); - console.log("this_selection.getRangeAt(0)", this_selection.getRangeAt(0)); - console.log("this_selection.getRangeAt(num_selected_ranges)", this_selection.getRangeAt(num_selected_ranges-1)); - console.log("this_selection.getRangeAt(0).startContainer", this_selection.getRangeAt(0).startContainer); - console.log("this_selection.getRangeAt(0).endContainer", this_selection.getRangeAt(0).endContainer); - console.log("this_selection.getRangeAt(-1).startContainer", this_selection.getRangeAt(num_selected_ranges-1).startContainer); - console.log("this_selection.getRangeAt(-1).endContainer", this_selection.getRangeAt(num_selected_ranges-1).endContainer); - console.log("start equals end", this_selection.getRangeAt(0).startContainer == this_selection.getRangeAt(0).endContainer); - console.log("this_selection.getRangeAt(0).startContainer.parent", this_selection.getRangeAt(0).startContainer.parentNode); - console.log("this_selection.getRangeAt(0).endContainer.parent", this_selection.getRangeAt(0).endContainer.parentNode); - starting_parent = enclosing_p_or_li(this_selection.getRangeAt(0).startContainer); - starting_parent_id = starting_parent.id; - ending_parent_id = enclosing_p_or_li(this_selection.getRangeAt(num_selected_ranges-1).endContainer).id; - console.log("starting parent", enclosing_p_or_li(this_selection.getRangeAt(0).startContainer)); - console.log("starting_parent.childNodes", starting_parent.childNodes); - console.log("starting_parent.childNodes.length", starting_parent.childNodes.length); - console.log("ending parent", enclosing_p_or_li(this_selection.getRangeAt(0).endContainer)); - console.log("index of starting node", index_of_child(this_selection.getRangeAt(0).startContainer)); - console.log("which is", starting_parent.childNodes[index_of_child(this_selection.getRangeAt(0).startContainer)]); - console.log("index of ending node", index_of_child(this_selection.getRangeAt(num_selected_ranges-1).endContainer)); - console.log("which is", starting_parent.childNodes[index_of_child(this_selection.getRangeAt(num_selected_ranges-1).endContainer)]); - console.log("XXXXXXXXXXXXXXXXXXXXXXX"); - starting_node = this_selection.getRangeAt(0); - starting_node_container = starting_node.startContainer; - starting_node_number = index_of_child(starting_node_container); - starting_node_offset = starting_node.startOffset; - console.log("starting_node", starting_node, "starting_node_container", starting_node_container); - console.log("starting_parent.childNodes[0]", starting_parent.childNodes[0]); - ending_node = this_selection.getRangeAt(num_selected_ranges-1); - ending_node_container = ending_node.endContainer; - console.log("ending_node", ending_node, "ending_node_container", ending_node_container); - ending_node_number = index_of_child(ending_node_container); - ending_node_offset = ending_node.endOffset; - console.log("selection starts at character number", starting_node.startOffset, "in node number", index_of_child(starting_node), "of node", starting_node.startContainer, "within", starting_node.startContainer.parentNode,"which is", starting_node); - console.log("selection ends at character number", ending_node.endOffset, "in node number", index_of_child(ending_node_container), "of node", ending_node.endContainer, "within", ending_node.endContainer.parentNode, "which is", ending_node); - -// let this_range = document.createRange(); -// this_range.setStart(starting_parent.childNodes[starting_node_number], starting_node_offset); -// this_range.setEnd(document.getElementById(starting_parent_id).childNodes[ending_node_number], ending_node_offset); -// test_inside_part=document.createElement("span") -// test_inside_part.classList.add("gggg"); -// this_range.surroundContents(test_inside_part); - console.log("num_selected_ranges", num_selected_ranges, "starting_parent_id", starting_parent_id, "ending_parent_id", ending_parent_id); - this_selection.empty(); - console.log("starting_parent_id", starting_parent_id, "ending_parent_id", ending_parent_id); - if (starting_parent_id != ending_parent_id) { - alert("Highlights must be within\none paragraph or list item."); - return "" - } - if (starting_parent != starting_node_container.parentNode) { - starting_node_number = index_of_child(starting_node_container.parentNode) - 1; - console.log("new starting node",starting_node_number, " which is", starting_parent.childNodes[starting_node_number]); - starting_node_offset = starting_parent.childNodes[starting_node_number].length; - } - if (starting_parent != ending_node_container.parentNode) { - ending_node_number = index_of_child(ending_node_container.parentNode) + 1; - console.log("new edngin node",ending_node_number, " which is", starting_parent.childNodes[ending_node_number]); - ending_node_offset = 0; - } - console.log("starting_parent eq st cont parent", starting_parent == starting_node_container.parentNode, "starting_parent eq end cont parent", starting_parent == ending_node_container.parentNode); -// display_one_highlight(starting_parent_id, starting_node_number, starting_node_offset, ending_node_number, ending_node_offset); -// console.log("this_range", this_range); - this_highlight = {"start_nn": starting_node_number, - "start_offset": starting_node_offset, - "end_nn": ending_node_number, - "end_offset": ending_node_offset}; - if (starting_parent_id in all_highlights) { - console.log("the starting_parent_id", starting_parent_id, "is already in all_highlights", all_highlights); - new_id = increment_id(all_highlights[starting_parent_id]); - this_highlight['id'] = new_id; - all_highlights[starting_parent_id].push(this_highlight) - } else { - this_highlight['id'] = starting_parent_id + "-" + "hl" + 1; - all_highlights[starting_parent_id] = [this_highlight] - } - display_one_highlight(starting_parent_id, this_highlight); - localStorage.setObject("all_highlights", all_highlights); - - if (uname != "guest" && role=="student") { - console.log("saving highlights"); - save_highlights(); - } - console.log("all_highlights", all_highlights); - return ""; - } -} - -function modifyhighlight(e) { - this_hl = e.target; - console.log("clicked hl", this_hl.id); - - var x = e.clientX, y = e.clientY; - console.log("x", x, "y", y); - document.getElementById("hlmenu").style.top = (y - 10 + $(window).scrollTop()) + 'px'; - document.getElementById("hlmenu").style.left = (x + 20) + 'px'; - document.getElementById("hlmenu").style.display = 'block'; - document.getElementsByClassName("hlcopy")[0].setAttribute("data-hlid", this_hl.id); - document.getElementsByClassName("hldelete")[0].setAttribute("data-hlid", this_hl.id); -// tooltipSpan.style.left = (x + 20) + 'px'; - - var parent_id = this_hl.id.replace(/^(.*)-[^\-]*$/, "$1"); - var number_of_this_highlight = this_hl.id.slice(-1); - var these_highlights = all_highlights[parent_id]; - var this_highlight = these_highlights[number_of_this_highlight-1]; - console.log("parent id", parent_id, "nunber",number_of_this_highlight); - var num_child_nodes = this_hl.childNodes.length; - console.log("which has", this_hl.childNodes.length, "child nodes"); - for (var i=0; i < num_child_nodes; ++i) { - console.log(i, "node is", this_hl.childNodes[i]) - } - console.log("highlights on this item",all_highlights[parent_id], "of which we clicked", these_highlights[number_of_this_highlight - 1], -"number", number_of_this_highlight, "out of", these_highlights.length ); - for (var i=0; i 0) { - all_highlights[parent_id] = new_highlights - } else { - delete all_highlights[parent_id] - } - - localStorage.setObject("all_highlights", all_highlights); - - - // hide the current highlight - $(hl_to_delete).replaceWith(hl_to_delete.innerHTML); - - document.getElementById(parent_id).normalize(); // because a previous step creates adjacent text nodes - - document.getElementById("hlmenu").style.display = 'none'; -}); - -$('body').on('click','.dismiss', function(e){ - console.log(".dismiss of",this); - the_parent = this.closest("[id]"); - the_parent.style.display = 'none'; -}); diff --git a/slides/_static/pretext/js/instructor.js b/slides/_static/pretext/js/instructor.js deleted file mode 100755 index df5a43c..0000000 --- a/slides/_static/pretext/js/instructor.js +++ /dev/null @@ -1,131 +0,0 @@ - -var icon = { - "warning": "⚠️ ", - "commentary": "☕", - "media": "▶", - "tip": "📣", - "worksheet": "📄", - "assesment": "A+", - "slides": "📻", - "outcomes": "✓" -}; - -var html_words_of = { - "warning": "Common pitfall", - "commentary": "Alert", - "media": "An amusing demo", - "tip": "Tip: discussion point", - "worksheet": "Worksheet:", - "assesment": "Sample exam:", - "slides": "Slides:", - "outcomes": "Learning outcomes" -} - -//
       Word PTX PDF
    ", - -var type_name = { - "warning": "warning", - "commentary": "commentary", - "media": "media", - "tip": "tip", - "worksheet": "worksheet", - "assesment": "assesment", - "slides": "slides", - "outcomes": "outcomes" -}; - -console.log("in instructor.js", role, "role", logged_in, "logged_in"); - -if (role=="instructor") { - console.log(" loading instructor resources"); - - var instructor_resources = document.querySelectorAll(".instructor"); - - console.log('instructor_resources.length', instructor_resources.length); - - var icons_on_this_page = []; - - for (var j=0; j < instructor_resources.length; ++j) { - var instructor_resource = instructor_resources[j]; - var instructor_resource_parent_id = instructor_resource.parentNode.id; - console.log(" XXXXXXXXXXXX instructor_resource.parentNode", instructor_resource.parentNode); - console.log("instructor_resource_parent_id", instructor_resource_parent_id); - if(instructor_resource_parent_id) { - } else { - instructor_resource_parent_id = instructor_resource.parentNode.parentNode.id; - } - - this_type = instructor_resource.getAttribute("data-resource"); - this_icon = icon[this_type]; - var id_of_this_icon = "resourceid" + j; - icons_on_this_page.push([type_name[this_type], this_icon, id_of_this_icon]); - - console.log("this_type", this_type, "this_icon", this_icon, "html_words_of[this_type]", html_words_of[this_type]); - this_item_with_resource = document.getElementById(instructor_resource_parent_id); - console.log("instructor_resource_parent_id", instructor_resource_parent_id, "this_item_with_resource", this_item_with_resource); - - var this_margin_resource = document.createElement('div'); - this_margin_resource.setAttribute('class', 'marginresource'); - this_margin_resource.setAttribute('id', id_of_this_icon); - this_margin_resource.innerHTML = "" + this_icon + ""; - if(!(this_title = instructor_resource.getAttribute("title"))) { - this_title = html_words_of[this_type] - } - if(instructor_resource.hasAttribute("data-content")) { - this_content = instructor_resource.getAttribute("data-content"); - this_title = '' + this_title + ''; - } - var links_html = "" - if(instructor_resource.hasAttribute("data-links")) { - var this_links = instructor_resource.getAttribute("data-links"); - these_links = this_links.split(";"); - links_html = '' - console.log(" OOOOOOOOOOOOOO these_links", these_links, "these_links.length", these_links.length); - if(these_links.length > 0) { - console.log("these_links[0]", these_links[0]); - } - tmpJ = these_links.length; - console.log("tmpJ", tmpJ); - for(var jj=0; jj < these_links.length; ++jj) { - console.log( " UUUUUUUUUUUUUu these_links[jj]", these_links[jj]); - this_type_and_link = these_links[jj].split(","); - if(jj>0) { links_html += ", " } - links_html += '' + this_type_and_link[0] + ''; - } - links_html += 'XX'; - console.log("done adding links to title"); - } - this_title = '' + this_title - if(links_html) { - this_title += links_html - } - this_title += ''; - this_margin_resource.innerHTML += this_title; -// this_item_with_resource.insertBefore(this_margin_resource); - this_item_with_resource.insertBefore(this_margin_resource, this_item_with_resource.firstChild); - console.log("appended to ",this_item_with_resource); - } - - icons_on_this_page.sort(); - - var icon_legend_for_this_page = document.createElement('div'); - var prev_icon = ""; - var icon_list = '' + "" + icons_on_this_page[0][0] + ": "; - for (var j=0; j < icons_on_this_page.length; ++j) { - next_icon = icons_on_this_page[j][1]; - if(j > 0 && next_icon !== prev_icon) { - icon_list += '' + "
    "; - icon_list += '' + "" + icons_on_this_page[j][0] + ": "; - icon_list += '' + next_icon + ''; - } else { - icon_list += '' + next_icon + ''; - } - prev_icon = next_icon; - } - icon_list += ''; - - icon_legend_for_this_page.setAttribute('class', 'iconlegend'); - icon_legend_for_this_page.innerHTML = icon_list - document.body.appendChild(icon_legend_for_this_page); - -} // if logged in as instructor diff --git a/slides/_static/pretext/js/lib/jquery.espy.min.js b/slides/_static/pretext/js/lib/jquery.espy.min.js deleted file mode 100755 index 31cffd1..0000000 --- a/slides/_static/pretext/js/lib/jquery.espy.min.js +++ /dev/null @@ -1,195 +0,0 @@ - -(function(b, u, v) { - function x(b, f, e) { - b = (b + "").match(/^(-?[0-9]+)(%)?$/); - if (!b) return !1; - var c = parseInt(b[1], 10); - b[2] && (c *= f / 100); - return 0 > c ? f + c + (e || 0) : c - } - - function y(k, f) { - function e() { - function b() { - g = +new Date; - f.apply(e, t); - c && (c = clearTimeout(c)) - } - var e = this, - q = +new Date - g, - t = arguments; - c && (c = clearTimeout(c)); - q > k ? b() : c = setTimeout(b, k - q) - } - var c, g = 0; - b.guid && (e.guid = f.guid = f.guid || b.guid++); - return e - } - b.Espy = function(k, f, e) { - function c(a, d) { - b.isPlainObject(a) && (d = a, a = null); - b.extend(t.prototype, d); - null !== a && (w = a) - } - - function g(a) { - if (a = - q(a)) { - var d = a.$el.offset()[a.settings.horizontal ? "left" : "top"] - p.offset[a.settings.horizontal ? "left" : "top"], - h = a.$el[a.settings.horizontal ? "outerWidth" : "outerHeight"](); - b.extend(a, { - start: d, - elSize: h, - end: d + h - }) - } - } - - function r(a) { - // console.log("r(a) with a = ", a); - if (a === v) b.each(m, r); - else if (a = q(a)) { - var d = p[a.settings.horizontal ? "width" : "height"], - h = x(a.settings.size, d), - d = p[a.settings.horizontal ? "left" : "top"] + x(a.settings.offset, d, -h), - c = d + h, - h = a.settings.contain ? d <= a.start && c >= a.end ? "inside" : d + h / 2 > a.start + a.elSize / 2 ? a.settings.horizontal ? "left" : - "up" : a.settings.horizontal ? "right" : "down" : d > a.start && d < a.end || c > a.start && c < a.end || d <= a.start && c >= a.start || d <= a.end && c >= a.end ? "inside" : d > a.end ? a.settings.horizontal ? "left" : "up" : a.settings.horizontal ? "right" : "down"; - a.state !== h && (a.state = h, "function" === typeof w && w.call(a.el, "inside" === h, h), "function" === typeof a.callback && a.callback.call(a.el, "inside" === h, h)) - } - } - - function s(a) { - if (m.hasOwnProperty(a)) return a; - if (b.isPlainObject(a) && m.hasOwnProperty(a.id)) return a.id; - a = b(a)[0]; - var d = !1; - b.each(m, function(b, - c) { - c.el === a && (d = b) - }); - return d - } - - // console.log("nothing yet"); - function q(a) { - return (a = s(a)) ? m[a] : !1 - } - "function" !== typeof f && (e = f, f = 0); - // console.log("k was", k); - var t = function(a) { - b.extend(this, a) - }, - u = function(a, d, c, e) { - this.id = a; - this.el = d; - this.$el = b(d); - this.callback = c; - this.settings = new t(e); - this.configure = function(a, d) { - b.isPlainObject(a) && (d = a, a = null); - b.extend(this.settings, d); - null !== a && (this.callback = a) - } - }, - n = this, - l = b(k); - // console.log("l", l, "l==window", l[0]==window); - k = b.fn.espy.defaults; - // console.log("k is", k); - var w, m = {}, - z = 0; - // because window.offset() is not defined in jQuery 3 (why?!?!?!), - // we have to treat that as a special case (DF 1/28/19) - if (l[0]==window) { offSET = { top: 0, left: 0 } } - else { offSET = l.offset() } - var p = { - top: l.scrollTop(), - left: l.scrollLeft(), - width: l.innerWidth(), - height: l.innerHeight(), - offset: offSET -/* - offset: l.offset() || { - top: 0, - left: 0 - } -*/ - }; - // console.log("p", p); - c(f, b.extend({}, k, e)); - n.add = function(a, d, c) { - b.isPlainObject(d) && (c = d, d = 0); - b(a).each(function(a, b) { - var e = s(b) || "s" + z++; - m[e] = new u(e, b, d, c); - g(e); - r(e) - }) - }; - n.configure = function(a, d, e) { - "function" === typeof a ? (d = a, a = null, b.isPlainObject(d) && (e = d, d = null)) : b.isPlainObject(a) ? (e = a, d = a = null) : b.isPlainObject(d) && (e = d, d = null); - null === a ? (c(d, e), b.each(m, function(a, b) { - g(b) - })) : b(a).each(function(a, b) { - var c = q(b); - c && (c.configure(d, e), g(b)) - }) - }; - n.reload = function(a) { - a === v ? b.each(m, function() { - g(this.id) - }) : - b(a).each(function(a, b) { - var c = s(b); - c && (g(c), r(c)) - }) - }; - n.remove = function(a) { - b(a).each(function(a, b) { - var c = s(b); - c && delete m[c] - }) - }; - n.destroy = function() { - l.off(".espy"); - m = {}; - n = v - }; - n.resize = function() { - b.each(m, function() { - this.reloadOnResize && g(this) - }); - p.width = l.innerWidth(); - p.height = l.innerHeight(); - r() - }; - l.on("scroll.espy", y(k.delay, function() { - p.top = l.scrollTop(); - p.left = l.scrollLeft(); - r() - })); - l.on("resize.espy", y(k.delay, function() { - n.resize() - })) - }; - b.fn.espy = function(k, f) { - var e, c; - e = f && f.context || u; - var g = b.data(e, - "espy") || b.data(e, "espy", new b.Espy(e)); - "string" !== typeof k ? g.add(this, k, f) : (e = k, c = Array.prototype.slice.call(arguments), c[0] = this, "function" === typeof g[e] && g[e].apply(g, c)); - return this - }; - b.fn.espy.defaults = { - delay: 100, - context: window, - horizontal: 0, - offset: 0, - size: "100%", - contain: 0, - reloadOnResize: !0 - } -})(jQuery, window); - - diff --git a/slides/_static/pretext/js/lib/jquery.min.js b/slides/_static/pretext/js/lib/jquery.min.js deleted file mode 100755 index 4d9b3a2..0000000 --- a/slides/_static/pretext/js/lib/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("' + - `` + - '' + - '' + - '' + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - //if (data.rh_result.flags.extra_js_files) { - // for (const jsFile of data.rh_result.flags.extra_js_files) { - // if (jsFile.file == "js/apps/GraphTool/graphtool.min.js" || jsFile.file == "js/apps/Scaffold/scaffold.js") { - // extra_css_files.push({ file: 'js/vendor/bootstrap/css/bootstrap.css', external: '0' }); - // extra_css_files.push({ file: 'themes/math4/math4.css', external: '0' }); - // extra_js_files.push({ file: 'js/vendor/bootstrap/js/bootstrap.js', external: '0' }); - // } - // } - //} - - if (data.rh_result.flags.extra_css_files) data.rh_result.flags.extra_css_files.unshift(...extra_css_files); - else data.rh_result.flags.extra_css_files = extra_css_files; - for (const cssFile of data.rh_result.flags.extra_css_files) { - iframeContents += ''; - } - - if (data.rh_result.flags.extra_js_files) data.rh_result.flags.extra_js_files.unshift(...extra_js_files); - else data.rh_result.flags.extra_js_files = extra_js_files; - for (const jsFile of data.rh_result.flags.extra_js_files) { - iframeContents += ''; - } - - iframeContents += - '' + - '' + - '' + - `` + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'min' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentDocument.querySelectorAll("button.ww-feedback[data-content]").forEach(button => { - iframe.contentWindow.jQuery(button).popover("show"); - const content = iframe.contentDocument.getElementById(button.id.replace("-feedback-button", "-content")); - const popover = content.parentNode.parentNode; - popover.id = button.id.replace("-feedback-button", "-feedback") - button.setAttribute('aria-describedby', popover.id); - if (button.previousElementSibling) - button.previousElementSibling.setAttribute('aria-describedby', popover.id); - popover.querySelector('.arrow').remove(); - const title = popover.querySelector('.popover-title'); - if (button.dataset.emptyContent) { - title.style.borderBottomWidth = 0; - content.parentNode.remove(); - } - if (title.textContent == localize_correct + '!') title.classList.add('correct'); - }); - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - feedbackButton.remove(); - iframe.contentWindow.jQuery(feedbackButton).popover("hide"); - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type == 'radio' && answers[name]) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - feedbackButton.remove(); - iframe.contentWindow.jQuery(feedbackButton).popover("hide"); - } - correct_value = answers[name].correct_choice; - if (input.value == correct_value) input.checked = true; - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - feedbackButton.remove(); - iframe.contentWindow.jQuery(feedbackButton).popover("hide"); - } - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - feedbackButton.remove(); - iframe.contentWindow.jQuery(feedbackButton).popover("hide"); - } - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = ww_domain + '/' + node.attributes.src.value; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // the problem text may come with "hint"s and "solution"s - // each one is an "a" with content "Hint" or "Solution", and an attribute with base64-encoded HTML content - // the WeBWorK knowl js would normally handle this, but we want PreTeXt knowl js to handle it - // so we replace the "a" with the content that should be there for PTX knowl js - // also if hint/sol were missing from the static version, we want these removed here - - const ww_container = document.getElementById(ww_id); - - const hintsolnodes = document.evaluate("//p[a/b]", body_div, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); - if (hintsolnodes) { - let solutionlikewrapper; - for (let i = 0; i < hintsolnodes.snapshotLength; i++) { - const hintsolp = hintsolnodes.snapshotItem(i); - if (!hintsolp) continue; - const hintSolType = hintsolp.textContent.trim().toLowerCase().replace(':', ''); - - if (hintsolp.previousElementSibling.textContent.trim() != 'Hint:' && hintsolp.previousElementSibling.textContent.trim() != 'Solution:') { - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('webwork', 'solutions'); - hintsolp.parentNode.insertBefore(solutionlikewrapper, hintsolp); - } - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || (hintSolType == 'hint' && !b_ptx_has_hint)) continue; - - const knowlDetails = document.createElement('details'); - knowlDetails.classList.add(hintSolType); - knowlDetails.classList.add('solution-like'); - knowlDetails.classList.add('born-hidden-knowl'); - - const knowlSummary = document.createElement('summary'); - const summaryLabel = document.createElement('span'); - summaryLabel.classList.add('type'); - summaryLabel.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(summaryLabel); - knowlDetails.appendChild(knowlSummary); - - const knowlContents = document.createElement('div'); - knowlContents.classList.add(hintSolType); - knowlContents.classList.add('solution-like'); - knowlContents.innerHTML = hintsolp.firstElementChild.dataset.knowlContents; - knowlDetails.appendChild(knowlContents); - - adjustSrcHrefs(knowlContents, ww_domain) - solutionlikewrapper.appendChild(knowlDetails); - } - } - for (let i = 0; i < hintsolnodes.snapshotLength; i++) { - hintsolnodes.snapshotItem(i).remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function createFeedbackButton(id, title, content) { - const feedbackButton = document.createElement('button'); - feedbackButton.dataset.title = title; - feedbackButton.dataset.content = `
    ${content || ''}
    `; - if (!content) feedbackButton.dataset.emptyContent = '1'; - const contentSpan = document.createElement('span'); - contentSpan.style.fontWeight = 1000; - contentSpan.textContent = '\uD83D\uDDE9' - feedbackButton.appendChild(contentSpan); - feedbackButton.type = 'button'; - feedbackButton.classList.add('ww-feedback'); - feedbackButton.style.borderRadius = 0; - - feedbackButton.id = `${id}-feedback-button`; - feedbackButton.dataset.html = true; - feedbackButton.dataset.placement = 'bottom'; - feedbackButton.dataset.trigger = 'click'; - - return feedbackButton; -} diff --git a/slides/_static/pretext/js/pretext-webwork/2.17/pretext-webwork.js b/slides/_static/pretext/js/pretext-webwork/2.17/pretext-webwork.js deleted file mode 100755 index 9b809e6..0000000 --- a/slides/_static/pretext/js/pretext-webwork/2.17/pretext-webwork.js +++ /dev/null @@ -1,1058 +0,0 @@ -//Critical: -// TODO: Think about what should be done for an essay question. - -//Accessibility: - -//Enhancement: -// TODO: In a scaffold problem, adjust the green bar for when one part is correct. -// TODO: Have randomize check that new seed is actually producing new HTML. -// TODO: Don't offer randomize or button unless we know a new version can be produced after trying a few seeds. -// TODO: In a staged problem, Make Interactive button is adjacent to solution knowls; move it. -// TODO: MathQuill -// TODO: Image pop up. -// TODO: Deal with singleResult MultiAnswer problems. - -//Styling: -// TODO: Review all styling in all scenarios (staged/not, correct/partly-correct/incorrect/blank, single/multiple) -// TODO: Sean: I think I'd like to see a slightly larger font size on the buttons - -function handleWW(ww_id, action) { - const ww_container = document.getElementById(ww_id); - const ww_domain = ww_container.dataset.domain; - const ww_problemSource = ww_container.dataset.problemsource; - const ww_sourceFilePath = ww_container.dataset.sourcefilepath; - const ww_course_id = ww_container.dataset.courseid; - const ww_user_id = ww_container.dataset.userid; - const ww_course_password = ww_container.dataset.coursepassword || ww_container.dataset.passwd; - const localize_correct = ww_container.dataset.localizeCorrect || "Correct"; - const localize_incorrect = ww_container.dataset.localizeIncorrect || "Incorrect"; - const localize_blank = ww_container.dataset.localizeBlank || "Blank"; - const localize_submit = ww_container.dataset.localizeSubmit || "Submit"; - const localize_check_responses = ww_container.dataset.localizeCheckResponses || "Check Responses"; - const localize_reveal = ww_container.dataset.localizeReveal || "Reveal"; - const localize_randomize = ww_container.dataset.localizeRandomize || "Randomize"; - const localize_reset = ww_container.dataset.localizeReset || "Reset"; - const runestone_logged_in = (typeof eBookConfig !== 'undefined' && eBookConfig.username !== ''); - // will be null on pages generated prior to late December 2022 - const activate_button = document.getElementById(ww_id + '-button') - - // Set the current seed - if (!action) { - ww_container.dataset.current_seed = ww_container.dataset.seed; - if (runestone_logged_in) { - ww_container.dataset.current_seed = webworkSeedHash(eBookConfig.username + ww_container.dataset.current_seed); - } - } - else if (action == 'randomize') ww_container.dataset.current_seed = Number(ww_container.dataset.current_seed) + 100; - - let loader = document.createElement('div'); - loader.style.position = 'absolute'; - loader.style.left = 0; - loader.style.top = 0; - loader.style.backgroundColor = 'rgba(0.2, 0.2, 0.2, 0.4)'; - loader.style.color = 'white'; - loader.style.width = '100%'; - loader.style.height = '100%'; - loader.style.display = 'flex'; - loader.style.alignItems = 'center'; - loader.style.justifyContent = 'center'; - loader.style.marginTop = '0'; - loader.tabIndex = -1; - const loaderText = document.createElement('span'); - loaderText.textContent = 'Loading'; - loaderText.style.fontSize = '2rem'; - loader.appendChild(loaderText); - ww_container.appendChild(loader); - loader.focus(); - - if (!action) { - // Determine if static version shows hints, solutions, or answers and save that information in the container dataset for later runs. - ww_container.dataset.hasHint = ww_container.getElementsByClassName('hint').length > 0; - ww_container.dataset.hasSolution = ww_container.getElementsByClassName('solution').length > 0; - ww_container.dataset.hasAnswer = ww_container.getElementsByClassName('answer').length > 0; - // Get (possibly localized) label text for hints and solutions. - ww_container.dataset.hintLabelText = ww_container.dataset.hasHint == 'true' - ? ww_container.querySelectorAll('.hint-knowl span.type, details.hint span.type')[0].textContent : 'Hint'; - ww_container.dataset.solutionLabelText = ww_container.dataset.hasSolution == 'true' - ? ww_container.querySelectorAll('.solution-knowl span.type, details.solution span.type')[0].textContent : 'Solution'; - - ww_container.tabIndex = -1; - } - - let url; - - if (action == 'check') { - const iframe = ww_container.querySelector('.problem-iframe'); - const formData = new FormData(iframe.contentDocument.getElementById(ww_id + "-form")); - const params = new URLSearchParams(formData); - url = new URL(ww_domain + '/webwork2/html2xml?' + params.toString()) - url.searchParams.append("answersSubmitted", '1'); - url.searchParams.append('WWsubmit', "1"); - } else { - url = new URL(ww_domain + '/webwork2/html2xml'); - url.searchParams.append("problemSeed", ww_container.dataset.current_seed); - if (ww_problemSource) url.searchParams.append("problemSource", ww_problemSource); - else if (ww_sourceFilePath) url.searchParams.append("sourceFilePath", ww_sourceFilePath); - url.searchParams.append("answersSubmitted", '0'); - url.searchParams.append("displayMode", "MathJax"); - url.searchParams.append("courseID", ww_course_id); - url.searchParams.append("userID", ww_user_id); - url.searchParams.append("course_password", ww_course_password); - url.searchParams.append("outputformat", "raw"); - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - url.searchParams.append("showSolutions", ww_container.dataset.hasSolution == 'true' ? '1' : '0'); - url.searchParams.append("showHints", ww_container.dataset.hasHint == 'true' ? '1' : '0'); - url.searchParams.append("problemUUID",ww_id); - } - - // get the json and do stuff with what we get - $.getJSON(url.toString(), (data) => { - // Create the form that will contain the text and input fields of the interactive problem. - const form = document.createElement("form"); - form.id = ww_id + "-form"; - - // Create a div for the problem text. - const body_div = document.createElement("div"); - body_div.id = ww_id + "-body"; - body_div.classList.add("exercise", "exercise-like"); - body_div.lang = data.lang; - body_div.dir = data.dir; - - // Dump the problem text, answer blanks, etc. - body_div.innerHTML = data.rh_result.text; - - // Replace all hn headings with h6 headings. - for (const tag_name of ['h6', 'h5', 'h4', 'h3', 'h2', 'h1']) { - const headings = body_div.getElementsByTagName(tag_name); - for (heading of headings) { - const new_heading = document.createElement("h6"); - new_heading.innerHTML = heading.innerHTML; - cloneAttributes(new_heading, heading); - new_heading.classList.add('webwork-part'); - heading.replaceWith(new_heading); - } - } - - adjustSrcHrefs(body_div, ww_domain); - - translateHintSol(ww_id, body_div, ww_domain, - ww_container.dataset.hasHint == 'true', ww_container.dataset.hasSolution == 'true', - ww_container.dataset.hintLabelText, ww_container.dataset.solutionLabelText) - - // insert previous answers - if (runestone_logged_in) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const mqAnswers = answersObject.mqAnswers; - for (const mqAnswer in mqAnswers) { - const mqInput = body_div.querySelector('input[id=' + mqAnswer + ']'); - if (mqInput && mqInput.value == '') { - mqInput.setAttribute('value', mqAnswers[mqAnswer]); - } - } - const answers = answersObject.answers; - for (const answer in answers) { - const input = body_div.querySelector('input[id=' + answer + ']'); - if (input && input.value == '') { - input.setAttribute('value', answers[answer]); - } - if (input && input.type.toUpperCase() == 'RADIO') { - const buttons = body_div.querySelectorAll('input[name=' + answer + ']'); - for (const button of buttons) { - if (button.value == answers[answer]) { - button.setAttribute('checked', 'checked'); - } - } - } - if (input && input.type.toUpperCase() == 'CHECKBOX') { - const checkboxes = body_div.querySelectorAll('input[name=' + answer + ']'); - for (const checkbox of checkboxes) { - // This is not a bulletproof approach if the problem used input values that are weird - // For example, with commas in them - // However, we are stuck with WW providing answers[answer] as a string like `[value0, value1]` - // and note that it is not `["value0", "value1"]`, so we cannot cleanly parse it into an array - let checkbox_regex = new RegExp('(\\[|, )' + checkbox.value + '(, |\\])'); - if (answers[answer].match(checkbox_regex)) { - checkbox.setAttribute('checked', 'checked'); - } - } - } - var select = body_div.querySelector('select[id=' + answer + ']'); - if (select && answers[answer]) { - // answers[answer] may be wrapped in \text{...} that we want to remove, since value does not have this. - let this_answer = answers[answer]; - if (/^\\text\{.*\}$/.test(this_answer)) {this_answer = this_answer.match(/^\\text\{(.*)\}$/)[1]}; - let quote_escaped_answer = this_answer.replace(/"/g, '\\"'); - const option = body_div.querySelector(`select[id="${answer}"] option[value="${quote_escaped_answer}"]`); - if (option) {option.setAttribute('selected', 'selected')}; - } - } - } - - // insert our cleaned up problem text - form.appendChild(body_div); - - // Set up hidden input fields that the form uses - const wwInputs = { - problemSeed: data.inputs_ref.problemSeed, - problemUUID: data.inputs_ref.problemUUID, - psvn: data.inputs_ref.psvn, - courseName: ww_course_id, - courseID: ww_course_id, - userID: ww_user_id, - course_password: ww_course_password, - displayMode: "MathJax", - session_key: data.rh_result.session_key, - outputformat: "raw", - language: data.formLanguage, - showSummary: data.showSummary, - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - showSolutions: ww_container.dataset.hasSolution == 'true' ? '1' : '0', - showHints: ww_container.dataset.hasHint == 'true' ? '1' : '0', - forcePortNumber: data.forcePortNumber - }; - - if (ww_sourceFilePath) wwInputs.sourceFilePath = ww_sourceFilePath; - else if (ww_problemSource) wwInputs.problemSource = ww_problemSource; - - for (const wwInputName of Object.keys(wwInputs)) { - const input = document.createElement('input'); - input.type = 'hidden'; - input.name = wwInputName; - input.value = wwInputs[wwInputName]; - form.appendChild(input); - } - - // Prepare answers object - const answers = {}; - // id the answers even if we won't populate them - Object.keys(data.rh_result.answers).forEach(function(id) { - answers[id] = {}; - }, data.rh_result.answers); - if (ww_container.dataset.hasAnswer == 'true') { - // Update answer data - Object.keys(data.rh_result.answers).forEach(function(id) { - answers[id] = { - correct_ans: this[id].correct_ans, - correct_ans_latex_string: this[id].correct_ans_latex_string, - correct_choice: this[id].correct_choice, - correct_choices: this[id].correct_choices, - }; - }, data.rh_result.answers); - } - - let buttonContainer = ww_container.querySelector('.problem-buttons.webwork'); - // Create the submission buttons if they have not yet been created. - if (!buttonContainer) { - // Hide the original div that contains the old make active button. - ww_container.querySelector('.problem-buttons').classList.add('hidden-content'); - // And the newer activate button if it is there - if (activate_button != null) {activate_button.classList.add('hidden-content');}; - - // Create a new div for the webwork buttons. - buttonContainer = document.createElement('div'); - buttonContainer.classList.add('problem-buttons', 'webwork'); - if (activate_button != null) { - // Make sure the button container follows the activate button in the DOM - activate_button.after(buttonContainer); - } else { - ww_container.prepend(buttonContainer); - } - - // Check button - const check = document.createElement("button"); - check.type = "button"; - check.id = ww_id + '-check'; - check.style.marginRight = "0.25rem"; - check.classList.add('webwork-button'); - - // Adjust if more than one answer to check - const answerCount = body_div.querySelectorAll("input:not([type=hidden])").length + - body_div.querySelectorAll("select:not([type=hidden])").length; - - check.textContent = runestone_logged_in ? localize_submit : localize_check_responses; - check.addEventListener('click', () => handleWW(ww_id, "check")); - - buttonContainer.appendChild(check); - - // Show correct answers button if original PTX has answer knowl. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = document.createElement("button"); - correct.classList.add("show-correct", 'webwork-button'); - correct.type = "button"; - correct.style.marginRight = "0.25rem"; - correct.textContent = localize_reveal; - correct.addEventListener('click', () => WWshowCorrect(ww_id, answers)); - buttonContainer.appendChild(correct); - } - - // randomize button - const randomize = document.createElement("button") - randomize.type = "button"; - randomize.classList.add('webwork-button'); - randomize.style.marginRight = "0.25rem"; - randomize.textContent = localize_randomize; - randomize.addEventListener('click', () => handleWW(ww_id, 'randomize')); - buttonContainer.appendChild(randomize) - - // reset button - const reset = document.createElement("button") - reset.type = "button" - reset.classList.add('webwork-button'); - reset.textContent = localize_reset; - reset.addEventListener('click', () => resetWW(ww_id)); - buttonContainer.appendChild(reset) - } else { - // Update the click handler for the show correct button. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = buttonContainer.querySelector('.show-correct'); - const correctNew = correct.cloneNode(true); - correctNew.addEventListener('click', () => WWshowCorrect(ww_id, answers)); - correct.replaceWith(correctNew); - } - } - - if (action == 'check') { - // Runestone trigger - // TODO: condition on platform=Runestone - $("body").trigger('runestone_ww_check', data) - - const inputs = body_div.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - if (input.type == 'text' && answers[name]) { - const score = data.rh_result.answers[name].score; - let headline = ''; - let correctClass = ''; - if (score >= 1) { - headline = localize_correct + '!'; - correctClass = 'correct'; - } else if (score > 0 && score < 1) { - headline = `${Math.round(score * 100)}% ${localize_correct}.`; - correctClass = 'partly-correct'; - } else if (data.rh_result.answers[name].student_ans == '') { - headline = localize_blank + '.'; - correctClass = 'blank'; - } else if (score <= 0) { - headline = localize_incorrect + '.'; - correctClass = 'incorrect'; - } - let title = `${headline}`; - let message = (data.rh_result.answers[name].ans_message ? data.rh_result.answers[name].ans_message : ''); - input.classList.add(correctClass); - // make a span that contains feedback - feedbackSpan = document.createElement('span'); - feedbackSpan.id = `${ww_id}-${name}-feedback`; - feedbackHeadline = document.createElement('span'); - feedbackHeadline.id = `${ww_id}-${name}-headline`; - feedbackHeadline.textContent = headline; - feedbackSpan.appendChild(feedbackHeadline); - feedbackMessage = document.createElement('span'); - feedbackMessage.id = `${ww_id}-${name}-message`; - feedbackMessage.textContent = message; - feedbackSpan.appendChild(feedbackMessage); - // make a non breaking span to surround input, sr span, and feedback button - let nbSpan = document.createElement('span'); - nbSpan.classList.add("nobreak"); - input.parentNode.insertBefore(nbSpan, input); - nbSpan.appendChild(input); - // put a visibly hidden (screen-reader only) span with feedback - let srSpan = document.createElement('span'); - srSpan.classList.add("visually-hidden"); - srSpan.appendChild(feedbackSpan); - nbSpan.appendChild(srSpan); - // give the feedback to sr users immediately - input.setAttribute('aria-describedby',`${ww_id}-${name}-feedback`); - // make the feedback button - srSpan.after(createFeedbackButton(`${ww_id}-${name}`, title, message)); - - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const score = data.rh_result.answers[name].score; - const student_ans = data.rh_result.answers[name].student_value || data.rh_result.answers[name].student_ans; - const correct_ans = data.rh_result.answers[name].correct_choice || data.rh_result.answers[name].correct_ans; - if (input.value == student_ans) { - if (score == 1) { - input.parentNode.classList.add('correct'); - } else { - input.parentNode.classList.add('incorrect'); - } - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, - (student_ans == correct_ans) - ? `${localize_correct}` : `${localize_incorrect}.`) - feedbackButton.style.marginRight = '0.25rem'; - input.after(feedbackButton); - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const score = data.rh_result.answers[name].score; - const student_ans = data.rh_result.answers[name].student_ans; - const correct_ans = data.rh_result.answers[name].correct_ans; - if (input.value == data.rh_result.answers[name].firstElement) { - const checkbox_div = input.parentNode.parentNode; - if (score == 1) { - checkbox_div.classList.add('correct'); - } else { - checkbox_div.classList.add('incorrect'); - } - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, - (student_ans == correct_ans) - ? `${localize_correct}` : `${localize_incorrect}.`) - checkbox_div.insertBefore(feedbackButton, checkbox_div.firstChild); - } - } - } - - const hiddenInputs = body_div.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - graphtoolContainer.style.position = 'relative'; - const score = data.rh_result.answers[name].score; - let title = ''; - if (score == 1) { - title = `${localize_correct}`; - } else if (score > 0 && score < 1) { - title = `${Math.round(score * 100)}% ${localize_correct}.`; - } else if (data.rh_result.answers[name].student_ans == '') { - // do nothing if the submitted answer is blank and the problem has not already been scored as correct - continue; - } else if (score == 0) { - title = `${localize_incorrect}.`; - } - - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, title, data.rh_result.answers[name].ans_message); - feedbackButton.style.position = 'absolute'; - feedbackButton.style.left = '100%'; - feedbackButton.style.top = 0; - feedbackButton.style.marginLeft = '0.5rem'; - feedbackButton.dataset.bsContainer = 'body'; - graphtoolContainer.appendChild(feedbackButton); - if (score == 1) { - graphtoolContainer.classList.add('correct'); - } else { - graphtoolContainer.classList.add('incorrect'); - } - - } - } - - const selects = body_div.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const score = data.rh_result.answers[name].score; - let title = ''; - if (score == 1) { - headline = localize_correct + '!'; - correctClass = 'correct'; - } else { - headline = localize_incorrect + '.'; - correctClass = 'incorrect'; - } - select.classList.add(correctClass); - title = `${headline}`; - // make a span that contains feedback - feedbackSpan = document.createElement('span'); - feedbackSpan.id = `${ww_id}-${name}-feedback`; - feedbackHeadline = document.createElement('span'); - feedbackHeadline.id = `${ww_id}-${name}-headline`; - feedbackHeadline.textContent = headline; - feedbackSpan.appendChild(feedbackHeadline); - // make a non breaking span to surround select, sr span, and feedback button - let nbSpan = document.createElement('span'); - nbSpan.classList.add("nobreak"); - select.parentNode.insertBefore(nbSpan, select); - nbSpan.appendChild(select); - // put a span around select since select does not support ::after pseudo elements - let psSpan = document.createElement('span'); - psSpan.classList.add("select-wrapper", correctClass); - select.parentNode.insertBefore(psSpan, select); - psSpan.appendChild(select); - // put a visibly hidden (screen-reader only) span with feedback - let srSpan = document.createElement('span'); - srSpan.classList.add("visually-hidden"); - srSpan.appendChild(feedbackSpan); - nbSpan.appendChild(srSpan); - // give the feedback to sr users immediately - select.setAttribute('aria-describedby',`${ww_id}-${name}-feedback`); - // make the feedback button - srSpan.after(createFeedbackButton(`${ww_id}-${name}`, title)); - } - } - - let iframeContents = '' + - '' + - `` + - '' + - '' + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - //if (data.rh_result.flags.extra_js_files) { - // for (const jsFile of data.rh_result.flags.extra_js_files) { - // if (jsFile.file == "js/apps/GraphTool/graphtool.min.js" || jsFile.file == "js/apps/Scaffold/scaffold.js") { - // extra_css_files.push({ file: 'js/vendor/bootstrap/css/bootstrap.css', external: '0' }); - // extra_css_files.push({ file: 'themes/math4/math4.css', external: '0' }); - // extra_js_files.push({ file: 'js/vendor/bootstrap/js/bootstrap.js', external: '0' }); - // } - // } - //} - - if (data.extra_css_files) data.extra_css_files.unshift(...extra_css_files); - else data.extra_css_files = extra_css_files; - for (const cssFile of data.extra_css_files) { - if (/knowl/.test(cssFile.file)) continue; - iframeContents += ''; - } - - if (data.extra_js_files) data.extra_js_files.unshift(...extra_js_files); - else data.extra_js_files = extra_js_files; - for (const jsFile of data.extra_js_files) { - if (/knowl/.test(jsFile.file)) continue; - iframeContents += ''; - } - - iframeContents += - '' + - '' + - '' + - `` + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'min' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentDocument.querySelectorAll("button.ww-feedback[data-bs-content]").forEach(button => { - const bsPopover = new iframe.contentWindow.bootstrap.Popover(button, { - html: true, - placement: 'bottom', - fallbackPlacements: [], - trigger: 'click', - customClass: 'result-popover' + (button.dataset.emptyContent ? ' nocontent' : '') - }); - bsPopover.show(); - const content = iframe.contentDocument.getElementById(button.id.replace("-feedback-button", "-content")); - const popover = content.parentNode.parentNode; - bsPopover.hide(); - - /*button.addEventListener('shown.bs.popover', () => { - // Note that the button itself has the aria-describedby attribute set by bootstrap automatically. - button.previousElementSibling?.setAttribute('aria-describedby', popover.id); - });*/ - - button.addEventListener('click', () => bsPopover.show(), { once: true }); - - popover.querySelector('.popover-arrow').remove(); - const title = popover.querySelector('.popover-header'); - if (button.dataset.emptyContent) content.parentNode.remove(); - if (title.textContent == localize_correct + '!') title.classList.add('correct'); - }); - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const input_id = input.id; - const mq_span = iframe.contentDocument.getElementById(`mq-answer-${input_id}`); - if (mq_span) { - mq_span.style.display = 'none'; - } - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - const correct_ans = answers[name].correct_choice || answers[name].correct_ans; - if (input.value == correct_ans) { - input.checked = true; - //input.setAttribute('checked', 'checked'); - } else { - input.checked = false; - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const correct_choices = answers[name].correct_choices; - if (correct_choices.includes(input.value)) { - input.checked = true; - // input.setAttribute('checked', 'checked'); - } else { - input.checked = false; - // input.setAttribute('checked', false); - } - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = new URL(node.attributes.src.value, ww_domain).href; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // the problem text may come with "hint"s and "solution"s - // Each one is an "a" with the class ".knowl" and the data-type attribute of either "hint" or "solution". - // the WeBWorK knowl js would normally handle this, but we want PreTeXt knowl js to handle it - // so we replace the "a" with the content that should be there for PTX knowl js - // also if hint/sol were missing from the static version, we want these removed here - - const hintSols = body_div.querySelectorAll('.knowl[data-type="hint"],.knowl[data-type="solution"]'); - let solutionlikewrapper; - for (const hintSol of hintSols) { - const hintsolp = hintSol.parentNode; - if (!hintsolp) continue; - const hintsolpp = hintsolp.parentNode; //the div that contains each p with a knowl anchor - const hintSolType = hintSol.dataset.type; - - if (hintsolpp.querySelectorAll(".webwork.solutions").length == 0) - { - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('webwork', 'solutions'); - hintsolpp.insertBefore(solutionlikewrapper, hintsolp); - } - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || - (hintSolType == 'hint' && !b_ptx_has_hint)) - continue; - - const knowlDetails = document.createElement('details'); - knowlDetails.classList.add(hintSolType); - knowlDetails.classList.add('solution-like'); - knowlDetails.classList.add('born-hidden-knowl'); - - const knowlSummary = document.createElement('summary'); - const summaryLabel = document.createElement('span'); - summaryLabel.classList.add('type'); - summaryLabel.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(summaryLabel); - knowlDetails.appendChild(knowlSummary); - - const knowlContents = document.createElement('div'); - knowlContents.classList.add(hintSolType); - knowlContents.classList.add('solution-like'); - knowlContents.innerHTML = hintsolp.firstElementChild.dataset.knowlContents; - knowlDetails.appendChild(knowlContents); - - adjustSrcHrefs(knowlContents, ww_domain) - solutionlikewrapper.appendChild(knowlDetails); - } - for (const hintSol of hintSols) { - hintSol.parentNode?.remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function createFeedbackButton(id, title, content) { - const feedbackButton = document.createElement('button'); - feedbackButton.dataset.bsTitle = title; - feedbackButton.dataset.bsContent = `
    ${content || ''}
    `; - if (!content) feedbackButton.dataset.emptyContent = '1'; - const contentSpan = document.createElement('span'); - contentSpan.innerHTML = ``; - feedbackButton.appendChild(contentSpan); - feedbackButton.type = 'button'; - feedbackButton.classList.add('ww-feedback'); - - feedbackButton.id = `${id}-feedback-button`; - feedbackButton.dataset.bsToggle = 'popover'; - - return feedbackButton; -} - -function webworkSeedHash(string) { - var hash = 0, i, chr; - if (string.length === 0) return hash; - for (i = 0; i < string.length; i++) { - chr = string.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; //Convert to 32bit integer - } - return Math.abs(hash); -}; diff --git a/slides/_static/pretext/js/pretext-webwork/2.18/pretext-webwork.js b/slides/_static/pretext/js/pretext-webwork/2.18/pretext-webwork.js deleted file mode 100755 index c9b6b7c..0000000 --- a/slides/_static/pretext/js/pretext-webwork/2.18/pretext-webwork.js +++ /dev/null @@ -1,1058 +0,0 @@ -//Critical: -// TODO: Think about what should be done for an essay question. - -//Accessibility: - -//Enhancement: -// TODO: In a scaffold problem, adjust the green bar for when one part is correct. -// TODO: Have randomize check that new seed is actually producing new HTML. -// TODO: Don't offer randomize or button unless we know a new version can be produced after trying a few seeds. -// TODO: In a staged problem, Make Interactive button is adjacent to solution knowls; move it. -// TODO: MathQuill -// TODO: Image pop up. -// TODO: Deal with singleResult MultiAnswer problems. - -//Styling: -// TODO: Review all styling in all scenarios (staged/not, correct/partly-correct/incorrect/blank, single/multiple) -// TODO: Sean: I think I'd like to see a slightly larger font size on the buttons - -function handleWW(ww_id, action) { - const ww_container = document.getElementById(ww_id); - const ww_domain = ww_container.dataset.domain; - const ww_problemSource = ww_container.dataset.problemsource; - const ww_sourceFilePath = ww_container.dataset.sourcefilepath; - const ww_course_id = ww_container.dataset.courseid; - const ww_user_id = ww_container.dataset.userid; - const ww_course_password = ww_container.dataset.coursepassword; - const localize_correct = ww_container.dataset.localizeCorrect || "Correct"; - const localize_incorrect = ww_container.dataset.localizeIncorrect || "Incorrect"; - const localize_blank = ww_container.dataset.localizeBlank || "Blank"; - const localize_submit = ww_container.dataset.localizeSubmit || "Submit"; - const localize_check_responses = ww_container.dataset.localizeCheckResponses || "Check Responses"; - const localize_reveal = ww_container.dataset.localizeReveal || "Reveal"; - const localize_randomize = ww_container.dataset.localizeRandomize || "Randomize"; - const localize_reset = ww_container.dataset.localizeReset || "Reset"; - const runestone_logged_in = (typeof eBookConfig !== 'undefined' && eBookConfig.username !== ''); - // will be null on pages generated prior to late December 2022 - const activate_button = document.getElementById(ww_id + '-button') - - // Set the current seed - if (!action) { - ww_container.dataset.current_seed = ww_container.dataset.seed; - if (runestone_logged_in) { - ww_container.dataset.current_seed = webworkSeedHash(eBookConfig.username + ww_container.dataset.current_seed); - } - } - else if (action == 'randomize') ww_container.dataset.current_seed = Number(ww_container.dataset.current_seed) + 100; - - let loader = document.createElement('div'); - loader.style.position = 'absolute'; - loader.style.left = 0; - loader.style.top = 0; - loader.style.backgroundColor = 'rgba(0.2, 0.2, 0.2, 0.4)'; - loader.style.color = 'white'; - loader.style.width = '100%'; - loader.style.height = '100%'; - loader.style.display = 'flex'; - loader.style.alignItems = 'center'; - loader.style.justifyContent = 'center'; - loader.style.marginTop = '0'; - loader.tabIndex = -1; - const loaderText = document.createElement('span'); - loaderText.textContent = 'Loading'; - loaderText.style.fontSize = '2rem'; - loader.appendChild(loaderText); - ww_container.appendChild(loader); - loader.focus(); - - if (!action) { - // Determine if static version shows hints, solutions, or answers and save that information in the container dataset for later runs. - ww_container.dataset.hasHint = ww_container.getElementsByClassName('hint').length > 0; - ww_container.dataset.hasSolution = ww_container.getElementsByClassName('solution').length > 0; - ww_container.dataset.hasAnswer = ww_container.getElementsByClassName('answer').length > 0; - // Get (possibly localized) label text for hints and solutions. - ww_container.dataset.hintLabelText = ww_container.dataset.hasHint == 'true' - ? ww_container.querySelectorAll('.hint-knowl span.type, details.hint span.type')[0].textContent : 'Hint'; - ww_container.dataset.solutionLabelText = ww_container.dataset.hasSolution == 'true' - ? ww_container.querySelectorAll('.solution-knowl span.type, details.solution span.type')[0].textContent : 'Solution'; - - ww_container.tabIndex = -1; - } - - let url; - - if (action == 'check') { - const iframe = ww_container.querySelector('.problem-iframe'); - const formData = new FormData(iframe.contentDocument.getElementById(ww_id + "-form")); - const params = new URLSearchParams(formData); - url = new URL(ww_domain + '/webwork2/html2xml?' + params.toString()) - url.searchParams.append("answersSubmitted", '1'); - url.searchParams.append('WWsubmit', "1"); - } else { - url = new URL(ww_domain + '/webwork2/html2xml'); - url.searchParams.append("problemSeed", ww_container.dataset.current_seed); - if (ww_problemSource) url.searchParams.append("problemSource", ww_problemSource); - else if (ww_sourceFilePath) url.searchParams.append("sourceFilePath", ww_sourceFilePath); - url.searchParams.append("answersSubmitted", '0'); - url.searchParams.append("displayMode", "MathJax"); - url.searchParams.append("courseID", ww_course_id); - url.searchParams.append("userID", ww_user_id); - url.searchParams.append("course_password", ww_course_password); - url.searchParams.append("outputformat", "raw"); - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - url.searchParams.append("showSolutions", ww_container.dataset.hasSolution == 'true' ? '1' : '0'); - url.searchParams.append("showHints", ww_container.dataset.hasHint == 'true' ? '1' : '0'); - url.searchParams.append("problemUUID",ww_id); - } - - // get the json and do stuff with what we get - $.getJSON(url.toString(), (data) => { - // Create the form that will contain the text and input fields of the interactive problem. - const form = document.createElement("form"); - form.id = ww_id + "-form"; - - // Create a div for the problem text. - const body_div = document.createElement("div"); - body_div.id = ww_id + "-body"; - body_div.classList.add("exercise", "exercise-like"); - body_div.lang = data.lang; - body_div.dir = data.dir; - - // Dump the problem text, answer blanks, etc. - body_div.innerHTML = data.rh_result.text; - - // Replace all hn headings with h6 headings. - for (const tag_name of ['h6', 'h5', 'h4', 'h3', 'h2', 'h1']) { - const headings = body_div.getElementsByTagName(tag_name); - for (heading of headings) { - const new_heading = document.createElement("h6"); - new_heading.innerHTML = heading.innerHTML; - cloneAttributes(new_heading, heading); - new_heading.classList.add('webwork-part'); - heading.replaceWith(new_heading); - } - } - - adjustSrcHrefs(body_div, ww_domain); - - translateHintSol(ww_id, body_div, ww_domain, - ww_container.dataset.hasHint == 'true', ww_container.dataset.hasSolution == 'true', - ww_container.dataset.hintLabelText, ww_container.dataset.solutionLabelText) - - // insert previous answers - if (runestone_logged_in) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const mqAnswers = answersObject.mqAnswers; - for (const mqAnswer in mqAnswers) { - const mqInput = body_div.querySelector('input[id=' + mqAnswer + ']'); - if (mqInput && mqInput.value == '') { - mqInput.setAttribute('value', mqAnswers[mqAnswer]); - } - } - const answers = answersObject.answers; - for (const answer in answers) { - const input = body_div.querySelector('input[id=' + answer + ']'); - if (input && input.value == '') { - input.setAttribute('value', answers[answer]); - } - if (input && input.type.toUpperCase() == 'RADIO') { - const buttons = body_div.querySelectorAll('input[name=' + answer + ']'); - for (const button of buttons) { - if (button.value == answers[answer]) { - button.setAttribute('checked', 'checked'); - } - } - } - if (input && input.type.toUpperCase() == 'CHECKBOX') { - const checkboxes = body_div.querySelectorAll('input[name=' + answer + ']'); - for (const checkbox of checkboxes) { - // This is not a bulletproof approach if the problem used input values that are weird - // For example, with commas in them - // However, we are stuck with WW providing answers[answer] as a string like `[value0, value1]` - // and note that it is not `["value0", "value1"]`, so we cannot cleanly parse it into an array - let checkbox_regex = new RegExp('(\\[|, )' + checkbox.value + '(, |\\])'); - if (answers[answer].match(checkbox_regex)) { - checkbox.setAttribute('checked', 'checked'); - } - } - } - var select = body_div.querySelector('select[id=' + answer + ']'); - if (select && answers[answer]) { - // answers[answer] may be wrapped in \text{...} that we want to remove, since value does not have this. - let this_answer = answers[answer]; - if (/^\\text\{.*\}$/.test(this_answer)) {this_answer = this_answer.match(/^\\text\{(.*)\}$/)[1]}; - let quote_escaped_answer = this_answer.replace(/"/g, '\\"'); - const option = body_div.querySelector(`select[id="${answer}"] option[value="${quote_escaped_answer}"]`); - if (option) {option.setAttribute('selected', 'selected')}; - } - } - } - - // insert our cleaned up problem text - form.appendChild(body_div); - - // Set up hidden input fields that the form uses - const wwInputs = { - problemSeed: data.inputs_ref.problemSeed, - problemUUID: data.inputs_ref.problemUUID, - psvn: data.inputs_ref.psvn, - courseName: ww_course_id, - courseID: ww_course_id, - userID: ww_user_id, - course_password: ww_course_password, - displayMode: "MathJax", - session_key: data.rh_result.session_key, - outputformat: "raw", - language: data.formLanguage, - showSummary: data.showSummary, - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - showSolutions: ww_container.dataset.hasSolution == 'true' ? '1' : '0', - showHints: ww_container.dataset.hasHint == 'true' ? '1' : '0', - forcePortNumber: data.forcePortNumber - }; - - if (ww_sourceFilePath) wwInputs.sourceFilePath = ww_sourceFilePath; - else if (ww_problemSource) wwInputs.problemSource = ww_problemSource; - - for (const wwInputName of Object.keys(wwInputs)) { - const input = document.createElement('input'); - input.type = 'hidden'; - input.name = wwInputName; - input.value = wwInputs[wwInputName]; - form.appendChild(input); - } - - // Prepare answers object - const answers = {}; - // id the answers even if we won't populate them - Object.keys(data.rh_result.answers).forEach(function(id) { - answers[id] = {}; - }, data.rh_result.answers); - if (ww_container.dataset.hasAnswer == 'true') { - // Update answer data - Object.keys(data.rh_result.answers).forEach(function(id) { - answers[id] = { - correct_ans: this[id].correct_ans, - correct_ans_latex_string: this[id].correct_ans_latex_string, - correct_choice: this[id].correct_choice, - correct_choices: this[id].correct_choices, - }; - }, data.rh_result.answers); - } - - let buttonContainer = ww_container.querySelector('.problem-buttons.webwork'); - // Create the submission buttons if they have not yet been created. - if (!buttonContainer) { - // Hide the original div that contains the old make active button. - ww_container.querySelector('.problem-buttons').classList.add('hidden-content'); - // And the newer activate button if it is there - if (activate_button != null) {activate_button.classList.add('hidden-content');}; - - // Create a new div for the webwork buttons. - buttonContainer = document.createElement('div'); - buttonContainer.classList.add('problem-buttons', 'webwork'); - if (activate_button != null) { - // Make sure the button container follows the activate button in the DOM - activate_button.after(buttonContainer); - } else { - ww_container.prepend(buttonContainer); - } - - // Check button - const check = document.createElement("button"); - check.type = "button"; - check.id = ww_id + '-check'; - check.style.marginRight = "0.25rem"; - check.classList.add('webwork-button'); - - // Adjust if more than one answer to check - const answerCount = body_div.querySelectorAll("input:not([type=hidden])").length + - body_div.querySelectorAll("select:not([type=hidden])").length; - - check.textContent = runestone_logged_in ? localize_submit : localize_check_responses; - check.addEventListener('click', () => handleWW(ww_id, "check")); - - buttonContainer.appendChild(check); - - // Show correct answers button if original PTX has answer knowl. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = document.createElement("button"); - correct.classList.add("show-correct", 'webwork-button'); - correct.type = "button"; - correct.style.marginRight = "0.25rem"; - correct.textContent = localize_reveal; - correct.addEventListener('click', () => WWshowCorrect(ww_id, answers)); - buttonContainer.appendChild(correct); - } - - // randomize button - const randomize = document.createElement("button") - randomize.type = "button"; - randomize.classList.add('webwork-button'); - randomize.style.marginRight = "0.25rem"; - randomize.textContent = localize_randomize; - randomize.addEventListener('click', () => handleWW(ww_id, 'randomize')); - buttonContainer.appendChild(randomize) - - // reset button - const reset = document.createElement("button") - reset.type = "button" - reset.classList.add('webwork-button'); - reset.textContent = localize_reset; - reset.addEventListener('click', () => resetWW(ww_id)); - buttonContainer.appendChild(reset) - } else { - // Update the click handler for the show correct button. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = buttonContainer.querySelector('.show-correct'); - const correctNew = correct.cloneNode(true); - correctNew.addEventListener('click', () => WWshowCorrect(ww_id, answers)); - correct.replaceWith(correctNew); - } - } - - if (action == 'check') { - // Runestone trigger - // TODO: condition on platform=Runestone - $("body").trigger('runestone_ww_check', data) - - const inputs = body_div.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - if (input.type == 'text' && answers[name]) { - const score = data.rh_result.answers[name].score; - let headline = ''; - let correctClass = ''; - if (score >= 1) { - headline = localize_correct + '!'; - correctClass = 'correct'; - } else if (score > 0 && score < 1) { - headline = `${Math.round(score * 100)}% ${localize_correct}.`; - correctClass = 'partly-correct'; - } else if (data.rh_result.answers[name].student_ans == '') { - headline = localize_blank + '.'; - correctClass = 'blank'; - } else if (score <= 0) { - headline = localize_incorrect + '.'; - correctClass = 'incorrect'; - } - let title = `${headline}`; - let message = (data.rh_result.answers[name].ans_message ? data.rh_result.answers[name].ans_message : ''); - input.classList.add(correctClass); - // make a span that contains feedback - feedbackSpan = document.createElement('span'); - feedbackSpan.id = `${ww_id}-${name}-feedback`; - feedbackHeadline = document.createElement('span'); - feedbackHeadline.id = `${ww_id}-${name}-headline`; - feedbackHeadline.textContent = headline; - feedbackSpan.appendChild(feedbackHeadline); - feedbackMessage = document.createElement('span'); - feedbackMessage.id = `${ww_id}-${name}-message`; - feedbackMessage.textContent = message; - feedbackSpan.appendChild(feedbackMessage); - // make a non breaking span to surround input, sr span, and feedback button - let nbSpan = document.createElement('span'); - nbSpan.classList.add("nobreak"); - input.parentNode.insertBefore(nbSpan, input); - nbSpan.appendChild(input); - // put a visibly hidden (screen-reader only) span with feedback - let srSpan = document.createElement('span'); - srSpan.classList.add("visually-hidden"); - srSpan.appendChild(feedbackSpan); - nbSpan.appendChild(srSpan); - // give the feedback to sr users immediately - input.setAttribute('aria-describedby',`${ww_id}-${name}-feedback`); - // make the feedback button - srSpan.after(createFeedbackButton(`${ww_id}-${name}`, title, message)); - - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const score = data.rh_result.answers[name].score; - const student_ans = data.rh_result.answers[name].student_value || data.rh_result.answers[name].student_ans; - const correct_ans = data.rh_result.answers[name].correct_choice || data.rh_result.answers[name].correct_ans; - if (input.value == student_ans) { - if (score == 1) { - input.parentNode.classList.add('correct'); - } else { - input.parentNode.classList.add('incorrect'); - } - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, - (student_ans == correct_ans) - ? `${localize_correct}` : `${localize_incorrect}.`) - feedbackButton.style.marginRight = '0.25rem'; - input.after(feedbackButton); - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const score = data.rh_result.answers[name].score; - const student_ans = data.rh_result.answers[name].student_ans; - const correct_ans = data.rh_result.answers[name].correct_ans; - if (input.value == data.rh_result.answers[name].firstElement) { - const checkbox_div = input.parentNode.parentNode; - if (score == 1) { - checkbox_div.classList.add('correct'); - } else { - checkbox_div.classList.add('incorrect'); - } - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, - (student_ans == correct_ans) - ? `${localize_correct}` : `${localize_incorrect}.`) - checkbox_div.insertBefore(feedbackButton, checkbox_div.firstChild); - } - } - } - - const hiddenInputs = body_div.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - graphtoolContainer.style.position = 'relative'; - const score = data.rh_result.answers[name].score; - let title = ''; - if (score == 1) { - title = `${localize_correct}`; - } else if (score > 0 && score < 1) { - title = `${Math.round(score * 100)}% ${localize_correct}.`; - } else if (data.rh_result.answers[name].student_ans == '') { - // do nothing if the submitted answer is blank and the problem has not already been scored as correct - continue; - } else if (score == 0) { - title = `${localize_incorrect}.`; - } - - const feedbackButton = createFeedbackButton(`${ww_id}-${name}`, title, data.rh_result.answers[name].ans_message); - feedbackButton.style.position = 'absolute'; - feedbackButton.style.left = '100%'; - feedbackButton.style.top = 0; - feedbackButton.style.marginLeft = '0.5rem'; - feedbackButton.dataset.bsContainer = 'body'; - graphtoolContainer.appendChild(feedbackButton); - if (score == 1) { - graphtoolContainer.classList.add('correct'); - } else { - graphtoolContainer.classList.add('incorrect'); - } - - } - } - - const selects = body_div.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const score = data.rh_result.answers[name].score; - let title = ''; - if (score == 1) { - headline = localize_correct + '!'; - correctClass = 'correct'; - } else { - headline = localize_incorrect + '.'; - correctClass = 'incorrect'; - } - select.classList.add(correctClass); - title = `${headline}`; - // make a span that contains feedback - feedbackSpan = document.createElement('span'); - feedbackSpan.id = `${ww_id}-${name}-feedback`; - feedbackHeadline = document.createElement('span'); - feedbackHeadline.id = `${ww_id}-${name}-headline`; - feedbackHeadline.textContent = headline; - feedbackSpan.appendChild(feedbackHeadline); - // make a non breaking span to surround select, sr span, and feedback button - let nbSpan = document.createElement('span'); - nbSpan.classList.add("nobreak"); - select.parentNode.insertBefore(nbSpan, select); - nbSpan.appendChild(select); - // put a span around select since select does not support ::after pseudo elements - let psSpan = document.createElement('span'); - psSpan.classList.add("select-wrapper", correctClass); - select.parentNode.insertBefore(psSpan, select); - psSpan.appendChild(select); - // put a visibly hidden (screen-reader only) span with feedback - let srSpan = document.createElement('span'); - srSpan.classList.add("visually-hidden"); - srSpan.appendChild(feedbackSpan); - nbSpan.appendChild(srSpan); - // give the feedback to sr users immediately - select.setAttribute('aria-describedby',`${ww_id}-${name}-feedback`); - // make the feedback button - srSpan.after(createFeedbackButton(`${ww_id}-${name}`, title)); - } - } - - let iframeContents = '' + - '' + - `` + - '' + - '' + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - //if (data.rh_result.flags.extra_js_files) { - // for (const jsFile of data.rh_result.flags.extra_js_files) { - // if (jsFile.file == "js/apps/GraphTool/graphtool.min.js" || jsFile.file == "js/apps/Scaffold/scaffold.js") { - // extra_css_files.push({ file: 'js/vendor/bootstrap/css/bootstrap.css', external: '0' }); - // extra_css_files.push({ file: 'themes/math4/math4.css', external: '0' }); - // extra_js_files.push({ file: 'js/vendor/bootstrap/js/bootstrap.js', external: '0' }); - // } - // } - //} - - if (data.extra_css_files) data.extra_css_files.unshift(...extra_css_files); - else data.extra_css_files = extra_css_files; - for (const cssFile of data.extra_css_files) { - if (/knowl/.test(cssFile.file)) continue; - iframeContents += ''; - } - - if (data.extra_js_files) data.extra_js_files.unshift(...extra_js_files); - else data.extra_js_files = extra_js_files; - for (const jsFile of data.extra_js_files) { - if (/knowl/.test(jsFile.file)) continue; - iframeContents += ''; - } - - iframeContents += - '' + - '' + - '' + - `` + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'min' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentDocument.querySelectorAll("button.ww-feedback[data-bs-content]").forEach(button => { - const bsPopover = new iframe.contentWindow.bootstrap.Popover(button, { - html: true, - placement: 'bottom', - fallbackPlacements: [], - trigger: 'click', - customClass: 'result-popover' + (button.dataset.emptyContent ? ' nocontent' : '') - }); - bsPopover.show(); - const content = iframe.contentDocument.getElementById(button.id.replace("-feedback-button", "-content")); - const popover = content.parentNode.parentNode; - bsPopover.hide(); - - /*button.addEventListener('shown.bs.popover', () => { - // Note that the button itself has the aria-describedby attribute set by bootstrap automatically. - button.previousElementSibling?.setAttribute('aria-describedby', popover.id); - });*/ - - button.addEventListener('click', () => bsPopover.show(), { once: true }); - - popover.querySelector('.popover-arrow').remove(); - const title = popover.querySelector('.popover-header'); - if (button.dataset.emptyContent) content.parentNode.remove(); - if (title.textContent == localize_correct + '!') title.classList.add('correct'); - }); - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const input_id = input.id; - const mq_span = iframe.contentDocument.getElementById(`mq-answer-${input_id}`); - if (mq_span) { - mq_span.style.display = 'none'; - } - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - const correct_ans = answers[name].correct_choice || answers[name].correct_ans; - if (input.value == correct_ans) { - input.checked = true; - //input.setAttribute('checked', 'checked'); - } else { - input.checked = false; - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const correct_choices = answers[name].correct_choices; - if (correct_choices.includes(input.value)) { - input.checked = true; - // input.setAttribute('checked', 'checked'); - } else { - input.checked = false; - // input.setAttribute('checked', false); - } - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - const feedbackButton = iframe.contentDocument.getElementById(`${ww_id}-${name}-feedback-button`); - if (feedbackButton) { - iframe.contentWindow.bootstrap.Popover.getInstance(feedbackButton)?.hide(); - feedbackButton.remove(); - } - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = new URL(node.attributes.src.value, ww_domain).href; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // the problem text may come with "hint"s and "solution"s - // Each one is an "a" with the class ".knowl" and the data-type attribute of either "hint" or "solution". - // the WeBWorK knowl js would normally handle this, but we want PreTeXt knowl js to handle it - // so we replace the "a" with the content that should be there for PTX knowl js - // also if hint/sol were missing from the static version, we want these removed here - - const hintSols = body_div.querySelectorAll('.knowl[data-type="hint"],.knowl[data-type="solution"]'); - let solutionlikewrapper; - for (const hintSol of hintSols) { - const hintsolp = hintSol.parentNode; - if (!hintsolp) continue; - const hintsolpp = hintsolp.parentNode; //the div that contains each p with a knowl anchor - const hintSolType = hintSol.dataset.type; - - if (hintsolpp.querySelectorAll(".webwork.solutions").length == 0) - { - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('webwork', 'solutions'); - hintsolpp.insertBefore(solutionlikewrapper, hintsolp); - } - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || - (hintSolType == 'hint' && !b_ptx_has_hint)) - continue; - - const knowlDetails = document.createElement('details'); - knowlDetails.classList.add(hintSolType); - knowlDetails.classList.add('solution-like'); - knowlDetails.classList.add('born-hidden-knowl'); - - const knowlSummary = document.createElement('summary'); - const summaryLabel = document.createElement('span'); - summaryLabel.classList.add('type'); - summaryLabel.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(summaryLabel); - knowlDetails.appendChild(knowlSummary); - - const knowlContents = document.createElement('div'); - knowlContents.classList.add(hintSolType); - knowlContents.classList.add('solution-like'); - knowlContents.innerHTML = hintsolp.firstElementChild.dataset.knowlContents; - knowlDetails.appendChild(knowlContents); - - adjustSrcHrefs(knowlContents, ww_domain) - solutionlikewrapper.appendChild(knowlDetails); - } - for (const hintSol of hintSols) { - hintSol.parentNode?.remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function createFeedbackButton(id, title, content) { - const feedbackButton = document.createElement('button'); - feedbackButton.dataset.bsTitle = title; - feedbackButton.dataset.bsContent = `
    ${content || ''}
    `; - if (!content) feedbackButton.dataset.emptyContent = '1'; - const contentSpan = document.createElement('span'); - contentSpan.innerHTML = ``; - feedbackButton.appendChild(contentSpan); - feedbackButton.type = 'button'; - feedbackButton.classList.add('ww-feedback'); - - feedbackButton.id = `${id}-feedback-button`; - feedbackButton.dataset.bsToggle = 'popover'; - - return feedbackButton; -} - -function webworkSeedHash(string) { - var hash = 0, i, chr; - if (string.length === 0) return hash; - for (i = 0; i < string.length; i++) { - chr = string.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; //Convert to 32bit integer - } - return Math.abs(hash); -}; diff --git a/slides/_static/pretext/js/pretext-webwork/2.19/pretext-webwork.js b/slides/_static/pretext/js/pretext-webwork/2.19/pretext-webwork.js deleted file mode 100755 index 99fb2f0..0000000 --- a/slides/_static/pretext/js/pretext-webwork/2.19/pretext-webwork.js +++ /dev/null @@ -1,677 +0,0 @@ -//Critical: -// TODO: Think about what should be done for an essay question. - -//Accessibility: - -//Enhancement: -// TODO: Have randomize check that new seed is actually producing new HTML. -// TODO: Don't offer randomize button unless we know a new version can be produced after trying a few seeds. - -//Styling: -// TODO: Review all styling in all scenarios (staged/not, correct/partly-correct/incorrect/blank, single/multiple) - -async function handleWW(ww_id, action) { - const ww_container = document.getElementById(ww_id); - const ww_domain = ww_container.dataset.domain; - const ww_processing = 'webwork2'; - const ww_origin = ww_container.dataset.origin; - const ww_problemSource = ww_container.dataset.problemsource; - const ww_sourceFilePath = ww_container.dataset.sourcefilepath; - const ww_course_id = ww_container.dataset.courseid; - const ww_user_id = ww_container.dataset.userid; - const ww_passwd = ww_container.dataset.coursepassword; - const localize_submit = ww_container.dataset.localizeSubmit || "Submit"; - const localize_check_responses = ww_container.dataset.localizeCheckResponses || "Check Responses"; - const localize_reveal = ww_container.dataset.localizeReveal || "Reveal"; - const localize_randomize = ww_container.dataset.localizeRandomize || "Randomize"; - const localize_reset = ww_container.dataset.localizeReset || "Reset"; - const runestone_logged_in = (typeof eBookConfig !== 'undefined' && eBookConfig.username !== ''); - // will be null on pages generated prior to late December 2022 - const activate_button = document.getElementById(ww_id + '-button') - - // Set the current seed - if (!action) { - ww_container.dataset.current_seed = ww_container.dataset.seed; - if (runestone_logged_in) { - ww_container.dataset.current_seed = webworkSeedHash(eBookConfig.username + ww_container.dataset.current_seed); - } - } - else if (action == 'randomize') ww_container.dataset.current_seed = Number(ww_container.dataset.current_seed) + 100; - - let loader = document.createElement('div'); - loader.style.position = 'absolute'; - loader.style.left = 0; - loader.style.top = 0; - loader.style.backgroundColor = 'rgba(0.2, 0.2, 0.2, 0.4)'; - loader.style.color = 'white'; - loader.style.width = '100%'; - loader.style.height = '100%'; - loader.style.display = 'flex'; - loader.style.alignItems = 'center'; - loader.style.justifyContent = 'center'; - loader.style.marginTop = '0'; - loader.tabIndex = -1; - const loaderText = document.createElement('span'); - loaderText.textContent = 'Loading'; - loaderText.style.fontSize = '2rem'; - loader.appendChild(loaderText); - ww_container.appendChild(loader); - loader.focus(); - - if (!action) { - // Determine if static version shows hints, solutions, or answers and save that information in the container dataset for later runs. - ww_container.dataset.hasHint = ww_container.getElementsByClassName('hint').length > 0; - ww_container.dataset.hasSolution = ww_container.getElementsByClassName('solution').length > 0; - ww_container.dataset.hasAnswer = ww_container.getElementsByClassName('answer').length > 0; - // Get (possibly localized) label text for hints and solutions. - ww_container.dataset.hintLabelText = ww_container.dataset.hasHint == 'true' - ? ww_container.querySelectorAll('.hint-knowl span.type, details.hint span.type')[0].textContent : 'Hint'; - ww_container.dataset.solutionLabelText = ww_container.dataset.hasSolution == 'true' - ? ww_container.querySelectorAll('.solution-knowl span.type, details.solution span.type')[0].textContent : 'Solution'; - - ww_container.tabIndex = -1; - } - - let url; - if (ww_processing == 'webwork2') { - url = new URL(ww_domain + '/webwork2/render_rpc'); - } - let formData = new FormData(); - let generatedPG = 'generated/webwork/pg/'; - if (runestone_logged_in) { - generatedPG = `/ns/books/published/${eBookConfig.basecourse}/${generatedPG}`; - } - - if (action == 'check' || action =='reveal') { - const iframe = ww_container.querySelector('.problem-iframe'); - formData = new FormData(iframe.contentDocument.getElementById(ww_id + "-form")); - formData.set("answersSubmitted", '1'); - formData.set('WWsubmit', "1"); - if (action == 'reveal' && ww_container.dataset.hasAnswer == 'true') { - formData.set('WWcorrectAnsOnly', "1"); - } - if (ww_origin == 'generated') { - const rawProblemSource = await fetch(generatedPG + ww_problemSource).then((r) => r.text()); - formData.set("rawProblemSource", rawProblemSource); - } - else if (ww_origin == 'webwork2') formData.set("sourceFilePath", ww_sourceFilePath); - } else { - formData.set("problemSeed", ww_container.dataset.current_seed); - if (ww_origin == 'generated') { - const rawProblemSource = await fetch(generatedPG + ww_problemSource).then((r) => r.text()); - formData.set("rawProblemSource", rawProblemSource); - } - else if (ww_origin == 'webwork2') formData.set("sourceFilePath", ww_sourceFilePath); - formData.set("answersSubmitted", '0'); - formData.set("displayMode", "MathJax"); - formData.set("courseID", ww_course_id); - formData.set("user", ww_user_id); - formData.set("userID", ww_user_id); - formData.set("passwd", ww_passwd); - formData.set("disableCookies", '1'); - formData.set("outputformat", "raw"); - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - formData.set("showSolutions", ww_container.dataset.hasSolution == 'true' ? '1' : '0'); - formData.set("showHints", ww_container.dataset.hasHint == 'true' ? '1' : '0'); - formData.set("problemUUID",ww_id); - } - - // If in Runestone, check if there are previous answer submissions and get them now to use in the form. - let checkboxesString = ''; - if (runestone_logged_in && !action) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const previousAnswers = answersObject.answers; - if (previousAnswers !== null) { - formData.set('WWsubmit', 1); - } - for (const answer in previousAnswers) { - if (previousAnswers[answer].constructor === Array) { - for (const k in previousAnswers[answer]) { - checkboxesString += '&'; - checkboxesString += answer; - checkboxesString += '='; - checkboxesString += previousAnswers[answer][k]; - } - } else { - formData.set(answer, previousAnswers[answer]); - } - } - } - // Need to get form data as a string, including possible repeated checkbox names - // Do not pass post data as an object, or checkbox names will overwrite one another - const formString = new URLSearchParams(formData).toString(); - - $.post(url, formString + checkboxesString, (data) => { - // Create the form that will contain the text and input fields of the interactive problem. - const form = document.createElement("form"); - form.id = ww_id + "-form"; - form.dataset.iframeHeight = 1; - - // Create a div for the problem text. - const body_div = document.createElement("div"); - body_div.id = ww_id + "-body"; - body_div.classList.add("exercise", "exercise-like"); - body_div.lang = data.lang; - body_div.dir = data.dir; - - // Dump the problem text, answer blanks, etc. - body_div.innerHTML = data.rh_result.text; - - // If showPartialCorrectAnswers = 0, alter the feedback buttons according to whether or not the score is 100%. - if ('showPartialCorrectAnswers' in data.rh_result.flags && data.rh_result.flags.showPartialCorrectAnswers == 0) { - if ('score' in data.rh_result.problem_result && data.rh_result.problem_result.score >= 1) { - body_div.querySelectorAll('button.ww-feedback-btn').forEach( - function(button) { - button.classList.remove('btn-info'); - button.classList.add('btn-success'); - button.setAttribute('aria-label', 'Correct'); - button.dataset.bsCustomClass = button.dataset.bsCustomClass + ' correct'; - button.dataset.bsTitle = button.dataset.bsTitle.replace('Answer Preview', 'Correct'); - button.firstChild.classList.add('correct') - } - ); - } else { - body_div.querySelectorAll('button.ww-feedback-btn').forEach( - function(button) { - button.setAttribute('aria-label', 'One or more answers incorrect'); - button.dataset.bsTitle = button.dataset.bsTitle.replace('Answer Preview', 'One or more answers incorrect'); - } - ); - } - } - - // Replace all hn headings with h6 headings. - for (const tag_name of ['h6', 'h5', 'h4', 'h3', 'h2', 'h1']) { - const headings = body_div.getElementsByTagName(tag_name); - for (heading of headings) { - const new_heading = document.createElement("h6"); - new_heading.innerHTML = heading.innerHTML; - cloneAttributes(new_heading, heading); - new_heading.classList.add('webwork-part'); - heading.replaceWith(new_heading); - } - } - - // Hide textarea input and hide associated buttons - var textareas = body_div.getElementsByTagName("textarea"); - for(var i = 0, max = textareas.length; i < max; i++) - { - textareas[i].style.display = "none"; - textareas[i].className = ''; - } - var textareabuttons = body_div.querySelectorAll(".latexentry-preview"); - for(var i = 0, max = textareabuttons.length; i < max; i++) - { - textareabuttons[i].remove(); - } - - adjustSrcHrefs(body_div, ww_domain); - - translateHintSol(ww_id, body_div, ww_domain, - ww_container.dataset.hasHint == 'true', ww_container.dataset.hasSolution == 'true', - ww_container.dataset.hintLabelText, ww_container.dataset.solutionLabelText) - - // insert previous answers - if (runestone_logged_in) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const mqAnswers = answersObject.mqAnswers; - for (const mqAnswer in mqAnswers) { - const mqInput = body_div.querySelector('input[id=' + mqAnswer + ']'); - if (mqInput && mqInput.value == '') { - mqInput.setAttribute('value', mqAnswers[mqAnswer]); - } - } - const answers = answersObject.answers; - for (const answer in answers) { - const input = body_div.querySelector('input[id=' + answer + ']'); - if (input && input.value == '') { - input.setAttribute('value', answers[answer]); - } - } - } - - // insert our cleaned up problem text - form.appendChild(body_div); - - // Set up hidden input fields that the form uses - const wwInputs = { - problemSeed: data.inputs_ref.problemSeed, - problemUUID: data.inputs_ref.problemUUID, - psvn: data.inputs_ref.psvn, - courseName: ww_course_id, - courseID: ww_course_id, - user: ww_user_id, - passwd: ww_passwd, - displayMode: "MathJax", - session_key: data.rh_result.session_key, - outputformat: "raw", - language: data.formLanguage, - showSummary: data.showSummary, - disableCookies: '1', - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - showSolutions: ww_container.dataset.hasSolution == 'true' ? '1' : '0', - showHints: ww_container.dataset.hasHint == 'true' ? '1' : '0', - forcePortNumber: data.forcePortNumber - }; - - if (ww_sourceFilePath) wwInputs.sourceFilePath = ww_sourceFilePath; - else if (ww_problemSource && ww_origin == 'webwork2') wwInputs.problemSource = ww_problemSource; - - for (const wwInputName of Object.keys(wwInputs)) { - const input = document.createElement('input'); - input.type = 'hidden'; - input.name = wwInputName; - input.value = wwInputs[wwInputName]; - form.appendChild(input); - } - - let buttonContainer = ww_container.querySelector('.problem-buttons.webwork'); - // Create the submission buttons if they have not yet been created. - if (!buttonContainer) { - // Hide the original div that contains the Activate. - ww_container.querySelector('.problem-buttons').classList.add('hidden-content', 'hidden'); - - // Create a new div for the webwork buttons. - buttonContainer = document.createElement('div'); - buttonContainer.classList.add('problem-buttons', 'webwork'); - if (activate_button != null) { - // Make sure the button container follows the activate button in the DOM - activate_button.after(buttonContainer); - } else { - ww_container.prepend(buttonContainer); - } - - // Check button - const check = document.createElement("button"); - check.type = "button"; - check.id = ww_id + '-check'; - check.style.marginRight = "0.25rem"; - check.classList.add('webwork-button'); - - check.textContent = runestone_logged_in ? localize_submit : localize_check_responses; - - check.addEventListener('click', () => handleWW(ww_id, "check")); - - buttonContainer.appendChild(check); - - // Show correct answers button if original PTX has answer knowl. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = document.createElement("button"); - correct.classList.add("show-correct", 'webwork-button'); - correct.type = "button"; - correct.style.marginRight = "0.25rem"; - correct.textContent = localize_reveal; - correct.addEventListener('click', () => handleWW(ww_id, 'reveal')); - buttonContainer.appendChild(correct); - } - - // randomize button - const randomize = document.createElement("button") - randomize.type = "button"; - randomize.classList.add('webwork-button'); - randomize.style.marginRight = "0.25rem"; - randomize.textContent = localize_randomize; - randomize.addEventListener('click', () => handleWW(ww_id, 'randomize')); - buttonContainer.appendChild(randomize) - - // reset button - const reset = document.createElement("button") - reset.type = "button" - reset.classList.add('webwork-button'); - reset.textContent = localize_reset; - reset.addEventListener('click', () => resetWW(ww_id)); - buttonContainer.appendChild(reset) - } - - if (runestone_logged_in && action == 'check') { - // Runestone trigger - $("body").trigger('runestone_ww_check', data) - } - let courseUrlBase = ''; - if (runestone_logged_in){ - courseUrlBase = '/ns/books/published/' + eBookConfig.basecourse + '/'; - } - let iframeContents = '' + - '' + - `` + - '' + - `` + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - - if (data.extra_css_files) data.extra_css_files.unshift(...extra_css_files); - else data.extra_css_files = extra_css_files; - for (const cssFile of data.extra_css_files) { - iframeContents += ''; - } - - if (data.extra_js_files) data.extra_js_files.unshift(...extra_js_files); - else data.extra_js_files = extra_js_files; - for (const jsFile of data.extra_js_files) { - iframeContents += ''; - } - - iframeContents += - `` + - '' + - `` + - '' + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content', 'hidden'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'taggedElement' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }, "json"); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const input_id = input.id; - const mq_span = iframe.contentDocument.getElementById(`mq-answer-${input_id}`); - if (mq_span) { - mq_span.style.display = 'none'; - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const correct_ans = answers[name].correct_choice || answers[name].correct_ans; - if (input.value == correct_ans) { - input.checked = true; - } else { - input.checked = false; - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const correct_choices = answers[name].correct_choices; - if (correct_choices.includes(input.value)) { - input.checked = true; - } else { - input.checked = false; - } - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content', 'hidden'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content', 'hidden'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content', 'hidden');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[data-knowl-url]').forEach((node) => { - const dku = node.dataset.knowlUrl; - if (dku !== '#' && !dku.match(/^[a-z]+:\/\//i)) node.dataset.knowlUrl = ww_domain + dku; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = new URL(node.attributes.src.value, ww_domain).href; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // The problem text may come with "hint"s and "solution"s - // Each one is a div.accordion > details.accordion-item > summary.accordion-button - // Styling is not the PTX way, so we change it to one div.solutions - // with (potentially multiple) details.born-hidden-knowl > summary.knowl__link - // Also if hint/sol were missing from the static version, we want these removed here - - const hintSols = body_div.querySelectorAll('.accordion.hint,.accordion.solution'); - if (hintSols.length == 0) {return}; - - for (const hintSol of hintSols) { - const parent = hintSol.parentNode; - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('solutions'); - parent.insertBefore(solutionlikewrapper, hintSol); - - const hintSolType = hintSol.classList.contains('hint') ? 'hint' : 'solution'; - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || - (hintSolType == 'hint' && !b_ptx_has_hint)) - continue; - - const knowlDetails = hintSol.getElementsByTagName('details')[0]; - knowlDetails.className = ''; - knowlDetails.classList.add(hintSolType, 'solution-like', 'born-hidden-knowl'); - solutionlikewrapper.appendChild(knowlDetails); - - const knowlSummary = knowlDetails.getElementsByTagName('summary')[0]; - knowlSummary.className = ''; - knowlSummary.classList.add('knowl__link'); - - const summaryLabel = knowlSummary.children[0]; - summaryLabel.remove(); - - const newLabelSpan = document.createElement('span'); - newLabelSpan.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(newLabelSpan); - - const newLabelPeriod = document.createElement('span'); - newLabelPeriod.innerHTML = '.'; - knowlSummary.appendChild(newLabelPeriod); - - adjustSrcHrefs(knowlDetails, ww_domain); - hintSol.remove(); - - const originalDetailsContent = knowlDetails.getElementsByTagName('div')[0]; - const newDetailsContent = originalDetailsContent.getElementsByTagName('div')[0]; - newDetailsContent.className = ''; - newDetailsContent.classList.add(hintSolType, 'solution-like', 'knowl__content'); - knowlDetails.appendChild(newDetailsContent); - originalDetailsContent.remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function webworkSeedHash(string) { - var hash = 0, i, chr; - if (string.length === 0) return hash; - for (i = 0; i < string.length; i++) { - chr = string.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; //Convert to 32bit integer - } - return Math.abs(hash); -}; diff --git a/slides/_static/pretext/js/pretext-webwork/2.20/pretext-webwork.js b/slides/_static/pretext/js/pretext-webwork/2.20/pretext-webwork.js deleted file mode 100755 index 1cd3ca6..0000000 --- a/slides/_static/pretext/js/pretext-webwork/2.20/pretext-webwork.js +++ /dev/null @@ -1,686 +0,0 @@ -//Critical: -// TODO: Think about what should be done for an essay question. - -//Accessibility: - -//Enhancement: -// TODO: Have randomize check that new seed is actually producing new HTML. -// TODO: Don't offer randomize button unless we know a new version can be produced after trying a few seeds. - -//Styling: -// TODO: Review all styling in all scenarios (staged/not, correct/partly-correct/incorrect/blank, single/multiple) - -async function handleWW(ww_id, action) { - const ww_container = document.getElementById(ww_id); - const ww_domain = ww_container.dataset.domain; - const ww_processing = 'webwork2'; - const ww_origin = ww_container.dataset.origin; - const ww_problemSource = ww_container.dataset.problemsource; - let ww_baseCourse = ww_container.dataset.documentid; - const ww_sourceFilePath = ww_container.dataset.sourcefilepath; - const ww_course_id = ww_container.dataset.courseid; - const ww_user_id = ww_container.dataset.userid; - const ww_passwd = ww_container.dataset.coursepassword; - const localize_submit = ww_container.dataset.localizeSubmit || "Submit"; - const localize_check_responses = ww_container.dataset.localizeCheckResponses || "Check Responses"; - const localize_reveal = ww_container.dataset.localizeReveal || "Reveal"; - const localize_randomize = ww_container.dataset.localizeRandomize || "Randomize"; - const localize_reset = ww_container.dataset.localizeReset || "Reset"; - const runestone_logged_in = (typeof eBookConfig !== 'undefined' && eBookConfig.username !== ''); - // will be null on pages generated prior to late December 2022 - const activate_button = document.getElementById(ww_id + '-button') - - // Set the current seed - if (!action) { - ww_container.dataset.current_seed = ww_container.dataset.seed; - if (runestone_logged_in) { - ww_container.dataset.current_seed = webworkSeedHash(eBookConfig.username + ww_container.dataset.current_seed); - } - } - else if (action == 'randomize') ww_container.dataset.current_seed = Number(ww_container.dataset.current_seed) + 100; - - let loader = document.createElement('div'); - loader.style.position = 'absolute'; - loader.style.left = 0; - loader.style.top = 0; - loader.style.backgroundColor = 'rgba(0.2, 0.2, 0.2, 0.4)'; - loader.style.color = 'white'; - loader.style.width = '100%'; - loader.style.height = '100%'; - loader.style.display = 'flex'; - loader.style.alignItems = 'center'; - loader.style.justifyContent = 'center'; - loader.style.marginTop = '0'; - loader.tabIndex = -1; - const loaderText = document.createElement('span'); - loaderText.textContent = 'Loading'; - loaderText.style.fontSize = '2rem'; - loader.appendChild(loaderText); - ww_container.appendChild(loader); - loader.focus(); - - if (!action) { - // Determine if static version shows hints, solutions, or answers and save that information in the container dataset for later runs. - ww_container.dataset.hasHint = ww_container.getElementsByClassName('hint').length > 0; - ww_container.dataset.hasSolution = ww_container.getElementsByClassName('solution').length > 0; - ww_container.dataset.hasAnswer = ww_container.getElementsByClassName('answer').length > 0; - // Get (possibly localized) label text for hints and solutions. - ww_container.dataset.hintLabelText = ww_container.dataset.hasHint == 'true' - ? ww_container.querySelectorAll('.hint-knowl span.type, details.hint span.type')[0].textContent : 'Hint'; - ww_container.dataset.solutionLabelText = ww_container.dataset.hasSolution == 'true' - ? ww_container.querySelectorAll('.solution-knowl span.type, details.solution span.type')[0].textContent : 'Solution'; - - ww_container.tabIndex = -1; - } - - let url; - if (ww_processing == 'webwork2') { - url = new URL(ww_domain + '/webwork2/render_rpc'); - } - let formData = new FormData(); - let generatedPG = 'generated/webwork/pg/'; - // For Runestone, we specify where to find the generated problems. - if (runestone_logged_in) { - if (ww_problemSource && !ww_baseCourse) { - // WeBWorK authored in source, generated after 2025/10/15-ish, should have a baseCourse specified. We fall back to parsing the baseCourse from ww_id, which *should* always start with the base course prior to the first underscore (although this is not guaranteed). If no underscore is found, we fall back to eBookConfig.basecourse. - // This is only needed for webwork problems authored in source, not OPL problems, so we only check when ww_problemSource is set. - const parts = ww_id.split('_'); - ww_baseCourse = parts.length > 1 ? parts[0] : eBookConfig.basecourse; - console.log("using the base course " + ww_baseCourse); - } - generatedPG = `/ns/books/published/${ww_baseCourse}/${generatedPG}`; - } - - if (action == 'check' || action =='reveal') { - const iframe = ww_container.querySelector('.problem-iframe'); - formData = new FormData(iframe.contentDocument.getElementById(ww_id + "-form")); - formData.set("answersSubmitted", '1'); - formData.set('WWsubmit', "1"); - if (action == 'reveal' && ww_container.dataset.hasAnswer == 'true') { - formData.set('WWcorrectAnsOnly', "1"); - } - if (ww_origin == 'generated') { - const rawProblemSource = await fetch(generatedPG + ww_problemSource).then((r) => r.text()); - formData.set("rawProblemSource", rawProblemSource); - } - else if (ww_origin == 'webwork2') formData.set("sourceFilePath", ww_sourceFilePath); - } else { - formData.set("problemSeed", ww_container.dataset.current_seed); - if (ww_origin == 'generated') { - const rawProblemSource = await fetch(generatedPG + ww_problemSource).then((r) => r.text()); - formData.set("rawProblemSource", rawProblemSource); - } - else if (ww_origin == 'webwork2') formData.set("sourceFilePath", ww_sourceFilePath); - formData.set("answersSubmitted", '0'); - formData.set("displayMode", "MathJax"); - formData.set("courseID", ww_course_id); - formData.set("user", ww_user_id); - formData.set("userID", ww_user_id); - formData.set("passwd", ww_passwd); - formData.set("disableCookies", '1'); - formData.set("outputformat", "raw"); - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - formData.set("showSolutions", ww_container.dataset.hasSolution == 'true' ? '1' : '0'); - formData.set("showHints", ww_container.dataset.hasHint == 'true' ? '1' : '0'); - formData.set("problemUUID",ww_id); - } - - // If in Runestone, check if there are previous answer submissions and get them now to use in the form. - let checkboxesString = ''; - if (runestone_logged_in && !action) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const previousAnswers = answersObject.answers; - if (previousAnswers !== null) { - formData.set('WWsubmit', 1); - } - for (const answer in previousAnswers) { - if (previousAnswers[answer].constructor === Array) { - for (const k in previousAnswers[answer]) { - checkboxesString += '&'; - checkboxesString += answer; - checkboxesString += '='; - checkboxesString += previousAnswers[answer][k]; - } - } else { - formData.set(answer, previousAnswers[answer]); - } - } - } - // Need to get form data as a string, including possible repeated checkbox names - // Do not pass post data as an object, or checkbox names will overwrite one another - const formString = new URLSearchParams(formData).toString(); - - $.post(url, formString + checkboxesString, (data) => { - // Create the form that will contain the text and input fields of the interactive problem. - const form = document.createElement("form"); - form.id = ww_id + "-form"; - form.dataset.iframeHeight = 1; - - // Create a div for the problem text. - const body_div = document.createElement("div"); - body_div.id = ww_id + "-body"; - body_div.classList.add("exercise", "exercise-like"); - body_div.lang = data.lang; - body_div.dir = data.dir; - - // Dump the problem text, answer blanks, etc. - body_div.innerHTML = data.rh_result.text; - - // If showPartialCorrectAnswers = 0, alter the feedback buttons according to whether or not the score is 100%. - if ('showPartialCorrectAnswers' in data.rh_result.flags && data.rh_result.flags.showPartialCorrectAnswers == 0) { - if ('score' in data.rh_result.problem_result && data.rh_result.problem_result.score >= 1) { - body_div.querySelectorAll('button.ww-feedback-btn').forEach( - function(button) { - button.classList.remove('btn-info'); - button.classList.add('btn-success'); - button.setAttribute('aria-label', 'Correct'); - button.dataset.bsCustomClass = button.dataset.bsCustomClass + ' correct'; - button.dataset.bsTitle = button.dataset.bsTitle.replace('Answer Preview', 'Correct'); - button.firstChild.classList.add('correct') - } - ); - } else { - body_div.querySelectorAll('button.ww-feedback-btn').forEach( - function(button) { - button.setAttribute('aria-label', 'One or more answers incorrect'); - button.dataset.bsTitle = button.dataset.bsTitle.replace('Answer Preview', 'One or more answers incorrect'); - } - ); - } - } - - // Replace all hn headings with h6 headings. - for (const tag_name of ['h6', 'h5', 'h4', 'h3', 'h2', 'h1']) { - const headings = body_div.getElementsByTagName(tag_name); - for (heading of headings) { - const new_heading = document.createElement("h6"); - new_heading.innerHTML = heading.innerHTML; - cloneAttributes(new_heading, heading); - new_heading.classList.add('webwork-part'); - heading.replaceWith(new_heading); - } - } - - // Hide textarea input and hide associated buttons - var textareas = body_div.getElementsByTagName("textarea"); - for(var i = 0, max = textareas.length; i < max; i++) - { - textareas[i].style.display = "none"; - textareas[i].className = ''; - } - var textareabuttons = body_div.querySelectorAll(".latexentry-preview"); - for(var i = 0, max = textareabuttons.length; i < max; i++) - { - textareabuttons[i].remove(); - } - - adjustSrcHrefs(body_div, ww_domain); - - translateHintSol(ww_id, body_div, ww_domain, - ww_container.dataset.hasHint == 'true', ww_container.dataset.hasSolution == 'true', - ww_container.dataset.hintLabelText, ww_container.dataset.solutionLabelText) - - // insert previous answers - if (runestone_logged_in) { - const answersObject = (wwList[ww_id.replace(/-ww-rs$/,'')].answers ? wwList[ww_id.replace(/-ww-rs$/,'')].answers : {'answers' : [], 'mqAnswers' : []}); - const mqAnswers = answersObject.mqAnswers; - for (const mqAnswer in mqAnswers) { - const mqInput = body_div.querySelector('input[id=' + mqAnswer + ']'); - if (mqInput && mqInput.value == '') { - mqInput.setAttribute('value', mqAnswers[mqAnswer]); - } - } - const answers = answersObject.answers; - for (const answer in answers) { - const input = body_div.querySelector('input[id=' + answer + ']'); - if (input && input.value == '') { - input.setAttribute('value', answers[answer]); - } - } - } - - // insert our cleaned up problem text - form.appendChild(body_div); - - // Set up hidden input fields that the form uses - const wwInputs = { - problemSeed: data.inputs_ref.problemSeed, - problemUUID: data.inputs_ref.problemUUID, - psvn: data.inputs_ref.psvn, - courseName: ww_course_id, - courseID: ww_course_id, - user: ww_user_id, - passwd: ww_passwd, - displayMode: "MathJax", - session_key: data.rh_result.session_key, - outputformat: "raw", - language: data.formLanguage, - showSummary: data.showSummary, - disableCookies: '1', - // note ww_container.dataset.hasSolution is a string, possibly 'false' which is true - showSolutions: ww_container.dataset.hasSolution == 'true' ? '1' : '0', - showHints: ww_container.dataset.hasHint == 'true' ? '1' : '0', - forcePortNumber: data.forcePortNumber - }; - - if (ww_sourceFilePath) wwInputs.sourceFilePath = ww_sourceFilePath; - else if (ww_problemSource && ww_origin == 'webwork2') wwInputs.problemSource = ww_problemSource; - - for (const wwInputName of Object.keys(wwInputs)) { - const input = document.createElement('input'); - input.type = 'hidden'; - input.name = wwInputName; - input.value = wwInputs[wwInputName]; - form.appendChild(input); - } - - let buttonContainer = ww_container.querySelector('.problem-buttons.webwork'); - // Create the submission buttons if they have not yet been created. - if (!buttonContainer) { - // Hide the original div that contains the Activate. - ww_container.querySelector('.problem-buttons').classList.add('hidden-content', 'hidden'); - - // Create a new div for the webwork buttons. - buttonContainer = document.createElement('div'); - buttonContainer.classList.add('problem-buttons', 'webwork'); - if (activate_button != null) { - // Make sure the button container follows the activate button in the DOM - activate_button.after(buttonContainer); - } else { - ww_container.prepend(buttonContainer); - } - - // Check button - const check = document.createElement("button"); - check.type = "button"; - check.id = ww_id + '-check'; - check.style.marginRight = "0.25rem"; - check.classList.add('webwork-button'); - - check.textContent = runestone_logged_in ? localize_submit : localize_check_responses; - - check.addEventListener('click', () => handleWW(ww_id, "check")); - - buttonContainer.appendChild(check); - - // Show correct answers button if original PTX has answer knowl. - if (ww_container.dataset.hasAnswer == 'true') { - const correct = document.createElement("button"); - correct.classList.add("show-correct", 'webwork-button'); - correct.type = "button"; - correct.style.marginRight = "0.25rem"; - correct.textContent = localize_reveal; - correct.addEventListener('click', () => handleWW(ww_id, 'reveal')); - buttonContainer.appendChild(correct); - } - - // randomize button - const randomize = document.createElement("button") - randomize.type = "button"; - randomize.classList.add('webwork-button'); - randomize.style.marginRight = "0.25rem"; - randomize.textContent = localize_randomize; - randomize.addEventListener('click', () => handleWW(ww_id, 'randomize')); - buttonContainer.appendChild(randomize) - - // reset button - const reset = document.createElement("button") - reset.type = "button" - reset.classList.add('webwork-button'); - reset.textContent = localize_reset; - reset.addEventListener('click', () => resetWW(ww_id)); - buttonContainer.appendChild(reset) - } - - if (runestone_logged_in && action == 'check') { - // Runestone trigger - $("body").trigger('runestone_ww_check', data) - } - let courseUrlBase = ''; - if (runestone_logged_in){ - courseUrlBase = '/ns/books/published/' + eBookConfig.basecourse + '/'; - } - let iframeContents = '' + - '' + - `` + - '' + - `` + - '' + - ''; - - // Determine javascript and css dependencies - const extra_css_files = []; - const extra_js_files = []; - - if (data.extra_css_files) data.extra_css_files.unshift(...extra_css_files); - else data.extra_css_files = extra_css_files; - for (const cssFile of data.extra_css_files) { - iframeContents += ''; - } - - if (data.extra_js_files) data.extra_js_files.unshift(...extra_js_files); - else data.extra_js_files = extra_js_files; - for (const jsFile of data.extra_js_files) { - iframeContents += ''; - } - - iframeContents += - `` + - '' + - `` + - '' + - '
    ' + form.outerHTML + '
    ' + - ''; - - let iframe; - // If there is no action this is the initialization call. - if (!action) { - // Create the iframe. - iframe = document.createElement('iframe'); - iframe.style.width = '1px'; - iframe.style.minWidth = '100%'; - iframe.classList.add('problem-iframe'); - - // Hide the static problem - ww_container.querySelector('.problem-contents').classList.add('hidden-content', 'hidden'); - - if (activate_button != null) { - // Make sure the iframe follows the activate button in the DOM - activate_button.after(iframe); - } else { - ww_container.prepend(iframe); - } - - iFrameResize({ checkOrigin: false, scrolling: 'omit', heightCalculationMethod: 'taggedElement' }, iframe); - - iframe.addEventListener('load', () => { - // Set up form submission from inside the iframe. - const iframeForm = iframe.contentDocument.getElementById(ww_id + '-form'); - iframeForm.addEventListener('submit', (e) => { - handleWW(ww_id, "check"); - e.preventDefault(); - }); - - iframe.contentDocument.querySelectorAll('.collapse.in').forEach(collapse => collapse.classList.add('expanded')); - iframe.contentWindow.jQuery('.collapse').on('shown', function(e) { if (e.target != this) return; this.classList.add('expanded'); }); - iframe.contentWindow.jQuery('.collapse').on('hide', function(e) { if (e.target != this) return; this.classList.remove('expanded'); }); - - iframe.contentWindow.MathJax.startup.promise.then(() => iframe.contentWindow.MathJax.typesetPromise(['.popover', '.popover-content'])); - }); - } else { - iframe = ww_container.querySelector('.problem-iframe'); - } - - iframe.srcdoc = iframeContents; - - iframe.addEventListener('load', () => { - // Remove the loader overlay - loader.remove(); - }, { once: true }) - - // Place focus on the problem. - ww_container.focus() - }, "json"); -} - -function WWshowCorrect(ww_id, answers) { - const ww_container = document.getElementById(ww_id); - const iframe = ww_container.querySelector('.problem-iframe'); - - const body = iframe.contentDocument.getElementById(ww_id + '-body') - $("body").trigger("runestone_show_correct", { - "ww_id": ww_id, - "answers": answers - }); - - let inputs = body.querySelectorAll("input:not([type=hidden])"); - for (const input of inputs) { - const name = input.name; - const span_id = `${ww_id}-${name}-correct`; - - if (input.type == 'text' && answers[name] && !(iframe.contentDocument.getElementById(span_id))) { - const input_id = input.id; - const mq_span = iframe.contentDocument.getElementById(`mq-answer-${input_id}`); - if (mq_span) { - mq_span.style.display = 'none'; - } - label = iframe.contentDocument.getElementById(`${span_id}-label`); - if (label) { - label.parentElement.insertBefore(input, label); - label.remove(); - } - input.type = "hidden"; - // we need to convert things like < in answers to < - const correct_ans_text = iframe.contentDocument.createElement('div'); - correct_ans_text.innerHTML = answers[name].correct_ans; - input.value = correct_ans_text.textContent; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - input.parentElement.insertBefore(show_span, input); - } - - if (input.type.toUpperCase() == 'RADIO' && answers[name]) { - const correct_ans = answers[name].correct_choice || answers[name].correct_ans; - if (input.value == correct_ans) { - input.checked = true; - } else { - input.checked = false; - } - } - - if (input.type.toUpperCase() == 'CHECKBOX' && answers[name]) { - const correct_choices = answers[name].correct_choices; - if (correct_choices.includes(input.value)) { - input.checked = true; - } else { - input.checked = false; - } - } - } - - const hiddenInputs = body.querySelectorAll("input[type=hidden]"); - for (const input of hiddenInputs) { - const name = input.name; - if (!input.nextElementSibling) continue; - const graphtoolContainer = input.nextElementSibling.nextElementSibling; - if (graphtoolContainer && answers[name] && graphtoolContainer.classList.contains('graphtool-container')) { - const correct_ans_div = iframe.contentDocument.createElement('div'); - input.parentElement.insertBefore(correct_ans_div, graphtoolContainer); - graphtoolContainer.style.display = 'none'; - input.value = answers[name].correct_ans; - iframe.contentWindow.jQuery(correct_ans_div).html(answers[name].correct_ans_latex_string); - const script = iframe.contentDocument.createElement('script'); - script.textContent = correct_ans_div.querySelector('script').textContent - .replace('\nwindow.addEventListener("DOMContentLoaded",', '(') - .replace(/;\n$/, '();'); - iframe.contentDocument.body.appendChild(script); - } - } - - let selects = body.querySelectorAll("select:not([type=hidden])"); - for (const select of selects) { - const name = select.name; - const span_id = `${ww_id}-${name}-correct`; - if (answers[name] && !iframe.contentDocument.getElementById(span_id)) { - select.style.display = "none"; - select.value = answers[name].correct_ans; - const show_span = iframe.contentDocument.createElement('span'); - show_span.id = span_id; - show_span.appendChild(answers[name].correct_ans_latex_string - ? iframe.contentDocument.createTextNode('\\(' + answers[name].correct_ans_latex_string + '\\)') - : iframe.contentDocument.createTextNode(answers[name].correct_ans)); - select.parentElement.insertBefore(show_span, select); - } - } - - // run MathJax on our new rendering - // FIXME: We only need to typeset the added elements, not the entire body. - const mathjaxTypesetScript = iframe.contentDocument.createElement('script'); - mathjaxTypesetScript.textContent = 'MathJax.startup.promise.then(() => MathJax.typesetPromise([document.body]));'; - iframe.contentDocument.body.appendChild(mathjaxTypesetScript); -} - -function resetWW(ww_id) { - const ww_container = document.getElementById(ww_id); - const activate_button = document.getElementById(ww_id + '-button'); - - ww_container.dataset.current_seed = ww_container.dataset.seed; - - iframe = ww_container.querySelector('.problem-iframe'); - iframe.remove(); - - ww_container.querySelector('.problem-contents').classList.remove('hidden-content', 'hidden'); - - ww_container.querySelector('.problem-buttons.webwork').remove(); - ww_container.querySelector('.problem-buttons').classList.remove('hidden-content', 'hidden'); - // if the newer activate button is there (but hidden) bring it back too - if (activate_button != null) {activate_button.classList.remove('hidden-content', 'hidden');}; -} - -function adjustSrcHrefs(container,ww_domain) { - container.querySelectorAll('[href]').forEach((node) => { - const href = node.attributes.href.value; - if (href !== '#' && !href.match(/^[a-z]+:\/\//i)) node.href = ww_domain + '/' + href; - }); - container.querySelectorAll('[data-knowl-url]').forEach((node) => { - const dku = node.dataset.knowlUrl; - if (dku !== '#' && !dku.match(/^[a-z]+:\/\//i)) node.dataset.knowlUrl = ww_domain + dku; - }); - container.querySelectorAll('[src]').forEach((node) => { - node.src = new URL(node.attributes.src.value, ww_domain).href; - }); -} - -function translateHintSol(ww_id, body_div, ww_domain, b_ptx_has_hint, b_ptx_has_solution, hint_label_text, solution_label_text) { - // The problem text may come with "hint"s and "solution"s - // Each one is a div.accordion > details.accordion-item > summary.accordion-button - // Styling is not the PTX way, so we change it to one div.solutions - // with (potentially multiple) details.born-hidden-knowl > summary.knowl__link - // Also if hint/sol were missing from the static version, we want these removed here - - const hintSols = body_div.querySelectorAll('.accordion.hint,.accordion.solution'); - if (hintSols.length == 0) {return}; - - for (const hintSol of hintSols) { - const parent = hintSol.parentNode; - solutionlikewrapper = document.createElement('div'); - solutionlikewrapper.classList.add('solutions'); - parent.insertBefore(solutionlikewrapper, hintSol); - - const hintSolType = hintSol.classList.contains('hint') ? 'hint' : 'solution'; - - if ((hintSolType == 'solution' && !b_ptx_has_solution) || - (hintSolType == 'hint' && !b_ptx_has_hint)) - continue; - - const knowlDetails = hintSol.getElementsByTagName('details')[0]; - knowlDetails.className = ''; - knowlDetails.classList.add(hintSolType, 'solution-like', 'born-hidden-knowl'); - solutionlikewrapper.appendChild(knowlDetails); - - const knowlSummary = knowlDetails.getElementsByTagName('summary')[0]; - knowlSummary.className = ''; - knowlSummary.classList.add('knowl__link'); - - const summaryLabel = knowlSummary.children[0]; - summaryLabel.remove(); - - const newLabelSpan = document.createElement('span'); - newLabelSpan.innerHTML = hintSolType == 'hint' ? hint_label_text : solution_label_text; - knowlSummary.appendChild(newLabelSpan); - - const newLabelPeriod = document.createElement('span'); - newLabelPeriod.innerHTML = '.'; - knowlSummary.appendChild(newLabelPeriod); - - adjustSrcHrefs(knowlDetails, ww_domain); - hintSol.remove(); - - const originalDetailsContent = knowlDetails.getElementsByTagName('div')[0]; - const newDetailsContent = originalDetailsContent.getElementsByTagName('div')[0]; - newDetailsContent.className = ''; - newDetailsContent.classList.add(hintSolType, 'solution-like', 'knowl__content'); - knowlDetails.appendChild(newDetailsContent); - originalDetailsContent.remove(); - } -} - -function cloneAttributes(target, source) { - [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) }); -} - -function webworkSeedHash(string) { - var hash = 0, i, chr; - if (string.length === 0) return hash; - for (i = 0; i < string.length; i++) { - chr = string.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; //Convert to 32bit integer - } - return Math.abs(hash); -}; diff --git a/slides/_static/pretext/js/pretext.js b/slides/_static/pretext/js/pretext.js deleted file mode 100755 index bcddf7e..0000000 --- a/slides/_static/pretext/js/pretext.js +++ /dev/null @@ -1,257 +0,0 @@ -/******************************************************************************* - * pretext.js - ******************************************************************************* - * The main front-end controller for PreTeXt documents. - * - * Homepage: pretextbook.org - * Repository: https://github.com/PreTeXtBook/JS_core - * - * Authors: David Farmer, Rob Beezer - * - ******************************************************************************* - */ - -// from https://stackoverflow.com/questions/34422189/get-item-offset-from-the-top-of-page -function getOffsetTop(e) { - // recursively walk up the DOM via offsetParent, accumulating offsetTop as we go - if (!e) return 0; - return getOffsetTop(e.offsetParent) + e.offsetTop; -}; - -function scrollTocToActive() { - //Try to figure out current TocItem from URL - let fileNameWHash = window.location.href.split("/").pop(); - let fileName = fileNameWHash.split("#")[0]; - - //Find just the filename in ToC - let tocEntry = document.querySelector('#ptx-toc a[href="' + fileName + '"]'); - if (!tocEntry) { - return; //complete failure, get out - } - - let tocEntryTop = 0; - //See if we can also match fileName#hash (assuming there is a fragment) - if (fileNameWHash.includes('#')) { - let tocEntryWHash = document.querySelector( - '#ptx-toc a[href="' + fileNameWHash + '"]' - ); - if (tocEntryWHash) { - //Matched something below a subsection - activate the list item that contains it - tocEntry.closest("li").querySelectorAll("li").forEach(li => { - li.classList.remove("active"); - }); - tocEntryWHash.closest("li").classList.add("active"); - tocEntryTop = getOffsetTop(tocEntryWHash); - } - } - if (!tocEntryTop) { - tocEntryTop = getOffsetTop(tocEntry); - } - - //Now activate ToC item for fileName and scroll to it - // Don't use scrollIntoView because it changes users tab position in Chrome - // and messes up keyboard navigation - tocEntry.closest("li").classList.add("active"); - // Scroll only if the tocEntry is below the bottom half of the window, - // scrolling to that position. - let toc = document.querySelector("#ptx-toc"); - let tocTop = getOffsetTop(toc); - toc.scrollTop = tocEntryTop - tocTop - 0.4 * self.innerHeight; -} - -function toggletoc() { - thesidebar = document.getElementById("ptx-sidebar"); - if (thesidebar.classList.contains("hidden") || thesidebar.classList.contains("visible")) { - thesidebar.classList.toggle("hidden"); - thesidebar.classList.toggle("visible"); - } else if (thesidebar.offsetParent === null) { /* not currently visible */ - thesidebar.classList.toggle("visible"); - } else { - thesidebar.classList.toggle("hidden"); - } - scrollTocToActive(); -} - -function samePageLink(a) { - if (!(a instanceof HTMLAnchorElement)) return false; - - try { - const linkUrl = new URL(a.href, document.baseURI); - const currentUrl = new URL(window.location.href); - - const sameDocument = - linkUrl.origin === currentUrl.origin && - linkUrl.pathname === currentUrl.pathname && - linkUrl.search === currentUrl.search; - - return sameDocument && !!linkUrl.hash; - } catch (e) { - // Invalid URL - return false; - } -} - - -window.addEventListener("DOMContentLoaded",function(event) { - thetocbutton = document.getElementsByClassName("toc-toggle")[0]; - thetocbutton.addEventListener("click", (e) => { - toggletoc(); - e.stopPropagation(); // keep global click handler from immediately toggling it back - }); - - // For themes that want it, install click handlers to auto close the toc - // when the reader clicks anywhere outside it or selects a subsection. - // (Selecting other sections or chapters navigates away from the page so - // effectively closes the TOC.) - if (getComputedStyle(document.documentElement).getPropertyValue('--auto-collapse-toc') == "yes") { - - const sidebar = document.getElementById("ptx-sidebar"); - - // Handle all clicks outside the sidebar - window.addEventListener("click", function(event) { - if (sidebar.classList.contains("visible")) { - if (!event.composedPath().includes(sidebar)) { - toggletoc(); - } - } - }); - - // Handle clicks inside the sidebar but on link within a subsection. - sidebar.addEventListener("click", function (event) { - if (samePageLink(event.target.closest('a'))) { - toggletoc(); - } - }); - - // Handle persistent sidebar if the page is restored from cache on back/forward buttons. - window.addEventListener('pageshow', (e) => { - if (e.persisted) { - sidebar.classList.remove('visible'); - sidebar.classList.add('hidden'); - } - }); - } -}); - -/* jump to next page if reader tries to scroll past the bottom */ -// var hitbottom = false; -// window.onscroll = function(ev) { -// if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) { -// // you're at the bottom of the page -// console.log("Bottom of page"); -// if (hitbottom) { -// console.log("hit bottom again"); -// thenextbutton = document.getElementsByClassName("next-button")[0]; -// thenextbutton.click(); -// } else { -// hitbottom = true; -// /* only jump to next page if hard scroll in quick succession */ -// window.scrollBy(0, -20); -// setTimeout(function (){ hitbottom = false }, 1000); -// } -// } -// }; - - -//----------------------------------------------------------------------------- -// Dynamic TOC logic -//----------------------------------------------------------------------------- - -//item is assumed to be expander in toc-item -function toggleTOCItem(expander) { - let listItem = expander.closest(".toc-item"); - listItem.classList.toggle("expanded"); - let expanded = listItem.classList.contains("expanded"); - - let itemType = getTOCItemType(listItem); - if(expanded) { - expander.title = "Close" + (itemType !== "" ? " " + itemType : ""); - } else { - expander.title = "Expand" + (itemType !== "" ? " " + itemType : ""); - } - - //should be one of each... for/of for safety and built in null avoidance - for (const childUL of listItem.querySelectorAll(":scope > ul.toc-item-list")) { - for (const childItem of childUL.querySelectorAll(":scope > li.toc-item")) { - if(expanded) { - childItem.classList.add("visible"); - childItem.classList.remove("hidden"); - } else { - childItem.classList.remove("visible"); - childItem.classList.add("hidden"); - } - } - } -} - -//finds item type from classes or empty string on failure -function getTOCItemType(item) { - //Type should be class that looks like toc-X where X is not item. Find it and return X - for(let className of item.classList) { - if(className !== "toc-item" && className.length > 3 && className.slice(0,4) === "toc-") - return className.slice(4); - } - return ""; -} - -//finds depth of toc-item as defined by number .toc-item-lists it is in -function getTOCItemDepth(item) { - let depth = 0; - let curParent = item.closest(".toc-item-list"); - while(curParent !== null) { - depth++; - curParent = curParent.parentElement.closest(".toc-item-list"); - } - return depth; -} - -window.addEventListener("DOMContentLoaded", function(event) { - if(document.querySelector(".ptx-toc.focused") === null) - return; //only in focused mode - - let maxDepth = 1000; //how deep TOC goes - //check toc for depth class and get value from there - for(let className of document.querySelector(".ptx-toc").classList) - if(className.length > 5 && className.slice(0,5) === "depth") - maxDepth = Number(className.slice(5)); - - let preexpandedLevels = 1; //how many levels to preexpand - let tocDataSet = document.querySelector(".ptx-toc").dataset; - if(typeof tocDataSet.preexpandedLevels !== 'undefined') - preexpandedLevels = Number(tocDataSet.preexpandedLevels); - - let tocItems = document.querySelectorAll(".ptx-toc ul.structural > .toc-item"); - for (const tocItem of tocItems) { - let hasChildren = tocItem.querySelector('ul.structural') !== null; - let depth = getTOCItemDepth(tocItem); - - if(hasChildren && depth < maxDepth) { - let expander = document.createElement("button"); - expander.classList.add('toc-expander'); - expander.classList.add('toc-chevron-surround'); - expander.title = 'toc-expander'; - // content of span is set by CSS :before rule. - expander.innerHTML = ''; - tocItem.querySelector(".toc-title-box").append(expander); - expander.addEventListener('click', () => { - toggleTOCItem(expander); - }); - - let isActive = tocItem.classList.contains("contains-active") || tocItem.classList.contains("active"); - let preExpanded = isActive || depth < preexpandedLevels; - let itemType = getTOCItemType(tocItem); - if(preExpanded) { - toggleTOCItem(expander); - } else { - expander.title = "Expand" + (itemType !== "" ? " " + itemType : ""); - } - } - } -}); - -// This needs to be after the TOC's geometry is settled -window.addEventListener("DOMContentLoaded",function(event) { - scrollTocToActive(); -}); - -window.onhashchange = scrollTocToActive; diff --git a/slides/_static/pretext/js/pretext_add_on.js b/slides/_static/pretext/js/pretext_add_on.js deleted file mode 100755 index ae2225f..0000000 --- a/slides/_static/pretext/js/pretext_add_on.js +++ /dev/null @@ -1,1264 +0,0 @@ -/******************************************************************************* - * pretext_add_on.js - ******************************************************************************* - * Javascript for supplementary material in PreTeXt documents. - * - * Homepage: pretextbook.org - * Repository: https://github.com/PreTeXtBook/JS_core - * - * Authors: David Farmer, Rob Beezer, Alex Jordan - * - ******************************************************************************* - */ - -/* -console.log("thisbrowser.userAgent", window.navigator.userAgent); -*/ - -var minivers = "0"; -if (typeof miniversion !== 'undefined') { - console.log("typeof miniversion", typeof miniversion, "dddd", typeof miniversion == 'undefined'); - minivers = miniversion.toString(); -} -console.log(" minivers", minivers); - -/* scrollbar width from https://stackoverflow.com/questions/13382516/getting-scroll-bar-width-using-javascript */ -function getScrollbarWidth() { - var outer = document.createElement("div"); - outer.style.visibility = "hidden"; - outer.style.width = "100px"; - outer.style.msOverflowStyle = "scrollbar"; // needed for WinJS apps - - document.body.appendChild(outer); - - var widthNoScroll = outer.offsetWidth; - // force scrollbars - outer.style.overflow = "scroll"; - - // add innerdiv - var inner = document.createElement("div"); - inner.style.width = "100%"; - outer.appendChild(inner); - - var widthWithScroll = inner.offsetWidth; - - // remove divs - outer.parentNode.removeChild(outer); - - return widthNoScroll - widthWithScroll; -} - -/* - copy permalink address to clipboard - requires browser support, otherwise does nothing -*/ -async function copyPermalink(linkNode) { - // structure borrowed from https://flaviocopes.com/clipboard-api/ - if (!navigator.clipboard) { - // Clipboard API not available - console.log("Error: Clipboard API not available"); - return - } - console.log("copying permalink for", linkNode); - var elem = linkNode.parentElement - if (!linkNode) { - console.log("Error: Something went wrong finding permalink URL") - return - } - const this_permalink_url = linkNode.href; - const this_permalink_description = elem.getAttribute('data-description'); - var link = "" + this_permalink_description + ""; - var msg_link = "" + this_permalink_description + ""; - var text_fallback = this_permalink_description + " \r\n" + this_permalink_url; - var copy_success = true; - try { - // NOTE: this method will only work in Firefox if the user has - // dom.events.asyncClipboard.clipboardItem - // set to true in their about:config. - // Annoyingly, this setting is turned off by default. - // If that setting is off, this try block will fail and we'll use the - // fallback method lower down instead. - await navigator.clipboard.write([ - new ClipboardItem({ - 'text/html': new Blob([link], { type: 'text/html' }), - 'text/plain': new Blob([text_fallback], { type: 'text/plain' }), - }) - ]); - } catch (err) { - console.log('Permalink-to-clipboard using ClipboardItem failed, falling back to clipboard.writeText', err); - copy_success = false; - } - if (! copy_success) { - try { - await navigator.clipboard.writeText(text_fallback); - } catch (err) { - console.log('Permalink-to-clipboard using clipboard.writeText failed', err); - console.error('Failed to copy link to clipboard!'); - return - } - } - - console.log(`copied '${this_permalink_url}' to clipboard`); - // temporary element to alert user that link was copied - let copied_msg = document.createElement('p'); - copied_msg.setAttribute('role', 'alert'); - copied_msg.className = "permalink-alert"; - copied_msg.innerHTML = "Link to " + msg_link + " copied to clipboard"; - elem.parentElement.insertBefore(copied_msg, elem); - // show confirmation for a couple seconds - await new Promise((resolve, reject) => setTimeout(resolve, 1500)); - copied_msg.remove(); - -} - -// Add event listener to add onClick handler for permalinks -window.addEventListener("DOMContentLoaded", function() { - const permalinks = document.querySelectorAll('.autopermalink > a'); - permalinks.forEach(link => { - link.addEventListener('click', function(event) { - event.preventDefault(); // Prevent default anchor behavior - copyPermalink(link); - }); - }); -}); - - -window.addEventListener("load",function(event) { - - - /* click an image to magnify */ - $('body').on('click','.image-box > img:not(.draw_on_me):not(.mag_popup), .sbspanel > img:not(.draw_on_me):not(.mag_popup), figure > img:not(.draw_on_me):not(.mag_popup), figure > div > img:not(.draw_on_me):not(.mag_popup)', function(){ - var img_big = document.createElement('div'); - img_big.setAttribute('style', 'background:#fff;'); - img_big.setAttribute('class', 'mag_popup_container'); - img_big.innerHTML = ''; - // place_to_put_big_img = $(this).parents(".sbsrow, figure, li").last(); - place_to_put_big_img = $(this).parents(".image-box, .sbsrow, figure, li, .cols2 article:nth-of-type(2n)").last(); - // for .cols2, the even ones have to go inside the previous odd one - if (place_to_put_big_img.prop("tagName") == "ARTICLE") { - place_to_put_big_img = place_to_put_big_img.prev().children().first(); - } - $(img_big).insertBefore(place_to_put_big_img); - }); - - /* click the big image to make it go away */ - $('body').on('click','img.mag_popup', function(){ - this.parentNode.remove(); - }); - - /* add ids to p that have none */ - p_no_id = document.querySelectorAll('.main p:not([id])'); - for (var n=p_no_id.length - 1; n >= 0; --n) { - e = p_no_id[n]; - if (e.hasAttribute('id')) { -/* - console.log(e, "was id'd in a previous round"); -*/ - continue - } -/* -console.log("this is e", e); -*/ - if (e.classList.contains('watermark')) { - console.log(e, "skipping the watermark"); - continue - } -/* - console.log("\n XXXXXXXXX p with no id", e); -*/ - prev_p = $(e).prevAll("p"); - console.log("prev_p", prev_p, "xx"); - if(prev_p.length == 0) { - console.log(" PPP problem: prev_p has no length:", prev_p); - continue - } - console.log("which has id", prev_p[0].id); - var parts_found = 1; - var parts_to_id = [e]; - for (var i=0; i < prev_p.length; ++i) { - this_previous = prev_p[i]; - console.log("i", i, "this_previous", this_previous, "id", this_previous.id, "???", this_previous.hasAttribute('id')) - if (!this_previous.hasAttribute('id')) { - parts_to_id.unshift(this_previous) - } - else { - base_id = this_previous.id; - console.log("base_id", base_id); - console.log("ready to add id to", parts_to_id); - for (var j=0; j < parts_to_id.length; ++j) { - ++parts_found; - var next_id = base_id + "-part" + parts_found.toString(); - console.log("parts_found", parts_found, "next_id", next_id); - parts_to_id[j].setAttribute("id", next_id); - } - break // because we found the id that is the base for the missing ids - } - } - } - - console.log("adding video popouts"); - all_iframes = document.querySelectorAll('body iframeXXXX'); - // for now, we just want the iframes that hace youtube in the src - for (var i = 0; i < all_iframes.length; i++) { - this_item = all_iframes[i]; - this_item_src = this_item.src; - // console.log("this_item_src", this_item_src); - if(this_item_src.includes("youtube")) { - this_item_id = this_item.id; - this_item_width = this_item.width; - this_item_height = this_item.height; - if(this_item_height < 150) { continue } - console.log("found a youtube video on", this_item_id); - var empty_div = document.createElement('div'); - var this_videomag_container = document.createElement('div'); - parent_tag = this_item.parentElement.tagName; - if(parent_tag == "FIGURE") { - this_videomag_container.setAttribute("class", "videobig"); - } else { - this_videomag_container.setAttribute("class", "videobig nofigure"); - } -/* - this_videomag_container.setAttribute('class', 'videobig'); -*/ - this_videomag_container.setAttribute('video-id', this_item_id); - this_videomag_container.setAttribute('data-width', this_item_width); - this_videomag_container.setAttribute('data-height', this_item_height); - this_videomag_container.innerHTML = 'fit width'; - -/* replace this with a surrounding div, for placement, containing a inline-block so the background looks right */ - this_item.insertAdjacentElement("beforebegin", empty_div); // because of hard-coded permalinks being inline-block */ - this_item.insertAdjacentElement("beforebegin", this_videomag_container); - this_item.insertAdjacentElement("beforebegin", empty_div); // because of hard-coded permalinks being inline-block */ - } - } - -/* replace this with a single class fo rthe button, with supplementary classes that say to shrink or grow */ - $(".videobig").click(function(){ - parent_video_id = this.getAttribute("video-id"); - console.log("clicked videobig for", parent_video_id); - this_video = document.getElementById(parent_video_id); - console.log("make big: ", this_video); - original_width = this.getAttribute("data-width"); - original_height = this.getAttribute("data-height"); - - browser_width = $(window).width(); - width_ratio = browser_width/original_width; - console.log("the browser is wider by a factor of",width_ratio); - this_video.setAttribute("width", width_ratio*original_width); - this_video.setAttribute("height", width_ratio*original_height); - this_video.setAttribute("style", "position:relative; left:-260px; z-index:1000"); - - this.setAttribute("class", "videosmall"); - this.innerHTML = "make small"; - $(".videosmall").click(function(){ - console.log("clicked videosmall"); - parent_video_id = this.getAttribute("video-id"); - this_video = document.getElementById(parent_video_id); - original_width = this.getAttribute("data-width"); - original_height = this.getAttribute("data-height"); - - this_video.removeAttribute("style"); - this_video.setAttribute("width", original_width); - this_video.setAttribute("height", original_height); - this.setAttribute("class", "videobig"); - this.innerHTML = "fit width"; - }); - }); - -}, -false); - -/* for the random WW problems */ - -function updateURLParameter(url, param, paramVal){ - var newAdditionalURL = ""; - var tempArray = url.split("?"); - var baseURL = tempArray[0]; - var additionalURL = tempArray[1]; - var temp = ""; - if (additionalURL) { - tempArray = additionalURL.split("&"); - for (var i=0; i div.onclick > svg > path').attr('fill', '#0000aa'); - $('path').attr('fill', '#0000aa') -// }, 5000) -}); -*/ - -window.addEventListener("load",function(event) { - document.onkeyup = function(event) - { - var e = (!event) ? window.event : event; - switch(e.keyCode) - { - case 13: //CR - just_hit_escape = false; - if ($(document.activeElement).hasClass("workspace")) { - process_workspace() - } - case 27: //esc - // var parent_sage_cell = $(this).closest(".sagecell_editor"); - var parent_sage_cell = document.activeElement.closest(".sagecell_editor"); - if (parent_sage_cell && !just_hit_escape) { - console.log("staying in the sage cell", parent_sage_cell, document.activeElement) - just_hit_escape = true; - setTimeout(function(){ just_hit_escape = false }, 1000); - // console.log("parent_sage_cell", parent_sage_cell); - // if ($(parent_sage_cell).hasClass('sagecell_editor')) { - // console.log("I am trapped in a sage cell", $(document.activeElement).closest(".sagecell_editor")); - // console.log($(document.activeElement)); - // var this_sage_cell = $(document.activeElement).closest(".sagecell_editor"); - // this_sage_cell.next().focus; - // } - // else - } else - if(knowl_focus_stack.length > 0 ) { - most_recently_opened = knowl_focus_stack.pop(); - knowl_focus_stack_uid.pop(); - most_recently_opened.focus(); - console.log("moved back one knowl"); - } else { - console.log("no open knowls being tracked"); - break; - } - break; - } -}; -}, -false); - -// a hack for hosted tracking - -window.addEventListener("load",function(event) { - if($('body').attr('id') == "judson-AATA") { - console.log(" found AATA"); - console.log(" looking for id"); - if (typeof eBookConfig !== 'undefined') { - if(eBookConfig['username']) { - aa_id = "run" + eBookConfig['username']; - ut_id = eBookConfig['username']; - console.log(" done looking for id", ut_id); -var newscript = document.createElement('script'); - newscript.type = 'text/javascript'; - newscript.async = true; - newscript.src = 'https://pretextbook.org/js/' + '0.13' + '/' + 'trails' + '.js'; - var allscripts = document.getElementsByTagName('script'); - var s = allscripts[allscripts.length - 1]; - console.log('s',s); - console.log("adding a script", newscript); - s.parentNode.insertBefore(newscript, s.nextSibling); - trail = true; - console.log(" done adding script"); - } else { - console.log(" did not find username"); - } - } else { - console.log(" did not find eBookConfig") - } - } -}); - -function loadResource(type, file) { - /* type should be js or css */ - if (typeof js_version === 'undefined') { js_version = '0.2' } - if (typeof css_version === 'undefined') { css_version = '0.6' } - var newresource, allresources, s; - var linktype = "script"; - if (type == "css") { linktype = "link" } - newresource = document.createElement(linktype); - - if (type == "css") { - newresource.type = 'text/css'; - newresource.rel = 'stylesheet'; - newresource.href = 'https://pretextbook.org/css/' + css_version + '/' + file + '.css'; - newresource.href += '?minivers=' + minivers; - } else if (type == "js") { - newresource.type = 'text/javascript'; -// newscript.async = true; - newresource.src = 'https://pretextbook.org/js/' + js_version + '/' + file + '.js'; - newresource.src += '?minivers=' + minivers; - } else { - console.log("unknown resource type", type, "for", file); - return - } - - allresources = document.getElementsByTagName(linktype); - s = allresources[allresources.length - 1]; - console.log('s',s); - console.log("adding a resource", newresource); - s.parentNode.insertBefore(newresource, s.nextSibling); -} - - -window.addEventListener("load",function(event) { - if(false && $('body').attr('id') == "pretext-SA") { - console.log(" found DMOI"); - if (typeof uname === "undefined") { uname = "" } - console.log("aaaa", uname, " uname"); - if(uname == "editor") { - loadResource('js', 'edit'); - } else { - console.log("not enabling editing") - } - /* } else if ($('body').attr('id') == "pugetsound-SW") { */ - } else if (false && window.location.href.includes("soundwriting.pugetsound")) { -/* a bunch of temporary exploration for a Sound Writing survey */ - console.log("please take our survey"); - console.log(window.location.href); - console.log(window.location.href.includes("soundwriting.pugetsound")); - - loadResource("js", "login"); - loadResource("css", "features"); - setTimeout( loadResource("js", "survey"), 1000); /* I know: sloppy */ - - // } else if ((typeof online_editable !== 'undefined') && online_editable) { - } else if (false && $('body').attr('id') == "pretext-SA") { - loadResource('css', 'features'); - loadResource('js', 'login') - loadResource('js', 'edit'); - } else { - var this_source_txt; - var source_url = window.location.href; - source_url = source_url.replace(/(#|\?).*/, ""); - source_url = source_url.replace(/html$/, "ptx"); - if (typeof sourceeditable !== 'undefined') { - fetch(source_url).then( - function(u){ return u.text();} - ).then( - function(text){ - this_source_txt = text; - if (this_source_txt.includes("404 Not")) { - console.log("Editing not enabled: source unavailable") - } else { - loadResource('css', 'features'); - loadResource('css', 'edit'); - loadResource('js', 'login') - loadResource('js', 'edit'); - } - } - ); - } else { - console.log("Source file unavailable: editing not possible") - } - } - -}); - -// this is to open every knowl on a page -// (this code is not actually used anywhere) -window.addEventListener("load",function(event) { - if($('body').hasClass("braillesample")) { - var knowl_id_counterX = 0; - console.log(" found braillesample"); - var all_knowls = $('[data-knowl]'); - console.log("found", all_knowls.length, "knowls"); - console.log("which are", all_knowls); - for (var j=1; j < all_knowls.length; ++j) { - console.log(j, "un-knowling", all_knowls[j]); - console.log("attr", $(all_knowls[j]).attr("data-knowl")); - $knowl = $(all_knowls[j]); - if(!$knowl.attr("data-knowl-uid")) { - $knowl.attr("data-knowl-uid", knowl_id_counterX); - knowl_id_counterX++; - } - knowl_click_handler($knowl); - // knowl_click_handler($(all_knowls[j])) - } -}}); - -// when the anchor is a knowl, open it -window.addEventListener("load",function(event) { - if (window.location.hash.length) { - let id = window.location.hash.substring(1); - var the_anchor = document.getElementById(id); - console.log("id", id, "the_anchor", the_anchor); - if (the_anchor.tagName == "ARTICLE") { - var contained_knowl = the_anchor.querySelector("a[data-knowl]"); - if (contained_knowl && contained_knowl.parentElement == the_anchor) { - console.log("found a knowl", contained_knowl); - // knowl_click_handler($(contained_knowl)) - contained_knowl.click() - } - } else if (the_anchor.hasAttribute("data-knowl")) { - the_anchor.click() - } else { - // if it is a hidden knowl, find the knowl and open it - var this_hidden_content = the_anchor.closest(".hidden-content"); - if (this_hidden_content) { - console.log("linked to a hidden knowl with this_hidden_content", this_hidden_content); - var the_refid = this_hidden_content.id; - var this_knowl = document.querySelector('[data-refid="' + the_refid + '"]'); - this_knowl.click() - } - } - } -}); - - -// What purpose does this serve? -function urlattribute() { - var this_urlstub = window.location.hostname; - document.body.setAttribute("data-urlstub", this_urlstub); -} - - -// The new method for creating pages and adjusting workspace // - -// This is used multiple places to set height of workspace divs to their author-provided heights -function setInitialWorkspaceHeights() { - const workspaces = document.querySelectorAll('.workspace'); - workspaces.forEach(ws => { - ws.style.height = ws.getAttribute('data-space') || '0px'; - ws.setAttribute("contenteditable", "true"); - }); -} - -// If a printout (worksheet or handout) includes authored pages, we only need to put content before the first page and after the last page into the first and last pages, respectively. -function adjustPrintoutPages() { - const printout = document.querySelector('section.worksheet, section.handout'); - if (!printout) { - console.warn("No printout found, exiting adjustPrintoutPages."); - return; - } - const pages = printout.querySelectorAll('.onepage'); - if (pages.length === 0) { - console.warn("No pages found in printout, exiting adjustPrintoutPages."); - return; - } - // Find all children before the first .onepage element: - const firstPage = pages[0]; - const lastPage = pages[pages.length - 1]; - // Move all children before the first page into the first page - const pageFirstChild = firstPage.firstChild; - let currentChild = printout.firstChild; - while (currentChild && currentChild !== firstPage) { - const nextChild = currentChild.nextSibling; // Save the next sibling before removing - firstPage.insertBefore(currentChild, pageFirstChild); // Move to the first page - currentChild = nextChild; // Move to the next child - } - // Now find all children after the last .onepage element: - let nextChild = lastPage.nextSibling; - while (nextChild) { - const tempChild = nextChild; - nextChild = nextChild.nextSibling; - lastPage.appendChild(tempChild); - } - console.log("Moved all content before the first page and after the last page into the respective pages."); -} - -// This is the main function we will call then a printout does not come from the XSL with pages already defined (for now, the XSL will keep the behavior as an option). -function createPrintoutPages(margins) { - - // Assumptions: needs to work for both letter (8.5in x 11in) and a4 (210mm x 297mm) paper sizes. We will work in pixels (96/in): those are 816px x 1056px and 794px x 1122.5px respectively (1 inch = 96 px, 1 cm = 37.8 px). We assume that the printing interface of the browser will do the right thing with these. - - // For purposes of finding page breaks, we will use 794 as our width and 1056 as our height (so A4 width and letter height). Then we will rescale workspace on each page to fit the actual paper size selected. - - const conservativeContentHeight = 1056 - (margins.top + margins.bottom); // in pixels - const conservativeContentWidth = 794 - (margins.left + margins.right); // in pixels - - const printout = document.querySelector('section.worksheet, section.handout'); - if (!printout) { - console.warn("No printout found, exiting createPrintoutPages."); - return; - } - printout.style.width = toString(conservativeContentWidth + margins.left + margins.right) + 'px'; - // Set the height of each workspace based on its data-space attribute - setInitialWorkspaceHeights(printout); - - // We want to consider each "block" of the printout. Some of these will be direct children of the printout, some will be nested inside these children. So first create a list of the elements that we consider blocks. - let rows = []; - for (const child of printout.children) { - if (child.classList.contains('sidebyside')) { - // sidebyside could have tasks, but we don't want to dive further into them. - rows.push(child); - } else if (child.querySelector('.task')) { - // Keep the child as a block, but put each task after the first one as its own row: - rows.push(child); - const tasks = child.querySelectorAll('.task'); - for (let i = tasks.length-1; i > 0; i--) { - // Move the task out of the original child and place it directly after it in the printout. We do this in reverse order so when every task is moved, they return to the original order. They will then be added to the rows list as their own blocks. - printout.insertBefore(tasks[i], child.nextSibling); - } - // Skipping separate treatment of exercisegroups for now. - //} else if (child.classList.contains('exercisegroup')) { - // for (const subChild of child.children) { - // if (subChild.classList.contains('exercisegroup-exercises')){ - // for (const row of subChild.children){ - // rows.push(row); - // } - // } else { - // rows.push(child); - // } - // } - } else { - rows.push(child); - } - } - // Loop through the blocks and create a list of objects including the block, its height, and its workspace height. Only include blocks that have height (this will remove autopermalinks, as desired). - let blockList = []; - for (const row of rows) { - let blockHeight = getElementTotalHeight(row); - if (blockHeight === 0) { - console.log("Skipping row with zero height:", row); - continue; - } - let totalWorkspaceHeight = 0; - if (row.querySelector('.workspace')) { - // Workspace height is not just sum of workspace heights; we need to be careful with sidebyside and columns - totalWorkspaceHeight = getElemWorkspaceHeight(row); - } - blockList.push({elem: row, height: blockHeight, workspaceHeight: totalWorkspaceHeight}); - } - - // Now find pageBreaks so that extra workspace is as uniform as possible. - const pageBreaks = findPageBreaks(blockList, conservativeContentHeight); - - // Create page divs and insert rows into them - for (let i = 0; i < pageBreaks.length; i++) { - const pageDiv = document.createElement('section'); - pageDiv.classList.add('onepage'); - if (i === 0) { - pageDiv.classList.add('firstpage'); - } - // A single page will be both first and last - if (i === pageBreaks.length - 1) { - pageDiv.classList.add('lastpage'); - } - // The pageBreaks array gives the indices of blocks that should start a page. - // So we will want to look for go through the blocks selecting those starting with the previous index (or 0) up to but not including the current index. - const start = pageBreaks[i-1] || 0; - const end = pageBreaks[i]; - for (let j = start; j < end; j++) { - const row = blockList[j].elem; - pageDiv.appendChild(row); - } - printout.appendChild(pageDiv); - } - - // remove any old content that is not in a page - for (const child of printout.children) { - if (!child.classList.contains('onepage')) { - console.log("Removing old child not in a page:", child); - printout.removeChild(child); - } - } -} - - - // We look at each page and adjust the heights of the workspaces to fit it nicely into the page. - // The width and height of the page will now depend on the letter or a4 setting. -function adjustWorkspaceToFitPage({paperSize, margins}) { - let paperWidth, paperHeight; - if (paperSize === 'a4' || document.body.classList.contains('a4')) { - console.log("Setting page size to A4"); - paperWidth = 794; // 210mm in px - paperHeight = 1122.5; // 297mm in px 794px x 1122.5px - } else { - console.log("Setting page size to Letter"); - paperWidth = 816; // 8.5in in px - paperHeight = 1056; // 11in in px - } - const paperContentHeight = paperHeight - (margins.top + margins.bottom); - - // Reset the heights of workspace divs to their author-provided heights - setInitialWorkspaceHeights(); - - const pages = document.querySelectorAll('.onepage'); - pages.forEach(page => { - console.log("Adjusting workspace height for page:", page); - // Set width to get accurate calculations - page.style.width = paperWidth + 'px'; - const rows = page.children; - let totalContentHeight = 0; - let totalWorkspaceHeight = 0; - for (const row of rows) { - totalContentHeight += getElementTotalHeight(row); - totalWorkspaceHeight += getElemWorkspaceHeight(row); - } - if (totalWorkspaceHeight === 0) { - console.log("No workspaces on this page, skipping workspace adjustment."); - // Reset the style for the page - page.style.width = ""; - return; - } - const extraHeight = paperContentHeight - totalContentHeight; - console.log("Extra height to distribute across workspaces:", extraHeight, "px."); - // Determine the factor by which to multiply each workspace to make the total height fit the paperContentHeight - const workspaceAdjustmentFactor = (totalWorkspaceHeight + extraHeight) / totalWorkspaceHeight; - console.log("Workspace adjustment factor for page:", workspaceAdjustmentFactor); - // Now adjust each workspace in the page by this factor - const pageWorkspaces = page.querySelectorAll('.workspace'); - pageWorkspaces.forEach(ws => { - const originalHeight = ws.offsetHeight; - const newHeight = originalHeight * workspaceAdjustmentFactor; - ws.style.height = newHeight + "px"; - }); - // Reset the style for the page - page.style.width = ""; - }); - console.log("Set page sizes to content area of paper size."); -} - -// Helper functions for calculating heights and workspace sizes -function getElementTotalHeight(elem) { - // Calculate the total height of the element, including padding, border, and top margin. - const style = getComputedStyle(elem); - const marginTop = parseFloat(style.marginTop); - const marginBottom = parseFloat(style.marginBottom); - const height = elem.offsetHeight; - return height + marginTop + marginBottom; -} - -function getElemWorkspaceHeight(elem) { - // Calculate the total height of all workspaces in the element. - // This is easy for elements stacked vertically, but we must be careful for side-by-side workspaces. Since we will multiply each workspace by a factor to fit the page, taking the largest workspace height should give us an upper bound for the amount of vertical space that is workspace. - // Note that this won't work well if we need to reduce the workspace, since there we would want to take the minimum heights. - if (elem.classList.contains('sidebyside')) { - const sbspanels = elem.querySelectorAll('.sbspanel'); - let max = 0; - sbspanels.forEach(panel => { - const workspaces = panel.querySelectorAll('.workspace'); - let totalHeight = 0; - workspaces.forEach(workspace => { - const workspaceHeight = workspace.offsetHeight; - if (workspaceHeight) { - totalHeight += workspaceHeight; - } - }); - if (totalHeight > max) { - max = totalHeight; // Take the maximum height of workspaces in sidebyside - } - }); - return max; // Return the maximum height of workspaces in sidebyside - } - // We can take care of exercisegroups and single colomn regular layout together. - let columns = 1; - if (elem.classList.contains('exercisegroup')) { - // Check for column classes and set columns accordingly - for (let i = 2; i <= 6; i++) { - if (elem.querySelector(`.cols${i}`)) { - columns = i; - console.log("Found exercisegroup with columns:", columns); - break; - } - } - } - const workspaces = elem.querySelectorAll('.workspace'); - let totalHeight = 0; - workspaces.forEach(ws => { - const workspaceHeight = ws.offsetHeight; - if (workspaceHeight) { - totalHeight += workspaceHeight; - } - }); - return totalHeight / columns; // Divide by columns if sidebyside to get average height per column -} - -// Functions for finding the optimal page breaks -function findPageBreaks(rows, pageHeight) { - // An array for the page breaks. The nth element will be the index of the last row on page n. - let pageBreaks = []; - // An array for the minimum cost possible for rows i to the end. - let minCost = Array(rows.length).fill(Infinity); - minCost[rows.length] = 0; // No cost for no rows - // An array to keep track of the next row to start a new page after i in minCost. - let nextPageBreak = Array(rows.length).fill(-1); - - // Now loop through the rows in reverse order to find the optimal page breaks. - for (let i = rows.length - 1; i >= 0; i--) { - let cumulativeHeight = 0; - let cumulativeWorkspaceHeight = 0; - // Loop through the rows starting from i to find the best page break - for (let j = i; j < rows.length; j++) { - cumulativeHeight += rows[j].height; - cumulativeWorkspaceHeight += rows[j].workspaceHeight; - if (cumulativeHeight > pageHeight) { - if (j === i) { - // The page height is too big for a single row. We make this row its own page and move on. - console.log("Row", i, "exceeds page height by itself, setting as its own page."); - minCost[i] = 0; // No cost for a single row - nextPageBreak[i] = i + 1; // The next page break is after this row - break; // Move to the next row - } else { - // We have already set minCost and NextPageBreak at an earlier point in the loop. This means we have done the best we can for this row so we stop and move to the next earlier row. - break; // Stop if we exceed the page height - } - } - - const cost = (pageHeight - cumulativeHeight)**2 + minCost[j+1]; // Cost is how much space is left on the page, plus the cost of the following pages. - if (cost < minCost[i]) { - minCost[i] = cost; - nextPageBreak[i] = j+1; // Set the next page break to be after row j - } - } - } - // Backtrack to find the actual page breaks based on nextPageBreak - // Note: the nextPage = 1 is not an indexing mistake; we always assume that row 0 is a title and will go on the same page as row 1. - let nextPage = 1; - while (nextPage < rows.length) { - pageBreaks.push(nextPageBreak[nextPage]); - nextPage = nextPageBreak[nextPage]; - } - return pageBreaks; -} - -function setPageGeometryCSS({paperSize, margins}) { - // Remove any existing geometry CSS to avoid duplicates - const existingStyle = document.getElementById("page-geometry-css"); - if (existingStyle) { - existingStyle.remove(); - } - let wsWidth = paperSize === "letter" ? "816px" : "794px"; // 8.5in for Letter, 210mm for A4 - let wsHeight = paperSize === "letter" ? "1056px" : "1123px"; // 11in for Letter, 297mm for A4 - // Create a new style element for geometry CSS - const style = document.createElement("style"); - // Add an identifier to the style element to avoid conflicts - style.id = "page-geometry-css"; - // NB we need to add the fallback values for the margins in @page because some browsers do not support CSS variables in @page rules. - style.textContent = ` - :root { - --ws-width: ${wsWidth}; - --ws-height: ${wsHeight}; - --ws-top-margin: ${margins.top}px; - --ws-right-margin: ${margins.right}px; - --ws-bottom-margin: ${margins.bottom}px; - --ws-left-margin: ${margins.left}px; - } - @page { - margin: var(--ws-top-margin, ${margins.top}px) var(--ws-right-margin, ${margins.right}px) var(--ws-bottom-margin, ${margins.bottom}px) var(--ws-left-margin, ${margins.left}px); - } - `; - document.head.appendChild(style); -} - -function toggleWorkspaceHighlight(isChecked) { - if (isChecked) { - // Toggle the highlight class on the body based on the checkbox state - document.body.classList.add("highlight-workspace"); - // If we haven't already inserted divs to show the original workspace heights, do that now - if (!document.querySelector('.workspace-container')) { - console.log("adding original workspace divs"); - // Insert divs to show the original workspace - document.querySelectorAll('.workspace').forEach(workspace => { - // Create a container div to hold the workspace div and the original div - const container = document.createElement('div'); - container.classList.add('workspace-container'); - // Set the container height to the current workspace height - container.style.height = window.getComputedStyle(workspace).height; - const original = document.createElement('div'); - original.classList.add('original-workspace'); - const originalHeight = workspace.getAttribute('data-space') || '0px'; - original.setAttribute('title', 'Author-specified workspace height (' + originalHeight + ')'); - console.log("setting original workspace height for", workspace); - // Use the data-space attribute for height of original workspace - original.style.height = originalHeight; - // insert original div before the workspace content - container.appendChild(original); - // Add a warning class if the original height is greater than the current height - if (original.offsetHeight > workspace.offsetHeight) { - original.classList.add('warning'); - } - // Move the workspace into the container - workspace.parentNode.insertBefore(container, workspace); - container.appendChild(workspace); - }); - } - } else { - document.body.classList.remove("highlight-workspace"); - } -} - -// Printout print preview and page setup -window.addEventListener("load",function(event) { - // We condition on the existence of the papersize radio buttons, which only appear in the printout print preview. - if (document.querySelector('input[name="papersize"]')) { - // First, get the margins for pages to be passed around as needed. - const marginList = document.querySelector('section.worksheet, section.handout').getAttribute('data-margins').split(' '); - // Convert margin values to pixels if they are not already numbers - function toPixels(value) { - if (typeof value === "number") return value; - if (typeof value !== "string") return 0; - value = value.trim(); - if (value.endsWith("px")) { - return parseFloat(value); - } else if (value.endsWith("in")) { - return Math.floor(parseFloat(value) * 96); - } else if (value.endsWith("cm")) { - return Math.floor(parseFloat(value) * 37.8); - } else if (value.endsWith("mm")) { - return Math.floor(parseFloat(value) * 3.78); - } else if (value.endsWith("pt")) { - return Math.floor(parseFloat(value) * (96 / 72)); - } else { - // fallback: try to parse as px - return parseFloat(value) || 0; - } - } - const margins = { - top: toPixels(marginList[0] || "0.75in"), // Default to 0.75in if not specified - right: toPixels(marginList[1] || "0.75in"), - bottom: toPixels(marginList[2] || "0.75in"), - left: toPixels(marginList[3] || "0.75in") - } - // Get the papersize from localStorage or set it based on user's geographic region - let paperSize = localStorage.getItem("papersize"); - if (paperSize) { - const radio = document.querySelector(`input[name="papersize"][value="${paperSize}"]`); - if (radio) { - radio.checked = true; - } - // Set the papersize class on body - document.body.classList.remove("a4", "letter"); - document.body.classList.add(paperSize); - setPageGeometryCSS({paperSize: paperSize, margins: margins}); - } else { - // Try to set papersize based on user's geographic region - // Default to 'letter' for North and South America, 'a4' elsewhere - try { - fetch('https://ipapi.co/json/') - .then(response => response.json()) - .then(data => { - let continent = data && data.continent_code ? data.continent_code : ""; - paperSize = (continent === "NA" || continent === "SA") ? "letter" : "a4"; - const radio = document.querySelector(`input[name="papersize"][value="${paperSize}"]`); - if (radio) { - radio.checked = true; - localStorage.setItem("papersize", paperSize); - } - document.body.classList.remove("a4", "letter"); - document.body.classList.add(paperSize); - console.log("Setting papersize to", paperSize); - }) - .catch((err) => { - // rethrow to be caught by the outer catch - throw err; - }); - } catch (e) { - // fallback: default to letter - const radio = document.querySelector(`input[name="papersize"][value="letter"]`); - if (radio) radio.checked = true; - } - //NB: the default papersize is set to 'letter' in the body class list. - } - const papersizeRadios = document.querySelectorAll('input[name="papersize"]'); - papersizeRadios.forEach(radio => { - radio.addEventListener('change', function() { - if (this.checked) { - document.body.classList.remove("a4", "letter"); - document.body.classList.add(this.value); - localStorage.setItem("papersize", this.value); - console.log("Setting papersize to", this.value); - - // If the "highlight workspace" checkbox was already checked, then we should restart the process by reloading the page. Specifically, we run into issues when there are .workspace-container divs already present. - if (document.querySelector(".workspace-container")) { - console.log("Reloading page to apply new papersize with workspace highlight enabled."); - window.location.reload(); - return; - } else { - // Otherwise, we can just adjust the workspace heights to fit the new paper size. - console.log("Adjusting workspace heights to fit new papersize."); - adjustWorkspaceToFitPage({paperSize: this.value, margins: margins}); - setPageGeometryCSS({paperSize: this.value, margins: margins}); - } - } - }); - }); - - // Open all details elements (knowls) on the page - var born_hidden_knowls = document.querySelectorAll('details'); - console.log("born_hidden_knowls", born_hidden_knowls); - born_hidden_knowls.forEach(function(detail) { - detail.open = true; - }); - // If the printout has authored pages, there will be at least one .onepage element. - if (document.querySelector('.onepage')) { - adjustPrintoutPages(); - /* not the right way: need to figure out what this needs to wait for */ - //window.setTimeout(adjustPrintoutPages, 1000); - } else { - createPrintoutPages(margins); - } - // After pages are set up, we adjust the workspace heights to fit the page (based on the paper size). - adjustWorkspaceToFitPage({paperSize: paperSize, margins: margins}); - - console.log("finished adjusting workspace"); - - - // Get the 'highlight workspace' checkbox state from localStorage or set it to false by default - const highlightWorkspaceCheckbox = document.getElementById("highlight-workspace-checkbox"); - if (highlightWorkspaceCheckbox) { - highlightWorkspaceCheckbox.checked = localStorage.getItem("highlightWorkspace") === "true"; - highlightWorkspaceCheckbox.addEventListener("change", function() { - localStorage.setItem("highlightWorkspace", this.checked); - toggleWorkspaceHighlight(this.checked); - }); - // Initial toggle to apply the highlight class if checked - toggleWorkspaceHighlight(highlightWorkspaceCheckbox.checked); - } - - - - // Not sure why this is here: - window.setTimeout(urlattribute, 1500); - } -}); - - - -//----------------------------------------------------------------- -// Dark/Light mode swiching - -function isDarkMode() { - if (document.documentElement.dataset.darkmode === 'disabled') - return false; - - const currentTheme = localStorage.getItem("theme"); - if (currentTheme === "dark") - return true; - else if (currentTheme === "light") - return false; - - return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; -} - -function setDarkMode(isDark) { - if(document.documentElement.dataset.darkmode === 'disabled') - return; - - const parentHtml = document.documentElement; - const iframes = document.querySelectorAll("iframe[data-dark-mode-enabled]"); - - // Update the parent document - if (isDark) { - parentHtml.classList.add("dark-mode"); - } else { - parentHtml.classList.remove("dark-mode"); - } - - // Sync each iframe's class with the parent - for (const iframe of iframes) { - try { - const iframeHtml = iframe.contentWindow.document.documentElement; - if (isDark) { - iframeHtml.classList.add("dark-mode") - } else { - iframeHtml.classList.remove("dark-mode") - } - } catch (err) { - console.warn("Dark mode sync to iframe failed:", err); - } - } - - const modeButton = document.getElementById("light-dark-button"); - if (modeButton) { - modeButton.querySelector('.icon').innerText = isDark ? "light_mode" : "dark_mode"; - modeButton.querySelector('.name').innerText = isDark ? "Light Mode" : "Dark Mode"; - } -} - -// Run this as soon as possible to avoid flicker -setDarkMode(isDarkMode()); - -// Rest of dark mode setup logic waits until after load -window.addEventListener("DOMContentLoaded", function(event) { - // Rerun setDarkMode now that it can update buttons - const isDark = isDarkMode(); - setDarkMode(isDark); - - const modeButton = document.getElementById("light-dark-button"); - modeButton.addEventListener("click", function() { - const wasDark = isDarkMode(); - setDarkMode(!wasDark); - localStorage.setItem("theme", wasDark ? "light" : "dark"); - }); -}); - -// Share button and embed in LMS code -window.addEventListener("DOMContentLoaded", function(event) { - const shareButton = document.getElementById("embed-button"); - if (shareButton) { - const sharePopup = document.getElementById("embed-popup"); - const embedCode = ""; - const embedTextbox = document.getElementById("embed-code-textbox"); - if (embedTextbox) { - embedTextbox.value = embedCode; - } - shareButton.addEventListener("click", function() { - sharePopup.classList.toggle("hidden"); - }); - const copyButton = document.getElementById("copy-embed-button"); - if (copyButton) { - copyButton.addEventListener("click", function() { - const embedTextbox = document.getElementById("embed-code-textbox"); - if (embedTextbox) { - navigator.clipboard.writeText(embedCode).then(() => { - console.log("Embed code copied to clipboard!"); - }).catch(err => { - console.error("Failed to copy embed code: ", err); - }); - //copyButton.innerHTML = "✓✓"; - // show confirmation for 2 seconds: - copyButton.querySelector('.icon').innerText = "library_add_check"; - setTimeout(function() { - copyButton.querySelector('.icon').innerText = "content_copy"; - sharePopup.classList.add("hidden"); - }, 450); - } - }); - } - } -}); - -// Hide everything except the content when the URL has "embed" in it -window.addEventListener("DOMContentLoaded", function(event) { - const urlParams = new URLSearchParams(window.location.search); - if (urlParams.has("embed")) { - // Set dark mode based on value of param - if (urlParams.get("embed") === "dark") { - setDarkMode(true); - } else { - setDarkMode(false); - } - const elemsToHide = [ - "ptx-navbar", - "ptx-masthead", - "ptx-page-footer", - "ptx-sidebar", - "ptx-content-footer" - ]; - for (let id of elemsToHide) { - const elem = document.getElementById(id); - if (elem) { - elem.classList.add("hidden"); - } - } - } -}); - -// START Support for code-copy button functionality -document.addEventListener("click", (ev) => { - const codeBox = ev.target.closest(".clipboardable"); - if (!navigator.clipboard || !codeBox) return; - const button = ev.target.closest(".code-copy"); - const preContent = codeBox.querySelector("pre").textContent; - navigator.clipboard.writeText(preContent); - button.classList.toggle("copied") - setTimeout(() => button.classList.toggle("copied"), 1000); -}); - -document.addEventListener("DOMContentLoaded", () => { - const elements = document.querySelectorAll(".clipboardable"); - for (el of elements) { - const div = document.createElement("div"); - div.classList.add("clipboardable"); - el.classList.remove("clipboardable"); - el.replaceWith(div); - div.insertAdjacentElement("afterbegin", el); - div.insertAdjacentHTML("beforeend", ` - - `.trim()); - } -}); -// END Support for code-copy button functionality diff --git a/slides/_static/pretext/js/pretext_search.js b/slides/_static/pretext/js/pretext_search.js deleted file mode 100755 index e78d765..0000000 --- a/slides/_static/pretext/js/pretext_search.js +++ /dev/null @@ -1,315 +0,0 @@ - -// next comment is out of date: there are more search options -// from lunr-pretext-search-index.js we will have either -// var ptx_lunr_search_style = "default"; -// or -// var ptx_lunr_search_style = "reference"; - -// since there is only one search box now, this can be simplified -function doSearch(searchlocation="A") { - // Get the search terms from the input text box - var terms; - if(searchlocation == "A") { - terms = document.getElementById("ptxsearch").value; - } else { - terms = document.getElementById("ptxsearchB").value; - } - - localStorage.setItem('last-search-terms', JSON.stringify({terms: terms, time: Date.now()})); - - // Where do we want to put the results? - let resultArea = document.getElementById("searchresults") - resultArea.innerHTML = ""; // clear out any previous results - // assume AND for multiple words - var searchterms = terms; - if(searchlocation == "B") { - document.getElementById("ptxsearch").value = searchterms - console.log("ptxsearch value", document.getElementById("ptxsearch").value); - } else { - searchterms = terms; - } - - searchterms = searchterms.toLowerCase().trim(); - let pageResult = []; - if(searchterms != "") { - pageResult = ptx_lunr_idx.query((q) => { - for(let term of searchterms.split(' ')) { - q.term(term, { fields: ["title"], boost: 20 }); //exact title match with 20x weight - q.term(term, { wildcard: lunr.Query.wildcard.TRAILING, fields: ["title"], boost: 10 }); //inexact title 10x weight - q.term(term, { fields: ["body"], boost: 5 }); //exact body 5x weight - q.term(term, { wildcard: lunr.Query.wildcard.TRAILING, fields: ["body"] }); //inexact body - } - }); - } - // Number the documents from first to last so we can order the results by their - // position in the book. - snum = 0; - for (let doc of ptx_lunr_docs) { - doc.snum = snum; - snum += 1; - } - - //Limit to a sane number of results - otherwise search like 'e' matches every page - const MAX_RESULTS = 100; - let numUnshown = (pageResult.length > MAX_RESULTS) ? pageResult.length - MAX_RESULTS : 0; - pageResult.slice(0, MAX_RESULTS); - - // Transfer meta data from the document to the results to make it easy to add - // our lists later. - augmentResults(pageResult, ptx_lunr_docs); - pageResult.sort(comparePosition); - addResultToPage(terms, pageResult, ptx_lunr_docs, numUnshown, resultArea); - MathJax.typeset(); -} - -// Find the entry for a search result in the original document index -function findEntry(resultId, db) { - for (const page of db) { - if (page.id === resultId) { - return page; - } - } - return resultId; -} - -function augmentResults(result, docs) { - for (let res of result) { - let info = findEntry(res.ref, docs); - res.number = info.number; - res.type = info.type; - res.title = info.title; - res.url = info.url; - res.level = info.level; - res.snum = info.snum; - res.score = parseFloat(res.score); - - //extra score multiplier based on level - prioritize sections over subsections/exercises/etc... - const LEVEL_WEIGHTS = [3, 2, 1.5] - if( res.level < 2 ) - res.score *= LEVEL_WEIGHTS[res.level]; - - res.body = ''; - //Add body snippets and highlights - const REVEAL_WINDOW = 30; - let titleMarked = false; - for (const hit in res.matchData.metadata) { - if(res.matchData.metadata[hit].title) { - //only show one match in title as locations change after first markup - if(!titleMarked) { - if(!res.matchData.metadata[hit].title.position) - continue; - let positionData = res.matchData.metadata[hit].title.position[0]; - const startClipInd = positionData[0]; - const endClipInd = positionData[0] + positionData[1]; - res.title = res.title.substring(0, endClipInd) + '' + res.title.substring(endClipInd); - res.title = res.title.substring(0, startClipInd) + '' + res.title.substring(startClipInd); - titleMarked = true; - } - } else if (res.matchData.metadata[hit].body) { - if(!res.matchData.metadata[hit].body.position) - continue; - const bodyContent = info.body; - let positionData = res.matchData.metadata[hit].body.position[0]; - const startInd = positionData[0] - REVEAL_WINDOW; - const endInd = positionData[0] + positionData[1] + REVEAL_WINDOW; - const startClipInd = positionData[0]; - const endClipInd = positionData[0] + positionData[1]; - let resultSnippet = (startInd > 0 ? '...' : '' ) + bodyContent.substring(startInd, startClipInd); - resultSnippet += '' + bodyContent.substring(startClipInd, endClipInd) + ''; - resultSnippet += bodyContent.substring(endClipInd, endInd) + (endInd < bodyContent.length ? '...' : '' ) + '
    '; - res.body += resultSnippet; - } - } - } -} - -function rearrangedArray(arry) { - // return a new array which is arry (with depth) sorted according to meas, - // again as an array with depth. - // "with depth'' means that large children drag along their parents. - let newarry = []; - let startind = 0; - let numtograb = 0; -let ct = 1; - while (arry.length > 0 && ct < 500) { -++ct; // just in case something goes wrong - const locofmax = maxLocation(arry) - let segmentstart = locofmax; - let segmentlength = 1; - while (arry[segmentstart].level == "2") { - --segmentstart - } - while (segmentstart + segmentlength < arry.length && arry[segmentstart + segmentlength].level == "2") { - ++segmentlength - } -// console.log("locofmax", locofmax, "starting", segmentstart, "going", segmentlength, "from", arry.length); - newarry.push(...arry.splice(segmentstart,segmentlength)); - } -// console.log("newarry", newarry); - return newarry -} -function maxLocation(arry) { - let maxloc = 0; - let maxvalsofar = -1; - for (let index = 0; index < arry.length; ++index) { - if (arry[index].score > maxvalsofar) { - maxloc = index; - maxvalsofar = arry[index].score - } - } - return maxloc -} - -function comparePosition(a, b) { - if (a.snum < b.snum) { - return -1; - } - if (a.snum > b.snum) { - return 1; - } - return 0; -} -function compareScoreDesc(a, b) { - if (a.score < b.score) { - return 1; - } - if (a.score > b.score) { - return -1; - } - return 0; -} - -function addResultToPage(searchterms, result, docs, numUnshown, resultArea) { - /* backward compatibility for old html */ - if (document.getElementById("searchempty")) { - document.getElementById("searchempty").style.display = "none"; - } - let len = result.length; - console.log("first result", result[0]); - if (len == 0) { - if (document.getElementById("searchempty")) { - document.getElementById("searchempty").style.display = "block"; - } else { - let noresults = document.createElement("div"); - noresults.classList.add("noresults"); - search_no_results_string = "No results were found" - noresults.innerHTML = search_no_results_string + "."; - // console.log("the new variable", search_results_heading_string); - resultArea.appendChild(noresults); - } - document.getElementById("searchresultsplaceholder").style.display = null; - return - } -// console.log("result",result); - let allScores = result.map(function (r) { return r.score }); -// console.log(typeof allScores[0], "allScores",allScores); - allScores.sort((a,b) => (a - b)); - allScores.reverse(); -// console.log("allScores, sorted",allScores); - -// let high = result[Math.floor(len*0.25)].score; -// let med = result[Math.floor(len*0.5)].score; -// let low = result[Math.floor(len*0.75)].score; - // sort the results by their position in the book, not their score - let high = allScores[Math.floor(len*0.20)]; - let med = allScores[Math.floor(len*0.40)]; - let low = allScores[Math.floor(len*0.75)]; - if (ptx_lunr_search_style == "reference") { - result = rearrangedArray(result); - } - let indent = "1"; - let currIndent = indent; - let origResult = resultArea; - // Create list entries indenting as needed. - for (const res of result) { - let link = document.createElement("a") - // add a class so we can colorize the results based on their rank in terms - // of search score. - if (res.score >= high) { - link.classList.add("high_result") - } else if (res.score >= med) { - link.classList.add("medium_result") - } else if (res.score >= low) { - link.classList.add("low_result") - } else { - link.classList.add("no_result") - } - currIndent = res.level; - if (currIndent > indent) { - indent = currIndent; - let ilist = document.createElement("ul") - ilist.classList.add("detailed_result"); - resultArea.appendChild(ilist); - resultArea = ilist; - } else if (currIndent < indent) { - resultArea = origResult; - indent = currIndent; - } - link.href = `${res.url}`; - link.innerHTML = `${res.type} ${res.number} ${res.title}`; - let clip = document.createElement("div"); - clip.classList.add("search-result-clip"); - clip.innerHTML = `${res.body}`; - let bullet = document.createElement("li"); - bullet.classList.add('search-result-bullet'); - bullet.appendChild(link); - bullet.appendChild(clip); - let p = document.createElement("text"); - p.classList.add('search-result-score'); - p.innerHTML = ` (${res.score.toFixed(2)})`; - bullet.appendChild(p); - resultArea.appendChild(bullet); - } - - // Auto-close search results when a result is clicked in case result is on - // the same page search started from - const resultsDiv = document.getElementById('searchresultsplaceholder'); - const backDiv = document.querySelector('.searchresultsbackground'); - resultArea.querySelectorAll("a").forEach((link) => { - link.addEventListener('click', (e) => { - backDiv.style.display = 'none'; - resultsDiv.style.display = 'none'; - }); - }); - //Could print message about how many results are not shown. No way to localize it though... - // if(numUnshown > 0) { - // let bullet = document.createElement("li"); - // bullet.classList.add('search-results-bullet'); - // bullet.classList.add('search-results-unshown-count'); - // let p = document.createElement("text"); - // p.innerHTML = `${parseInt(numUnshown)} unshown results...`; - // bullet.appendChild(p); - // resultArea.appendChild(bullet); - // } - document.getElementById("searchresultsplaceholder").style.display = null; - MathJax.typesetPromise(); -} - -window.addEventListener("load", function (event) { - const resultsDiv = document.getElementById('searchresultsplaceholder'); - - //insert a div to be backgroud behind searchresultsplaceholder - const backDiv = document.createElement("div"); - backDiv.classList.add("searchresultsbackground"); - backDiv.style.display = 'none'; - resultsDiv.parentNode.appendChild(backDiv); - - document.getElementById("searchbutton").addEventListener('click', (e) => { - resultsDiv.style.display = null; - backDiv.style.display = null; - let searchInput = document.getElementById("ptxsearch"); - searchInput.value = JSON.parse(localStorage.getItem("last-search-terms")).terms; - searchInput.select(); - doSearch(); - }); - - document.getElementById("ptxsearch").addEventListener('input', (e) => { - doSearch(); - }); - - document.getElementById("closesearchresults").addEventListener('click', (e) => { - resultsDiv.style.display = 'none'; - backDiv.style.display = 'none'; - document.getElementById('searchbutton').focus(); - }); -}); diff --git a/slides/_static/pretext/js/ptx_search.js b/slides/_static/pretext/js/ptx_search.js deleted file mode 100755 index f35bea2..0000000 --- a/slides/_static/pretext/js/ptx_search.js +++ /dev/null @@ -1,112 +0,0 @@ -function doSearch() { - // Get the search terms from the input text box - let terms = document.getElementById("ptxsearch").value; - // Where do we want to put the results? - let resultArea = document.getElementById("searchresults") - resultArea.innerHTML = ""; // clear out any previous results - // do the search using the provided index - let pageResult = ptx_lunr_idx.search(terms); - // Number the documents from first to last so we can order the results by their - // position in the book. - snum = 0; - for (let doc of ptx_lunr_docs) { - doc.snum = snum; - snum += 1; - } - // Transfer meta data from the document to the results to make it easy to add - // our lists later. - augmentResults(pageResult, ptx_lunr_docs); - addResultToPage(pageResult, ptx_lunr_docs, resultArea); - MathJax.typeset(); -} - -// Find the entry for a search result in the original document index -function findEntry(resultId, db) { - for (const page of db) { - if (page.id === resultId) { - return page; - } - } - return resultId; -} - -function augmentResults(result, docs) { - for (let res of result) { - let info = findEntry(res.ref, docs); - res.number = info.number; - res.type = info.type; - res.title = info.title; - res.url = info.url; - res.level = info.level; - res.snum = info.snum; - } -} - - -function comparePosition(a, b) { - if (a.snum < b.snum) { - return -1; - } - if (a.snum > b.snum) { - return 1; - } - return 0; -} - -function addResultToPage(result, docs, resultArea) { - let len = result.length - let high = result[Math.floor(len*0.25)].score; - let med = result[Math.floor(len*0.5)].score; - let low = result[Math.floor(len*0.75)].score; - // sort the results by their position in the book, not their score - result = result.sort(comparePosition) - let indent = "1"; - let currIndent = indent; - let origResult = resultArea; - // Create list entries indenting as needed. - for (const res of result) { - let link = document.createElement("a") - // add a class so we can colorize the results based on their rank in terms - // of search score. - if (res.score >= high) { - link.classList.add("high_result") - } else if (res.score >= med) { - link.classList.add("medium_result") - } else if (res.score >= low) { - link.classList.add("low_result") - } - currIndent = res.level; - if (currIndent > indent) { - indent = currIndent; - let ilist = document.createElement("ul") - ilist.classList.add("detailed_result"); - resultArea.appendChild(ilist); - resultArea = ilist; - } else if (currIndent < indent) { - resultArea = origResult; - indent = currIndent; - } - let bullet = document.createElement("li") - bullet.style.marginTop = "5px"; - link.href = `${res.url}`; - link.innerHTML = `${res.type} ${res.number} ${res.title}`; - bullet.appendChild(link) - let p = document.createElement("text"); - p.innerHTML = ` (${res.score.toFixed(2)})`; - bullet.appendChild(p); - resultArea.appendChild(bullet); - } - -} - - -function showHelp() { - let state = document.getElementById("helpme").style.display; - if (state == "none") { - document.getElementById("helpme").style.display = "block"; - document.getElementById("helpbutt").innerHTML = "Hide Help" - } else { - document.getElementById("helpme").style.display = "none"; - document.getElementById("helpbutt").innerHTML = "Show Help" - } -} diff --git a/slides/_static/pretext/js/user_preferences.js b/slides/_static/pretext/js/user_preferences.js deleted file mode 100755 index b5a63c6..0000000 --- a/slides/_static/pretext/js/user_preferences.js +++ /dev/null @@ -1,510 +0,0 @@ - -editorLog = console.log; -// editorLog = function(){}; -debugLog = function(){}; -// debugLog = console.log; -//parseLog = function(){}; -parseLog = console.log; -errorLog = console.log; - -/* the structure of each object, and its realization as PreTeXt source or in HTML, - is recorded in the objectStructure dictionary. - -{"xml:id": new_id, "sourcetag": new_tag, "parent": parent_description, "title": ""} - -In pretext, pieces are of the form ["piecename", "tag"], while -in source, pieces are of the form ["piecename", "required_component"], while - -*/ - -editing_mode = 0; - -current_page = location.host+location.pathname; -debugLog("current_page", current_page); -chosen_edit_option_key = "edit_option".concat(current_page); -/* -chosen_edit_option = readCookie(chosen_edit_option_key) || ""; -editing_mode = chosen_edit_option; -*/ -chosen_edit_option = "PLACEHOLDER"; -debugLog("chosen_edit_option", chosen_edit_option, "chosen_edit_option", chosen_edit_option > 0); - -var font_families = { - 'RS': "'Roboto Serif', serif;", - 'OS': "'Open Sans', sans-serif;" -} - -var font_vals = { - // 'face': 'serif', - 'size': [12, 8, 20], - 'height': [135, 80, 200], - 'wspace': [0, -10,20], - 'lspace': [0, -20,20], - 'wdth': [100, 50, 150], - 'wght': [400, 100, 1000] -} - -function fontcss(fvals) { -console.log("in fontcss",fvals); - var csskeys = Object.keys(fvals); - var this_style = ""; - for (var j=0; j < csskeys.length; ++j) { - this_key = csskeys[j]; - document.getElementById("the" + this_key).innerHTML = fvals[this_key][0]; - -console.log("in fontcss", this_key, "with value", fvals[this_key][0], "/10", fvals[this_key][0]/10.0); - if (this_key == 'size') { - this_style += "font-size: " + fvals[this_key][0].toString() + "pt; " - } else if (this_key == 'height') { - this_style += "line-height: " + (fvals[this_key][0]/100.0).toString() + "; " - } else if (this_key == 'lspace') { - this_style += "letter-spacing: " + (fvals[this_key][0]/200.0).toString() + "rem; " - } else if (this_key == 'wspace') { - this_style += "word-spacing: " + (fvals[this_key][0]/50.0).toString() + "rem; " - } - } - - this_style += "font-variation-settings: "; - for (var j=0; j < csskeys.length; ++j) { - this_key = csskeys[j]; - - if (this_key == 'wdth') { - this_style += "'wdth' " + fvals[this_key][0].toString() + "," - } else if (this_key == 'wght') { - this_style += "'wght' " + fvals[this_key][0].toString() + "," - } - } - this_style = this_style.slice(0, -1); - this_style += ";"; - -console.log("returning this_style", this_style); - return this_style -} - -function choice_options(this_choice) { - console.log("choice_options of", this_choice); - val_dict = prefs_menu_vals[this_choice]; - console.log("val_dict", val_dict); - var these_keys = Object.keys(val_dict); - these_keys.sort(); - var these_choices = ""; - for (var j=0; j < these_keys.length; ++j) { - this_key = these_keys[j]; - these_choices += '
  • '; - these_choices += val_dict[this_key]; - these_choices += '
  • '; - } - return these_choices -} - - -// we have to keep track of multiple consecutive carriage returns -this_char = ""; -prev_char = ""; -prev_prev_char = ""; - -// sometimes we have to prevent Tab from changing focus -this_focused_element = ""; -prev_focused_element = ""; -prev_prev_focused_element = ""; - -var menu_neutral_background = "#ddb"; -var menu_active_background = "#fdd"; - -var recent_editing_actions = []; // we unshift to this, so most recent edit is first. - // currently just a human-readable list -var ongoing_editing_actions = []; -var old_content = {}; // to hold old versions of changed materials - -// what will happen with internationalization? -var keyletters = ["KeyA", "KeyB", "KeyC", "KeyD", "KeyE", "KeyF", "KeyG", "KeyH", "KeyI", "KeyJ", "KeyK", "KeyL", "KeyM", "KeyN", "KeyO", "KeyP", "KeyQ", "KeyR", "KeyS", "KeyT", "KeyU", "KeyV", "KeyW", "KeyX", "KeyY", "KeyZ"]; - -var movement_location_options = []; -var movement_location = 0; -var first_move = true; // used when starting to move, because object no longer occupies its original location - -Storage.prototype.setObject = function(key, value) { -// this.setItem(key, JSON.stringify(value)); - this.setItem(key, JSON.stringify(value, function(key, val) { -// console.log("key", key, "value", value, "val", val); - return val.toFixed ? Number(val.toFixed(3)) : val; -})); -} - -Storage.prototype.getObject = function(key) { - var value = this.getItem(key); - return value && JSON.parse(value); -} - -function randomstring(len) { - if (!len) { len = 10 } - return "tMP" + (Math.random() + 1).toString(36).substring(2,len) -} - -function removeItemFromList(lis, value) { - var index = lis.indexOf(value); - if (index > -1) { - lis.splice(index, 1); - } - return lis; -} - - -function textNodesUnder(node){ - var all = []; - for (node=node.firstChild;node;node=node.nextSibling){ - if (node.nodeType==3) { all.push([3, node]) } - else if (node.nodeType==1) { - all.push([1, node]) - var thistag = node.cloneNode().outerHTML; - console.log("thistag", thistag); - [thisopen, thisclose] = thistag.split("><"); - thisopen += ">"; thisclose += "<"; - thisinsides = textNodesUnder(node.cloneNode().innerHTML); -// all.push([0, thisopen]); - for (var j=0; j < thisinsides.length; ++j) { -// all.push(thisinsides[j]) - } -// all.push([0, thisclose]); - } -// probably we only want direct children -// else all = all.concat(textNodesUnder(node)); - } - return all; -} - -function wordsAllWrapped(node) { - var these_text_nodes = textNodesUnder(node); - console.log("node", node); - console.log("these_text_nodes", these_text_nodes); - for (var j=0; j < these_text_nodes.length; ++j) { - var this_text_node = these_text_nodes[j]; - var thistype = this_text_node[0]; - var thisnode = this_text_node[1]; - if (thistype == 3) { - // var these_node_words_and_spaces = these_text_nodes[j].nodeValue.split(/(\s+)/); - var these_node_words_and_spaces = thisnode.nodeValue.split(/(\s+)/); - console.log("these_node_words_and_spaces", these_node_words_and_spaces); - var spanned_words = ""; - for (var k=0; k < these_node_words_and_spaces.length; ++k) { - spanned_words += '' + these_node_words_and_spaces[k] + "" - } - var wass_text = document.createElement('div'); - wass_text.setAttribute('class', 'wastext'); - wass_text.innerHTML = spanned_words; - // these_text_nodes[j].nodeValue = spanned_words - thisnode.replaceWith(wass_text); - wass_text.outerHTML = wass_text.innerHTML - } else if (thistype == 1) { - // // leave it there, but make sure we know about it - // thisnode.classList.add("oneelement") - if (thisnode.classList.contains("process-math") || - thisnode.classList.contains("autopermalink") || - thisnode.classList.contains("latex-logo") || - thisnode.classList.contains("heading") || - // should we instead check for tags that *can* contain line breaks? - ["A", "CODE", "PRE"].includes(thisnode.tagName)) { - //wrap it in a span.oneword - var word_wrapper = document.createElement('span'); - word_wrapper.setAttribute('class', 'oneword'); - thisnode.parentNode.insertBefore(word_wrapper, thisnode); - word_wrapper.appendChild(thisnode); - } else { - wordsAllWrapped(thisnode) - } - } - } -} - -function linesAllWrapped() { - - // var testID = "p-446"; - // var testNode = document.getElementById(testID); - // var all_para = document.querySelectorAll(".para"); - // var all_para = document.querySelectorAll("SECTION P"); - var all_para = document.querySelectorAll("SECTION .para:not(.logical)"); - for (var pj = 0; pj < all_para.length; ++pj) { - testNode = all_para[pj]; - wordsAllWrapped(testNode); - console.log(" wordsAllWrapped", pj, "of", testNode); - - var these_words = document.querySelectorAll(".oneword, .oneelement"); - var this_line = []; - var all_lines = ""; - var current_height = these_words[0].getBoundingClientRect().bottom; - var word_depth = 0; - for (var j=0; j < these_words.length; ++j) { - // next line is an error if the paragraphs starts with an element - var this_word = these_words[j]; - var this_parent = this_word.parentElement; - if (this_word.classList.contains("oneword")) { - this_height = this_word.getBoundingClientRect().bottom; - if ( (Math.abs(this_height - current_height) < 10) && j > 0) { - if (this_parent == testNode && word_depth == 0) { - this_line.push(this_word.innerHTML) - } else { -console.log(word_depth, ":",this_parent == testNode, "this_parent", this_parent.tagName, "ccc", this_parent.ClassList, "xxx", this_word.innerHTML); - if (word_depth == 0) { -console.log("opening the tag", this_parent.tagName,"parent", this_parent,"of",this_word.innerHTML); - var parent_classlist = this_parent.classList; -console.log("parent_classlist", parent_classlist, "first", parent_classlist[0], "length", parent_classlist.length); - // did not work. why? var parent_classes = parent_classlist.join(" "); - this_line.push('<' + this_parent.tagName + ' class="' + parent_classlist[0] + '">'); - this_line.push(this_word.innerHTML); - word_depth += 1 - - } else { - this_line.push(this_word.innerHTML); - } - if (this_word.nextElementSibling == null) { -console.log("closing the tag", this_parent.tagName); - // need to close the wrapping element - this_line.push(""); - word_depth -= 1; - if (word_depth > 0 && this_word.parentElement.nextElementSibling == null) { - this_line.push(""); - word_depth -= 1; - } - } - } - } else { - html_line_contents = ""; - for (var k=0; k < this_line.length; ++k) { - html_line_contents += this_line[k] - } - // hack which only handles up to depth 2 - if (word_depth > 0) { - html_line_contents += "" - } - if (word_depth > 1) { - html_line_contents += "" - } - console.log("made", html_line_contents); - all_lines += '
    ' + html_line_contents + '
    '; - current_height = this_height; - this_line = [this_word.innerHTML]; - if (word_depth > 0) { - this_line.unshift('<' + this_parent.tagName + ' class="' + this_parent.classList[0] + '">') - } - if (word_depth > 1) { - this_line.unshift('<' + this_parent.tagName + ' class="' + this_parent.parentElement.classList[0] + '">') - } - } - } else { // we have an html node - this_line.push(this_word.outerHTML) - } - } - // partial last line may be dangling - // bug: need to fix closing tags at the end? maybe rely on automatic closure - if (this_line.length > 0) { - html_line_contents = ""; - for (var k=0; k < this_line.length; ++k) { - html_line_contents += this_line[k] - } - all_lines += '
    ' + html_line_contents + '
    ' - } - testNode.innerHTML = all_lines - } -} - -editorLog("adding tab listener"); - -document.addEventListener('keydown', logKeyDown); - -function nextsibligntabbable(startingplace, where) { - var candidate = startingplace.nextElementSibling; - if (where == "previous" ) { candidate = startingplace.previousElementSibling } - - while (candidate) { -console.log("candidate A", candidate); - if (candidate.hasAttribute("tabindex")) { return candidate } -console.log("candidate B", candidate); - if (where == "next" ) { candidate = candidate.nextElementSibling } - else { candidate = candidate.previousElementSibling } - } -} - -function logKeyDown(e) { - if (e.code == "ShiftLeft" || e.code == "ShiftRight" || e.code == "Shift") { return } - prev_prev_char = prev_char; - prev_char = this_char; - this_char = e; - debugLog("logKey",e,"XXX",e.code); - - var input_region = document.activeElement; - debugLog("input_region", input_region); - - if (input_region.id == "user-preferences-button") { - if (e.code == "Enter") { - document.getElementById("preferences_menu_holder").classList.toggle("hidden") - } else if (e.code == "Tab") { -console.log("tabbing to main pref menu", document.getElementById("preferences_menu_holder").firstElementChild); -console.log("tabbing to main pref menu", document.getElementById("preferences_menu_holder").firstElementChild.firstElementChild); - e.preventDefault(); - document.getElementById("preferences_menu_holder").firstElementChild.firstElementChild.focus() - } - } else if (input_region.hasAttribute("data-env")) { - var this_submenu = input_region.getElementsByTagName("ol")[0]; -console.log("this_submenu C", this_submenu); - if ((e.code == "Enter") || (e.code == "ArrowRight")) { -console.log("selecting",input_region, "which has", input_region.getElementsByTagName("ol"), "first",input_region.getElementsByTagName("ol")[0]); - this_submenu.classList.toggle("hidden") - input_region.classList.toggle("selected") - input_region.parentElement.classList.toggle("active") - } else if (e.code == "Tab" && e.shiftKey) { - e.preventDefault(); - if (input_region.classList.contains("selected")) { - this_submenu.classList.loggle("hidden"); - input_region.classList.loggle("selected"); - } else { // cycle up through the elements - // previous_sibling = input_region.previousElementSibling; - previous_sibling = nextsibligntabbable(input_region, "previous"); - if (previous_sibling) { previous_sibling.focus() } - else { - document.getElementById("preferences_menu_holder").classList.toggle("hidden"); - document.getElementById("user-preferences-button").focus(); - } - } - } else if (e.code == "Tab") { - e.preventDefault(); - if (input_region.classList.contains("selected")) { - var firstchild = this_submenu.firstElementChild; - if (firstchild.hasAttribute("tabindex")) { - firstchild.focus() - } else { - nextsibligntabbable(firstchild, "next").focus() - } - } else { // cycle through the elements -// next_sibling = input_region.nextElementSibling; - next_sibling = nextsibligntabbable(input_region, "next"); - if (next_sibling) { next_sibling.focus() } - else { - document.getElementById("preferences_menu_holder").classList.toggle("hidden"); - document.getElementById("user-preferences-button").focus(); - } - } - } - } else if (input_region.hasAttribute("data-val")) { -console.log("input_region", input_region); -console.log("input_regionparentElement", input_region.parentElement); - if ((e.code == "Enter") || (e.code == "ArrowRight")) { -console.log("font_vals is", font_vals); - var dataval = input_region.getAttribute("data-val"); - var datachange = input_region.getAttribute("data-change"); -console.log("dataval", dataval, "datachange",datachange); - if (input_region.parentElement.classList.contains("fonts")) { - font_vals[dataval][0] += parseFloat(datachange); - if (font_vals[dataval][0] < font_vals[dataval][1]) { font_vals[dataval][0] = font_vals[dataval][1] } - else if (font_vals[dataval][0] > font_vals[dataval][2]) { font_vals[dataval][0] = font_vals[dataval][2] } -console.log("font_vals are", font_vals); -console.log("css font_vals", fontcss(font_vals)); - var new_style = fontcss(font_vals); - var paras = document.getElementsByClassName('para'); - for (i = 0; i < paras.length; i++) { - paras[i].setAttribute('style', new_style); - } - } else if (input_region.parentElement.classList.contains("fontfamily")) { - document.body.setAttribute("data-font", datachange); - var checks = document.getElementsByClassName('ffcheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("the" + datachange).innerHTML = "✔️"; - } else if (input_region.parentElement.classList.contains("avatar")) { - var checks = document.getElementsByClassName('avatarcheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("theavatarbutton").innerHTML = dataval; - document.getElementById("the" + dataval).innerHTML = "✔️"; - - } else if (input_region.parentElement.classList.contains("atmosphere")) { - document.body.setAttribute("data-atmosphere", dataval); - var checks = document.getElementsByClassName('atmospherecheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("the" + dataval).innerHTML = "✔️"; - - } else if (input_region.parentElement.classList.contains("ruler")) { - // could be motion or actual ruler - if (["mouse", "arrow", "eye"].includes(dataval)) { - document.body.setAttribute("data-motion", dataval); - var checks = document.getElementsByClassName('motioncheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("the" + dataval).innerHTML = "✔️"; - } else { - if (!document.body.hasAttribute("data-ruler")) { - linesAllWrapped() - } - document.body.setAttribute("data-ruler", dataval); - var checks = document.getElementsByClassName('rulercheck'); - for (i = 0; i < checks.length; i++) { - checks[i].innerHTML = ''; - } - document.getElementById("the" + dataval).innerHTML = "✔️"; - } - - } - } else if (e.code == "Tab" && e.shiftKey) { - e.preventDefault(); -// previous_sibling = input_region.previousElementSibling; - previous_sibling = nextsibligntabbable(input_region, "previous"); - -console.log("previous_sibling",previous_sibling); - if (previous_sibling) { previous_sibling.focus() } - else { - input_region.parentElement.parentElement.parentElement.classList.toggle("active"); - input_region.parentElement.parentElement.classList.toggle("selected"); - input_region.parentElement.parentElement.focus(); - input_region.parentElement.classList.toggle("hidden"); - } - } else if (e.code == "Tab") { - e.preventDefault(); - // next_sibling = input_region.nextElementSibling; - next_sibling = nextsibligntabbable(input_region, "next"); - if (next_sibling) { next_sibling.focus() } - else { - input_region.parentElement.parentElement.parentElement.classList.toggle("active"); - input_region.parentElement.parentElement.classList.toggle("selected"); - input_region.parentElement.parentElement.focus(); - input_region.parentElement.classList.toggle("hidden"); - } - } - } - - - return; - - editorLog("input_region", input_region); - // if we are writing something, keystrokes usually are just text input - if (document.getElementById('actively_editing')) { - editorLog(" we are actively editing"); - - if (e.code == "Tab" && !document.getElementById('local_menu_holder')) { - // disabled for now - e.preventDefault(); - return "" - create_local_menu() - } else if (document.getElementById('local_menu_holder')) { - main_menu_navigator(e); - } else { - local_editing_action(e) - } - - } else if (document.getElementById('phantomobject')) { - var the_phantomobject = document.getElementById('phantomobject'); - - if (the_phantomobject.classList.contains('move')) { - move_object(e) - } else { - alert("do not know what to do with that") - } - } else { - console.log("calling main_menu_navigator"); - main_menu_navigator(e); - } -} - diff --git a/slides/index.html b/slides/index.html deleted file mode 100755 index 992bfff..0000000 --- a/slides/index.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - - - - - - -Slides for MATH 1044 - - - - - - -
    - -
    -

    Slides for MATH 1044

    § 1.1: Set Theory

    Sample Space

    -

    -Definition 1. -

    -

    The sample space \(\Omega\) is the set of all possible results of an experiment. A single result is called an outcome. A collection of results is called an event.

    Rolling Dice

    -

    -Example 2. -

    -

    We roll a 6-sided die two times. What is \(\Omega\text{?}\)

    Flipping Coins

    -

    -Example 3. -

    -

    We flip a coin three times. What is \(\Omega\text{?}\)

    Picking a Value

    -

    -Example 4. -

    -

    We pick a number between 1 and 10. What is \(\Omega\text{?}\)

    Sets

    -

    -Definition 5. -

    -

    Let \(A\) be a set. The symbol \(\in\) means "is an element of", as in \(a \in A\text{.}\) Given another set \(B\text{,}\) we say \(A\) is a subset of \(B\text{,}\) written \(A\subset B\text{,}\) to mean that every element of the set \(A\) is also an element of the set \(B\text{.}\)

    -

    -Definition 6. -

    -

    Let \(A, B \subset \Omega\text{.}\)

    -
    -
    Union
    -

    The union is \(A \cup B = \{x \mid x \in A \text{ or } x \in B\}\text{.}\)

    -
    -
    -
    Intersection
    -

    The intersection is \(A \cap B = \{x \mid x \in A \text{ and } x \in B\}\text{.}\)

    -
    -
    -
    Difference
    -

    The set difference is \(A - B = \{x \mid x \in A \text{ and } x \notin B\}\text{.}\)

    -
    -
    -
    Complement
    -

    The complement is \(A^c = \{x \in \Omega \mid x \notin A\}\text{.}\)

    -
    -
    -
    Empty Set
    -

    The empty set, written \(\emptyset\) or \(\{\}\text{,}\) contains no elements.

    -
    -

    Section 1.2

    Title 2

    -

    Some more text.

    -
    -
    - - diff --git a/tags.html b/tags.html deleted file mode 100755 index 0a02459..0000000 --- a/tags.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - Introduction to Probability and Statistics for the Life Sciences - Tags - - - - - - - - -
    - -

    Introduction to Probability and Statistics for the Life Sciences

    -

    Spring 2026 MATH 1044

    -
    -

    Tags for Introduction to Probability and Statistics for the Life Sciences

    -
      -
    -
    - - - \ No newline at end of file diff --git a/theme/css/ptx-bg-dark.svg b/theme/css/ptx-bg-dark.svg deleted file mode 100755 index 0ecd50b..0000000 --- a/theme/css/ptx-bg-dark.svg +++ /dev/null @@ -1,676 +0,0 @@ - - - - diff --git a/theme/css/ptx-bg-light.svg b/theme/css/ptx-bg-light.svg deleted file mode 100755 index 148295b..0000000 --- a/theme/css/ptx-bg-light.svg +++ /dev/null @@ -1,676 +0,0 @@ - - - - diff --git a/theme/css/style.css b/theme/css/style.css deleted file mode 100755 index b371c6f..0000000 --- a/theme/css/style.css +++ /dev/null @@ -1,691 +0,0 @@ -:root, -::backdrop { - --sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir, "Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica, "Helvetica Neue", sans-serif; - --mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace; - --standard-border-radius: 5px; - --bg: #fff; - --accent-bg: #f5f7ff; - --text: #212121; - --text-light: #585858; - --border: #898ea4; - --accent: #0d47a1; - --accent-hover: #1266e2; - --accent-text: var(--bg); - --code: #d81b60; - --preformatted: #444; - --marked: #fd3; - --disabled: #efefef -} - -@media (prefers-color-scheme:dark) { - - :root, - ::backdrop { - color-scheme: dark; - --bg: #212121; - --accent-bg: #2b2b2b; - --text: #dcdcdc; - --text-light: #ababab; - --accent: #ffb300; - --accent-hover: #ffe099; - --accent-text: var(--bg); - --code: #f06292; - --preformatted: #ccc; - --disabled: #111 - } - - img, - video { - opacity: .8 - } -} - -*, -:before, -:after { - box-sizing: border-box -} - -textarea, -select, -input, -progress { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none -} - -html { - font-family: var(--sans-font); - scroll-behavior: smooth -} - -body { - color: var(--text); - background-color: var(--bg); - grid-template-columns: 1fr min(45rem, 90%) 1fr; - margin: 0; - font-size: 1.15rem; - line-height: 1.5; - display: grid -} - -body>* { - grid-column: 2 -} - -body>header { - background-color: var(--accent-bg); - border-bottom: 1px solid var(--border); - text-align: center; - grid-column: 1/-1; - padding: 0 .5rem 2rem -} - -body>header>:only-child { - margin-block-start: 2rem -} - -body>header h1 { - max-width: 1200px; - margin: 1rem auto -} - -body>header p { - max-width: 40rem; - margin: 1rem auto -} - -main { - padding-top: 1.5rem -} - -body>footer { - color: var(--text-light); - text-align: center; - border-top: 1px solid var(--border); - margin-top: 4rem; - padding: 2rem 1rem 1.5rem; - font-size: .9rem -} - -h1 { - font-size: 3rem -} - -h2 { - margin-top: 3rem; - font-size: 2.6rem -} - -h3 { - margin-top: 3rem; - font-size: 2rem -} - -h4 { - font-size: 1.44rem -} - -h5 { - font-size: 1.15rem -} - -h6 { - font-size: .96rem -} - -p { - margin: 1.5rem 0 -} - -p, -h1, -h2, -h3, -h4, -h5, -h6 { - overflow-wrap: break-word -} - -h1, -h2, -h3 { - line-height: 1.1 -} - -@media only screen and (width<=720px) { - h1 { - font-size: 2.5rem - } - - h2 { - font-size: 2.1rem - } - - h3 { - font-size: 1.75rem - } - - h4 { - font-size: 1.25rem - } -} - -a, -a:visited { - color: var(--accent) -} - -a:hover { - text-decoration: none -} - -button, -.button, -a.button, -input[type=submit], -input[type=reset], -input[type=button], -label[type=button] { - border: 1px solid var(--accent); - background-color: var(--accent); - color: var(--accent-text); - padding: .5rem .9rem; - line-height: normal; - text-decoration: none -} - -.button[aria-disabled=true], -input:disabled, -textarea:disabled, -select:disabled, -button[disabled] { - cursor: not-allowed; - background-color: var(--disabled); - border-color: var(--disabled); - color: var(--text-light) -} - -input[type=range] { - padding: 0 -} - -abbr[title] { - cursor: help; - text-decoration-line: underline; - text-decoration-style: dotted -} - -button:enabled:hover, -.button:not([aria-disabled=true]):hover, -input[type=submit]:enabled:hover, -input[type=reset]:enabled:hover, -input[type=button]:enabled:hover, -label[type=button]:hover { - background-color: var(--accent-hover); - border-color: var(--accent-hover); - cursor: pointer -} - -.button:focus-visible, -button:focus-visible:where(:enabled), -input:enabled:focus-visible:where([type=submit], [type=reset], [type=button]) { - outline: 2px solid var(--accent); - outline-offset: 1px -} - -header>nav { - padding: 1rem 0 0; - font-size: 1rem; - line-height: 2 -} - -header>nav ul, -header>nav ol { - flex-flow: wrap; - place-content: space-around center; - align-items: center; - margin: 0; - padding: 0; - list-style-type: none; - display: flex -} - -header>nav ul li, -header>nav ol li { - display: inline-block -} - -header>nav a, -header>nav a:visited { - border: 1px solid var(--border); - border-radius: var(--standard-border-radius); - color: var(--text); - margin: 0 .5rem 1rem; - padding: .1rem 1rem; - text-decoration: none; - display: inline-block -} - -header>nav a:hover, -header>nav a.current, -header>nav a[aria-current=page] { - border-color: var(--accent); - color: var(--accent); - cursor: pointer -} - -@media only screen and (width<=720px) { - header>nav a { - border: none; - padding: 0; - line-height: 1; - text-decoration: underline - } -} - -aside, -details, -pre, -progress { - background-color: var(--accent-bg); - border: 1px solid var(--border); - border-radius: var(--standard-border-radius); - margin-bottom: 1rem -} - -aside { - float: right; - width: 30%; - margin-inline-start: 15px; - padding: 0 15px; - font-size: 1rem -} - -[dir=rtl] aside { - float: left -} - -@media only screen and (width<=720px) { - aside { - float: none; - width: 100%; - margin-inline-start: 0 - } -} - -article, -fieldset, -dialog { - border: 1px solid var(--border); - border-radius: var(--standard-border-radius); - margin-bottom: 1rem; - padding: 1rem -} - -article h2:first-child, -section h2:first-child, -article h3:first-child, -section h3:first-child { - margin-top: 1rem -} - -section { - border-top: 1px solid var(--border); - border-bottom: 1px solid var(--border); - margin: 3rem 0; - padding: 2rem 1rem -} - -section+section, -section:first-child { - border-top: 0; - padding-top: 0 -} - -section+section { - margin-top: 0 -} - -section:last-child { - border-bottom: 0; - padding-bottom: 0 -} - -details { - padding: .7rem 1rem -} - -summary { - cursor: pointer; - word-break: break-all; - margin: -.7rem -1rem; - padding: .7rem 1rem; - font-weight: 700 -} - -details[open]>summary+* { - margin-top: 0 -} - -details[open]>summary { - margin-bottom: .5rem -} - -details[open]>:last-child { - margin-bottom: 0 -} - -table { - border-collapse: collapse; - margin: 1.5rem 0 -} - -figure>table { - width: max-content; - margin: 0 -} - -td, -th { - border: 1px solid var(--border); - text-align: start; - padding: .5rem -} - -th { - background-color: var(--accent-bg); - font-weight: 700 -} - -tr:nth-child(2n) { - background-color: var(--accent-bg) -} - -table caption { - margin-bottom: .5rem; - font-weight: 700 -} - -textarea, -select, -input, -button, -.button { - font-size: inherit; - border-radius: var(--standard-border-radius); - box-shadow: none; - max-width: 100%; - margin-bottom: .5rem; - padding: .5rem; - font-family: inherit; - display: inline-block -} - -textarea, -select, -input { - color: var(--text); - background-color: var(--bg); - border: 1px solid var(--border) -} - -label { - display: block -} - -textarea:not([cols]) { - width: 100% -} - -select:not([multiple]) { - background-image: linear-gradient(45deg, transparent 49%, var(--text)51%), linear-gradient(135deg, var(--text)51%, transparent 49%); - background-position: calc(100% - 15px), calc(100% - 10px); - background-repeat: no-repeat; - background-size: 5px 5px, 5px 5px; - padding-inline-end: 25px -} - -[dir=rtl] select:not([multiple]) { - background-position: 10px, 15px -} - -input[type=checkbox], -input[type=radio] { - vertical-align: middle; - width: min-content; - position: relative -} - -input[type=checkbox]+label, -input[type=radio]+label { - display: inline-block -} - -input[type=radio] { - border-radius: 100% -} - -input[type=checkbox]:checked, -input[type=radio]:checked { - background-color: var(--accent) -} - -input[type=checkbox]:checked:after { - content: " "; - border-right: solid var(--bg).08em; - border-bottom: solid var(--bg).08em; - background-color: #0000; - border-radius: 0; - width: .18em; - height: .32em; - font-size: 1.8em; - position: absolute; - top: .05em; - left: .17em; - transform: rotate(45deg) -} - -input[type=radio]:checked:after { - content: " "; - background-color: var(--bg); - border-radius: 100%; - width: .25em; - height: .25em; - font-size: 32px; - position: absolute; - top: .125em; - left: .125em -} - -@media only screen and (width<=720px) { - - textarea, - select, - input { - width: 100% - } -} - -input[type=color] { - height: 2.5rem; - padding: .2rem -} - -input[type=file] { - border: 0 -} - -hr { - background: var(--border); - border: none; - height: 1px; - margin: 1rem auto -} - -mark { - border-radius: var(--standard-border-radius); - background-color: var(--marked); - color: #000; - padding: 2px 5px -} - -mark a { - color: #0d47a1 -} - -img, -video { - border-radius: var(--standard-border-radius); - max-width: 100%; - height: auto -} - -figure { - margin: 0; - display: block; - overflow-x: auto -} - -figure>img, -figure>picture>img { - margin-inline: auto; - display: block -} - -figcaption { - text-align: center; - color: var(--text-light); - margin-block: 1rem; - font-size: .9rem -} - -blockquote { - border-inline-start: .35rem solid var(--accent); - color: var(--text-light); - margin-block: 2rem; - margin-inline: 2rem 0; - padding: .4rem .8rem; - font-style: italic -} - -cite { - color: var(--text-light); - font-size: .9rem; - font-style: normal -} - -dt { - color: var(--text-light) -} - -code, -pre, -pre span, -kbd, -samp { - font-family: var(--mono-font); - color: var(--code) -} - -kbd { - color: var(--preformatted); - border: 1px solid var(--preformatted); - border-bottom: 3px solid var(--preformatted); - border-radius: var(--standard-border-radius); - padding: .1rem .4rem -} - -pre { - color: var(--preformatted); - max-width: 100%; - padding: 1rem 1.4rem; - overflow: auto -} - -pre code { - color: var(--preformatted); - background: 0 0; - margin: 0; - padding: 0 -} - -progress { - width: 100% -} - -progress:indeterminate { - background-color: var(--accent-bg) -} - -progress::-webkit-progress-bar { - border-radius: var(--standard-border-radius); - background-color: var(--accent-bg) -} - -progress::-webkit-progress-value { - border-radius: var(--standard-border-radius); - background-color: var(--accent) -} - -progress::-moz-progress-bar { - border-radius: var(--standard-border-radius); - background-color: var(--accent); - transition-property: width; - transition-duration: .3s -} - -progress:indeterminate::-moz-progress-bar { - background-color: var(--accent-bg) -} - -dialog { - max-width: 40rem; - margin: auto -} - -dialog::backdrop { - background-color: var(--bg); - opacity: .8 -} - -@media only screen and (width<=720px) { - dialog { - max-width: 100%; - margin: auto 1em - } -} - -sup, -sub { - vertical-align: baseline; - position: relative -} - -sup { - top: -.4em -} - -sub { - top: .3em -} - -.notice { - background: var(--accent-bg); - border: 2px solid var(--border); - border-radius: var(--standard-border-radius); - margin: 2rem 0; - padding: 1.5rem -} - -body>header { - background: repeat url(ptx-bg-light.svg) -} - -@media (prefers-color-scheme: dark) { - body>header { - background: url(ptx-bg-dark.svg) - } -} \ No newline at end of file