for extra-complex tables
- * -> use for paragraph-length cell content
- * -> use when manual line breaks/indentation would help readability
- * - dl.switch for switch statements
- * - ol.algorithm for algorithms (helps to visualize nesting)
- * - .figure and .caption (HTML4) and figure and figcaption (HTML5)
- * -> .sidefigure for right-floated figures
- * - ins/del
- *
- * Code
- * - pre and code
- *
- * Special Sections
- * - .note for informative notes (div, p, span, aside, details)
- * - .example for informative examples (div, p, pre, span)
- * - .issue for issues (div, p, span)
- * - .advisement for loud normative statements (div, p, strong)
- * - .annoying-warning for spec obsoletion notices (div, aside, details)
- *
- * Definition Boxes
- * - pre.def for WebIDL definitions
- * - table.def for tables that define other entities (e.g. CSS properties)
- * - dl.def for definition lists that define other entitles (e.g. HTML elements)
- *
- * Numbering
- * - .secno for section numbers in .toc and headings (3.2 )
- * - .marker for source-inserted example/figure/issue numbers (Issue 4 )
- * - ::before styled for CSS-generated issue/example/figure numbers:
- * -> Documents wishing to use this only need to add
- * figcaption::before,
- * .caption::before { content: "Figure " counter(figure); }
- * .example::before { content: "Example " counter(example); }
- * .issue::before { content: "Issue " counter(issue); }
- *
- * Header Stuff (ignore, just don't conflict with these classes)
- * - .head for the header
- * - .copyright for the copyright
- *
- * Miscellaneous
- * - .overlarge for things that should be as wide as possible, even if
- * that overflows the body text area. This can be used on an item or
- * on its container, depending on the effect desired.
- * Note that this styling basically doesn't help at all when printing,
- * since A4 paper isn't much wider than the max-width here.
- * It's better to design things to fit into a narrower measure if possible.
- * - js-added ToC jump links (see fixup.js)
- *
- ******************************************************************************/
-
-/******************************************************************************/
-/* Body */
-/******************************************************************************/
-
- body {
- counter-reset: example figure issue;
-
- /* Layout */
- max-width: 50em; /* limit line length to 50em for readability */
- margin: 0 auto; /* center text within page */
- padding: 1.6em 1.5em 2em 50px; /* assume 16px font size for downlevel clients */
- padding: 1.6em 1.5em 2em calc(26px + 1.5em); /* leave space for status flag */
-
- /* Typography */
- line-height: 1.5;
- font-family: sans-serif;
- widows: 2;
- orphans: 2;
- word-wrap: break-word;
- overflow-wrap: break-word;
- hyphens: auto;
-
- /* Colors */
- color: black;
- background: white top left fixed no-repeat;
- background-size: 25px auto;
- }
-
-
-/******************************************************************************/
-/* Front Matter & Navigation */
-/******************************************************************************/
-
-/** Header ********************************************************************/
-
- div.head { margin-bottom: 1em }
- div.head hr { border-style: solid; }
-
- div.head h1 {
- font-weight: bold;
- margin: 0 0 .1em;
- font-size: 220%;
- }
-
- div.head h2 { margin-bottom: 1.5em;}
-
-/** W3C Logo ******************************************************************/
-
- .head p:not(.copyright):first-child {
- margin: 0;
- }
-
- .head p:not(.copyright):first-child > a,
- .head > a:first-child {
- float: right;
- margin: 0.4rem 0 0.2rem .4rem;
- }
-
- .head img[src*="logos/W3C"] {
- display: block;
- border: solid #1a5e9a;
- border-width: .65rem .7rem .6rem;
- border-radius: .4rem;
- background: #1a5e9a;
- color: white;
- font-weight: bold;
- }
-
- .head a:hover > img[src*="logos/W3C"],
- .head a:focus > img[src*="logos/W3C"] {
- opacity: .8;
- }
-
- .head a:active > img[src*="logos/W3C"] {
- background: #c00;
- border-color: #c00;
- }
-
- /* see also additional rules in Link Styling section */
-
-/** Copyright *****************************************************************/
-
- p.copyright,
- p.copyright small { font-size: small }
-
-/** Back to Top / ToC Toggle **************************************************/
-
- @media print {
- #toc-nav {
- display: none;
- }
- }
- @media not print {
- #toc-nav {
- position: fixed;
- z-index: 2;
- bottom: 0; left: 0;
- margin: 0;
- min-width: 1.33em;
- border-top-right-radius: 2rem;
- box-shadow: 0 0 2px;
- font-size: 1.5em;
- color: black;
- }
- #toc-nav > a {
- display: block;
- white-space: nowrap;
-
- height: 1.33em;
- padding: .1em 0.3em;
- margin: 0;
-
- background: white;
- box-shadow: 0 0 2px;
- border: none;
- border-top-right-radius: 1.33em;
- background: white;
- }
- #toc-nav > #toc-jump {
- padding-bottom: 2em;
- margin-bottom: -1.9em;
- }
-
- #toc-nav > a:hover,
- #toc-nav > a:focus {
- background: #f8f8f8;
- }
- #toc-nav > a:not(:hover):not(:focus) {
- color: #707070;
- }
-
- /* statusbar gets in the way on keyboard focus; remove once browsers fix */
- #toc-nav > a[href="#toc"]:not(:hover):focus:last-child {
- padding-bottom: 1.5rem;
- }
-
- #toc-nav:not(:hover) > a:not(:focus) > span + span {
- /* Ideally this uses :focus-within on #toc-nav */
- display: none;
- }
- #toc-nav > a > span + span {
- padding-right: 0.2em;
- }
-
- #toc-toggle-inline {
- vertical-align: 0.05em;
- font-size: 80%;
- color: gray;
- color: hsla(203,20%,40%,.7);
- border-style: none;
- background: transparent;
- position: relative;
- }
- #toc-toggle-inline:hover:not(:active),
- #toc-toggle-inline:focus:not(:active) {
- text-shadow: 1px 1px silver;
- top: -1px;
- left: -1px;
- }
-
- #toc-nav :active {
- color: #C00;
- }
- }
-
-/** ToC Sidebar ***************************************************************/
-
- /* Floating sidebar */
- @media screen {
- body.toc-sidebar #toc {
- position: fixed;
- top: 0; bottom: 0;
- left: 0;
- width: 23.5em;
- max-width: 80%;
- max-width: calc(100% - 2em - 26px);
- overflow: auto;
- padding: 0 1em;
- padding-left: 42px;
- padding-left: calc(1em + 26px);
- background: inherit;
- background-color: #f7f8f9;
- z-index: 1;
- box-shadow: -.1em 0 .25em rgba(0,0,0,.1) inset;
- }
- body.toc-sidebar #toc h2 {
- margin-top: .8rem;
- font-variant: small-caps;
- font-variant: all-small-caps;
- text-transform: lowercase;
- font-weight: bold;
- color: gray;
- color: hsla(203,20%,40%,.7);
- }
- body.toc-sidebar #toc-jump:not(:focus) {
- width: 0;
- height: 0;
- padding: 0;
- position: absolute;
- overflow: hidden;
- }
- }
- /* Hide main scroller when only the ToC is visible anyway */
- @media screen and (max-width: 28em) {
- body.toc-sidebar {
- overflow: hidden;
- }
- }
-
- /* Sidebar with its own space */
- @media screen and (min-width: 78em) {
- body:not(.toc-inline) #toc {
- position: fixed;
- top: 0; bottom: 0;
- left: 0;
- width: 23.5em;
- overflow: auto;
- padding: 0 1em;
- padding-left: 42px;
- padding-left: calc(1em + 26px);
- background: inherit;
- background-color: #f7f8f9;
- z-index: 1;
- box-shadow: -.1em 0 .25em rgba(0,0,0,.1) inset;
- }
- body:not(.toc-inline) #toc h2 {
- margin-top: .8rem;
- font-variant: small-caps;
- font-variant: all-small-caps;
- text-transform: lowercase;
- font-weight: bold;
- color: gray;
- color: hsla(203,20%,40%,.7);
- }
-
- body:not(.toc-inline) {
- padding-left: 29em;
- }
- /* See also Overflow section at the bottom */
-
- body:not(.toc-inline) #toc-jump:not(:focus) {
- width: 0;
- height: 0;
- padding: 0;
- position: absolute;
- overflow: hidden;
- }
- }
- @media screen and (min-width: 90em) {
- body:not(.toc-inline) {
- margin: 0 4em;
- }
- }
-
-/******************************************************************************/
-/* Sectioning */
-/******************************************************************************/
-
-/** Headings ******************************************************************/
-
- h1, h2, h3, h4, h5, h6, dt {
- page-break-after: avoid;
- page-break-inside: avoid;
- font: 100% sans-serif; /* Reset all font styling to clear out UA styles */
- font-family: inherit; /* Inherit the font family. */
- line-height: 1.2; /* Keep wrapped headings compact */
- hyphens: manual; /* Hyphenated headings look weird */
- }
-
- h2, h3, h4, h5, h6 {
- margin-top: 3rem;
- }
-
- h1, h2, h3 {
- color: #005A9C;
- background: transparent;
- }
-
- h1 { font-size: 170%; }
- h2 { font-size: 140%; }
- h3 { font-size: 120%; }
- h4 { font-weight: bold; }
- h5 { font-style: italic; }
- h6 { font-variant: small-caps; }
- dt { font-weight: bold; }
-
-/** Subheadings ***************************************************************/
-
- h1 + h2,
- #subtitle {
- /* #subtitle is a subtitle in an H2 under the H1 */
- margin-top: 0;
- }
- h2 + h3,
- h3 + h4,
- h4 + h5,
- h5 + h6 {
- margin-top: 1.2em; /* = 1 x line-height */
- }
-
-/** Section divider ***********************************************************/
-
- :not(.head) > hr {
- font-size: 1.5em;
- text-align: center;
- margin: 1em auto;
- height: auto;
- border: transparent solid 0;
- background: transparent;
- }
- :not(.head) > hr::before {
- content: "\2727\2003\2003\2727\2003\2003\2727";
- }
-
-/******************************************************************************/
-/* Paragraphs and Lists */
-/******************************************************************************/
-
- p {
- margin: 1em 0;
- }
-
- dd > p:first-child,
- li > p:first-child {
- margin-top: 0;
- }
-
- ul, ol {
- margin-left: 0;
- padding-left: 2em;
- }
-
- li {
- margin: 0.25em 0 0.5em;
- padding: 0;
- }
-
- dl dd {
- margin: 0 0 .5em 2em;
- }
-
- .head dd + dd { /* compact for header */
- margin-top: -.5em;
- }
-
- /* Style for algorithms */
- ol.algorithm ol:not(.algorithm) {
- border-left: 0.5em solid #DEF;
- }
-
- /* Style for switch/case s */
- dl.switch > dd > ol.only {
- margin-left: 0;
- }
- dl.switch > dd > ol.algorithm {
- margin-left: -2em;
- }
- dl.switch {
- padding-left: 2em;
- }
- dl.switch > dt {
- text-indent: -1.5em;
- margin-top: 1em;
- }
- dl.switch > dt + dt {
- margin-top: 0;
- }
- dl.switch > dt::before {
- content: '\21AA';
- padding: 0 0.5em 0 0;
- display: inline-block;
- width: 1em;
- text-align: right;
- line-height: 0.5em;
- }
-
-/** Terminology Markup ********************************************************/
-
-
-/******************************************************************************/
-/* Inline Markup */
-/******************************************************************************/
-
-/** Terminology Markup ********************************************************/
- dfn { /* Defining instance */
- font-weight: bolder;
- }
- a > i { /* Instance of term */
- font-style: normal;
- }
- dt dfn code, code.idl {
- font-size: inherit;
- }
- dfn var {
- font-style: normal;
- }
-
-/** Change Marking ************************************************************/
-
- del { color: red; text-decoration: line-through; }
- ins { color: #080; text-decoration: underline; }
-
-/** Miscellaneous improvements to inline formatting ***************************/
-
- sup {
- vertical-align: super;
- font-size: 80%
- }
-
-/******************************************************************************/
-/* Code */
-/******************************************************************************/
-
-/** General monospace/pre rules ***********************************************/
-
- pre, code, samp {
- font-family: Menlo, Consolas, "DejaVu Sans Mono", Monaco, monospace;
- font-size: .9em;
- page-break-inside: avoid;
- hyphens: none;
- text-transform: none;
- }
- pre code,
- code code {
- font-size: 100%;
- }
-
- pre {
- margin-top: 1em;
- margin-bottom: 1em;
- overflow: auto;
- }
-
-/** Inline Code fragments *****************************************************/
-
- /* Do something nice. */
-
-/******************************************************************************/
-/* Links */
-/******************************************************************************/
-
-/** General Hyperlinks ********************************************************/
-
- /* We hyperlink a lot, so make it less intrusive */
- a[href] {
- color: #034575;
- text-decoration: none;
- border-bottom: 1px solid #707070;
- /* Need a bit of extending for it to look okay */
- padding: 0 1px 0;
- margin: 0 -1px 0;
- }
- a:visited {
- border-bottom-color: #BBB;
- }
-
- /* Use distinguishing colors when user is interacting with the link */
- a[href]:focus,
- a[href]:hover {
- background: #f8f8f8;
- background: rgba(75%, 75%, 75%, .25);
- border-bottom-width: 3px;
- margin-bottom: -2px;
- }
- a[href]:active {
- color: #C00;
- border-color: #C00;
- }
-
- /* Backout above styling for W3C logo */
- .head p:not(.copyright) > a,
- .head > a:first-child {
- border: none;
- text-decoration: none;
- background: transparent;
- }
-
-/******************************************************************************/
-/* Images */
-/******************************************************************************/
-
- img {
- border-style: none;
- }
-
- /* For autogen numbers, add
- .caption::before, figcaption::before { content: "Figure " counter(figure) ". "; }
- */
-
- figure, .figure, .sidefigure {
- page-break-inside: avoid;
- text-align: center;
- margin: 2.5em 0;
- }
- .figure img, .sidefigure img, figure img,
- .figure object, .sidefigure object, figure object {
- max-width: 100%;
- margin: auto;
- }
- .figure pre, .sidefigure pre, figure pre {
- text-align: left;
- display: table;
- margin: 1em auto;
- }
- .figure table, figure table {
- margin: auto;
- }
- @media screen and (min-width: 20em) {
- .sidefigure {
- float: right;
- width: 50%;
- margin: 0 0 0.5em 0.5em
- }
- }
- .caption, figcaption, caption {
- font-style: italic;
- font-size: 90%;
- }
- .caption::before, figcaption::before, figcaption > .marker {
- font-weight: bold;
- }
- .caption, figcaption {
- counter-increment: figure;
- }
-
- /* DL list is indented 2em, but figure inside it is not */
- dd > .figure, dd > figure { margin-left: -2em }
-
-/******************************************************************************/
-/* Colored Boxes */
-/******************************************************************************/
-
- .issue, .note, .example, .advisement, blockquote {
- padding: .5em;
- border: .5em;
- border-left-style: solid;
- page-break-inside: avoid;
- }
- span.issue, span.note {
- padding: .1em .5em .15em;
- border-right-style: solid;
- }
-
- .issue,
- .note,
- .example,
- .advisement,
- blockquote {
- margin: 1em auto;
- }
- .note > p:first-child,
- .issue > p:first-child,
- blockquote > :first-child {
- margin-top: 0;
- }
- blockquote > :last-child {
- margin-bottom: 0;
- }
-
-/** Blockquotes ***************************************************************/
-
- blockquote {
- border-color: silver;
- }
-
-/** Open issue ****************************************************************/
-
- .issue {
- border-color: #E05252;
- background: #FBE9E9;
- counter-increment: issue;
- overflow: auto;
- }
- .issue::before, .issue > .marker {
- text-transform: uppercase;
- color: #AE1E1E;
- padding-right: 1em;
- text-transform: uppercase;
- }
- /* Add .issue::before { content: "Issue " counter(issue); } for autogen numbers,
- or use class="marker" to mark up the issue number in source. */
-
-/** Example *******************************************************************/
-
- .example {
- border-color: #E0CB52;
- background: #FCFAEE;
- counter-increment: example;
- overflow: auto;
- clear: both;
- }
- .example::before, .example > .marker {
- text-transform: uppercase;
- color: #827017;
- min-width: 7.5em;
- display: block;
- }
- /* Add .example::before { content: "Example " counter(example); } for autogen numbers,
- or use class="marker" to mark up the example number in source. */
-
-/** Non-normative Note ********************************************************/
-
- .note {
- border-color: #52E052;
- background: #E9FBE9;
- overflow: auto;
- }
-
- .note::before, .note > .marker,
- details.note > summary::before,
- details.note > summary > .marker {
- text-transform: uppercase;
- display: block;
- color: hsl(120, 70%, 30%);
- }
- /* Add .note::before { content: "Note"; } for autogen label,
- or use class="marker" to mark up the label in source. */
-
- details.note > summary {
- display: block;
- color: hsl(120, 70%, 30%);
- }
- details.note[open] > summary {
- border-bottom: 1px silver solid;
- }
-
-/** Advisement Box ************************************************************/
- /* for attention-grabbing normative statements */
-
- .advisement {
- border-color: orange;
- border-style: none solid;
- background: #FFEECC;
- }
- strong.advisement {
- display: block;
- text-align: center;
- }
- .advisement > .marker {
- color: #B35F00;
- }
-
-/** Spec Obsoletion Notice ****************************************************/
- /* obnoxious obsoletion notice for older/abandoned specs. */
-
- details {
- display: block;
- }
- summary {
- font-weight: bolder;
- }
-
- .annoying-warning:not(details),
- details.annoying-warning:not([open]) > summary,
- details.annoying-warning[open] {
- background: #fdd;
- color: red;
- font-weight: bold;
- padding: .75em 1em;
- border: thick red;
- border-style: solid;
- border-radius: 1em;
- }
- .annoying-warning :last-child {
- margin-bottom: 0;
- }
-
-@media not print {
- details.annoying-warning[open] {
- position: fixed;
- left: 1em;
- right: 1em;
- bottom: 1em;
- z-index: 1000;
- }
-}
-
- details.annoying-warning:not([open]) > summary {
- text-align: center;
- }
-
-/** Entity Definition Boxes ***************************************************/
-
- .def {
- padding: .5em 1em;
- background: #DEF;
- margin: 1.2em 0;
- border-left: 0.5em solid #8CCBF2;
- }
-
-/******************************************************************************/
-/* Tables */
-/******************************************************************************/
-
- th, td {
- text-align: left;
- text-align: start;
- }
-
-/** Property/Descriptor Definition Tables *************************************/
-
- table.def {
- /* inherits .def box styling, see above */
- width: 100%;
- border-spacing: 0;
- }
-
- table.def td,
- table.def th {
- padding: 0.5em;
- vertical-align: baseline;
- border-bottom: 1px solid #bbd7e9;
- }
-
- table.def > tbody > tr:last-child th,
- table.def > tbody > tr:last-child td {
- border-bottom: 0;
- }
-
- table.def th {
- font-style: italic;
- font-weight: normal;
- padding-left: 1em;
- width: 3em;
- }
-
- /* For when values are extra-complex and need formatting for readability */
- table td.pre {
- white-space: pre-wrap;
- }
-
- /* A footnote at the bottom of a def table */
- table.def td.footnote {
- padding-top: 0.6em;
- }
- table.def td.footnote::before {
- content: " ";
- display: block;
- height: 0.6em;
- width: 4em;
- border-top: thin solid;
- }
-
-/** Data tables (and properly marked-up index tables) *************************/
- /*
- highlights structural relationships in a table
- when correct markup is used (e.g. thead/tbody, th vs. td, scope attribute)
-
- Use class="complex data" for particularly complicated tables --
- (This will draw more lines: busier, but clearer.)
-
- Use class="long" on table cells with paragraph-like contents
- (This will adjust text alignment accordingly.)
- Alternately use class="longlastcol" on tables, to have the last column assume "long".
- */
-
- table {
- word-wrap: normal;
- overflow-wrap: normal;
- hyphens: manual;
- }
-
- table.data,
- table.index {
- margin: 1em auto;
- border-collapse: collapse;
- border: hidden;
- width: 100%;
- table-layout: fixed;
- }
- table.data caption,
- table.index caption {
- max-width: 50em;
- margin: 0 auto 1em;
- }
-
- table.data td, table.data th,
- table.index td, table.index th {
- padding: 0.5em 1em;
- border-width: 1px;
- border-color: silver;
- border-top-style: solid;
- }
-
- table.data thead td:empty {
- padding: 0;
- border: 0;
- }
-
- table.data thead,
- table.index thead,
- table.data tbody,
- table.index tbody {
- border-bottom: 2px solid;
- }
-
- table.data colgroup,
- table.index colgroup {
- border-left: 2px solid;
- }
-
- table.data tbody th:first-child,
- table.index tbody th:first-child {
- border-right: 2px solid;
- border-top: 1px solid silver;
- padding-right: 1em;
- }
-
- table.data th[colspan],
- table.data td[colspan] {
- text-align: center;
- }
-
- table.complex.data th,
- table.complex.data td {
- border: 1px solid silver;
- text-align: center;
- }
-
- table.data.longlastcol td:last-child,
- table.data td.long {
- vertical-align: baseline;
- text-align: left;
- }
-
- table.data img {
- vertical-align: middle;
- }
-
-
-/*
-Alternate table alignment rules
-
- table.data,
- table.index {
- text-align: center;
- }
-
- table.data thead th[scope="row"],
- table.index thead th[scope="row"] {
- text-align: right;
- }
-
- table.data tbody th:first-child,
- table.index tbody th:first-child {
- text-align: right;
- }
-
-Possible extra rowspan handling
-
- table.data tbody th[rowspan]:not([rowspan='1']),
- table.index tbody th[rowspan]:not([rowspan='1']),
- table.data tbody td[rowspan]:not([rowspan='1']),
- table.index tbody td[rowspan]:not([rowspan='1']) {
- border-left: 1px solid silver;
- }
-
- table.data tbody th[rowspan]:first-child,
- table.index tbody th[rowspan]:first-child,
- table.data tbody td[rowspan]:first-child,
- table.index tbody td[rowspan]:first-child{
- border-left: 0;
- border-right: 1px solid silver;
- }
-*/
-
-/******************************************************************************/
-/* Indices */
-/******************************************************************************/
-
-
-/** Table of Contents *********************************************************/
-
- .toc a {
- /* More spacing; use padding to make it part of the click target. */
- padding-top: 0.1rem;
- /* Larger, more consistently-sized click target */
- display: block;
- /* Reverse color scheme */
- color: black;
- border-color: #3980B5;
- }
- .toc a:visited {
- border-color: #054572;
- }
- .toc a:not(:focus):not(:hover) {
- /* Allow colors to cascade through from link styling */
- border-bottom-color: transparent;
- }
-
- .toc, .toc ol, .toc ul, .toc li {
- list-style: none; /* Numbers must be inlined into source */
- /* because generated content isn't search/selectable and markers can't do multilevel yet */
- margin: 0;
- padding: 0;
- line-height: 1.1rem; /* consistent spacing */
- }
-
- /* ToC not indented until third level, but font style & margins show hierarchy */
- .toc > li { font-weight: bold; }
- .toc > li li { font-weight: normal; }
- .toc > li li li { font-size: 95%; }
- .toc > li li li li { font-size: 90%; }
- .toc > li li li li li { font-size: 85%; }
-
- .toc > li { margin: 1.5rem 0; }
- .toc > li li { margin: 0.3rem 0; }
- .toc > li li li { margin-left: 2rem; }
-
- /* Section numbers in a column of their own */
- .toc .secno {
- float: left;
- width: 4rem;
- white-space: nowrap;
- }
- .toc > li li li li .secno {
- font-size: 85%;
- }
- .toc > li li li li li .secno {
- font-size: 100%;
- }
-
- :not(li) > .toc { margin-left: 5rem; }
- .toc .secno { margin-left: -5rem; }
- .toc > li li li .secno { margin-left: -7rem; }
- .toc > li li li li .secno { margin-left: -9rem; }
- .toc > li li li li li .secno { margin-left: -11rem; }
- .toc > li li li li li .secno { margin-left: -13rem; }
-
- /* Tighten up indentation in narrow ToCs */
- @media (max-width: 30em) {
- :not(li) > .toc { margin-left: 4rem; }
- .toc .secno { margin-left: -4rem; }
- .toc > li li li { margin-left: 1rem; }
- .toc > li li li .secno { margin-left: -5rem; }
- .toc > li li li li .secno { margin-left: -6rem; }
- .toc > li li li li li .secno { margin-left: -7rem; }
- .toc > li li li li li li .secno { margin-left: -8rem; }
- }
- @media screen and (min-width: 78em) {
- body:not(.toc-inline) :not(li) > .toc { margin-left: 4rem; }
- body:not(.toc-inline) .toc .secno { margin-left: -4rem; }
- body:not(.toc-inline) .toc > li li li { margin-left: 1rem; }
- body:not(.toc-inline) .toc > li li li .secno { margin-left: -5rem; }
- body:not(.toc-inline) .toc > li li li li .secno { margin-left: -6rem; }
- body:not(.toc-inline) .toc > li li li li li .secno { margin-left: -7rem; }
- body:not(.toc-inline) .toc > li li li li li li .secno { margin-left: -8rem; }
- }
- body.toc-sidebar #toc :not(li) > .toc { margin-left: 4rem; }
- body.toc-sidebar #toc .toc .secno { margin-left: -4rem; }
- body.toc-sidebar #toc .toc > li li li { margin-left: 1rem; }
- body.toc-sidebar #toc .toc > li li li .secno { margin-left: -5rem; }
- body.toc-sidebar #toc .toc > li li li li .secno { margin-left: -6rem; }
- body.toc-sidebar #toc .toc > li li li li li .secno { margin-left: -7rem; }
- body.toc-sidebar #toc .toc > li li li li li li .secno { margin-left: -8rem; }
- .toc li {
- clear: both;
- }
-
-
-/** Index *********************************************************************/
-
- /* Index Lists: Layout */
- ul.index { margin-left: 0; columns: 15em; text-indent: 1em hanging; }
- ul.index li { margin-left: 0; list-style: none; break-inside: avoid; }
- ul.index li li { margin-left: 1em }
- ul.index dl { margin-top: 0; }
- ul.index dt { margin: .2em 0 .2em 20px;}
- ul.index dd { margin: .2em 0 .2em 40px;}
- /* Index Lists: Typography */
- ul.index ul,
- ul.index dl { font-size: smaller; }
- @media not print {
- ul.index li span {
- white-space: nowrap;
- color: transparent; }
- ul.index li a:hover + span,
- ul.index li a:focus + span {
- color: #707070;
- }
- }
-
-/** Index Tables *****************************************************/
- /* See also the data table styling section, which this effectively subclasses */
-
- table.index {
- font-size: small;
- border-collapse: collapse;
- border-spacing: 0;
- text-align: left;
- margin: 1em 0;
- }
-
- table.index td,
- table.index th {
- padding: 0.4em;
- }
-
- table.index tr:hover td:not([rowspan]),
- table.index tr:hover th:not([rowspan]) {
- background: #f7f8f9;
- }
-
- /* The link in the first column in the property table (formerly a TD) */
- table.index th:first-child a {
- font-weight: bold;
- }
-
-/******************************************************************************/
-/* Print */
-/******************************************************************************/
-
- @media print {
- /* Pages have their own margins. */
- html {
- margin: 0;
- }
- /* Serif for print. */
- body {
- font-family: serif;
- }
- }
- @page {
- margin: 1.5cm 1.1cm;
- }
-
-/******************************************************************************/
-/* Legacy */
-/******************************************************************************/
-
- /* This rule is inherited from past style sheets. No idea what it's for. */
- .hide { display: none }
-
-
-
-/******************************************************************************/
-/* Overflow Control */
-/******************************************************************************/
-
- .figure .caption, .sidefigure .caption, figcaption {
- /* in case figure is overlarge, limit caption to 50em */
- max-width: 50rem;
- margin-left: auto;
- margin-right: auto;
- }
- .overlarge > table {
- /* limit preferred width of table */
- max-width: 50em;
- margin-left: auto;
- margin-right: auto;
- }
-
- @media (min-width: 55em) {
- .overlarge {
- margin-left: calc(13px + 26.5rem - 50vw);
- margin-right: calc(13px + 26.5rem - 50vw);
- max-width: none;
- }
- }
- @media screen and (min-width: 78em) {
- body:not(.toc-inline) .overlarge {
- /* 30.5em body padding 50em content area */
- margin-left: calc(40em - 50vw) !important;
- margin-right: calc(40em - 50vw) !important;
- }
- }
- @media screen and (min-width: 90em) {
- body:not(.toc-inline) .overlarge {
- /* 4em html margin 30.5em body padding 50em content area */
- margin-left: 0 !important;
- margin-right: calc(84.5em - 100vw) !important;
- }
- }
-
- @media not print {
- .overlarge {
- overflow-x: auto;
- /* See Lea Verou's explanation background-attachment:
- * http://lea.verou.me/2012/04/background-attachment-local/
- *
- background: top left / 4em 100% linear-gradient(to right, #ffffff, rgba(255, 255, 255, 0)) local,
- top right / 4em 100% linear-gradient(to left, #ffffff, rgba(255, 255, 255, 0)) local,
- top left / 1em 100% linear-gradient(to right, #c3c3c5, rgba(195, 195, 197, 0)) scroll,
- top right / 1em 100% linear-gradient(to left, #c3c3c5, rgba(195, 195, 197, 0)) scroll,
- white;
- background-repeat: no-repeat;
- */
- }
- }
diff --git a/docs/xqdoc/resources/page.css b/docs/xqdoc/resources/page.css
deleted file mode 100644
index 7693ed5..0000000
--- a/docs/xqdoc/resources/page.css
+++ /dev/null
@@ -1,295 +0,0 @@
-body {
- font-family: Helvetica;
- padding: 0.5em 1em;
-}
-
-
-
-pre {
- font-family: Inconsolata, Consolas, monospace;
-}
-
-ol.results {
- padding-left: 0;
-}
-
-.footer {
- text-align: right;
- border-top: solid 4px;
- padding: 0.25em 0.5em;
- font-size: 85%;
- color: #999;
-}
-
-li.result {
- list-style-position: inside;
- list-style: none;
- height: 140px;
-}
-
-h2 {
- display: inline-block;
- margin: 0;
-}
-
-h2 a, .result h3 a {
- text-decoration: inherit;
- color: inherit;
-}
-
-h3 {
- font-size: 140%;
- background-color: #aaa;
- border-bottom: 1px solid #000;
- width: 100%;
-}
-
-h4 {
- font-size: 100%;
- background-color: #ddd;
- width: 90%;
-}
-
-
-
-td {
- vertical-align: text-top;
-}
-/* from bootstrap 4.3.1 */
-.badge {
- display: inline-block;
- padding: 0.25em 0.4em;
- font-size: 75%;
- font-weight: 700;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: 0.25rem;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-}
-
-
-
-a.badge:hover, a.badge:focus {
- text-decoration: none;
-}
-
-.badge:empty {
- display: none;
-}
-
-.btn .badge {
- position: relative;
- top: -1px;
-}
-
-.badge-pill {
- padding-right: 0.6em;
- padding-left: 0.6em;
- border-radius: 10rem;
-}
-
-.badge-primary {
- color: #fff;
- background-color: #007bff;
-}
-
-a.badge-primary:hover, a.badge-primary:focus {
- color: #fff;
- background-color: #0062cc;
-}
-
-a.badge-primary:focus, a.badge-primary.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
-}
-
-.badge-secondary {
- color: #fff;
- background-color: #6c757d;
-}
-
-a.badge-secondary:hover, a.badge-secondary:focus {
- color: #fff;
- background-color: #545b62;
-}
-
-a.badge-secondary:focus, a.badge-secondary.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.badge-success {
- color: #fff;
- background-color: #28a745;
-}
-
-a.badge-success:hover, a.badge-success:focus {
- color: #fff;
- background-color: #1e7e34;
-}
-
-a.badge-success:focus, a.badge-success.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
-}
-
-.badge-info {
- color: #fff;
- background-color: #17a2b8;
-}
-
-a.badge-info:hover, a.badge-info:focus {
- color: #fff;
- background-color: #117a8b;
-}
-
-a.badge-info:focus, a.badge-info.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
-}
-
-.badge-warning {
- color: #212529;
- background-color: #ffc107;
-}
-
-a.badge-warning:hover, a.badge-warning:focus {
- color: #212529;
- background-color: #d39e00;
-}
-
-a.badge-warning:focus, a.badge-warning.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
-}
-
-.badge-danger {
- color: #fff;
- background-color: #dc3545;
-}
-
-a.badge-danger:hover, a.badge-danger:focus {
- color: #fff;
- background-color: #bd2130;
-}
-
-a.badge-danger:focus, a.badge-danger.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
-}
-
-.badge-light {
- color: #212529;
- background-color: #f8f9fa;
-}
-
-a.badge-light:hover, a.badge-light:focus {
- color: #212529;
- background-color: #dae0e5;
-}
-
-a.badge-light:focus, a.badge-light.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.badge-dark {
- color: #fff;
- background-color: #343a40;
-}
-
-a.badge-dark:hover, a.badge-dark:focus {
- color: #fff;
- background-color: #1d2124;
-}
-
-a.badge-dark:focus, a.badge-dark.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-.op-get {
- color: #fff;
- background-color: #61affe;
-}
-
-.op-post {
- color: #fff;
- background-color: #49cc90;
-}
-
-.op-put{
- color: #fff;
- background-color: #fca130;
-}
-
-.op-delete {
- color: #fff;
- background-color: #f93e3e;
-}
-.op-patch{
- color: #fff;
- background-color: #17a2b8;
-}
-.op-all{
- color: #fff;
- background-color: #17a2b8;
-}
-
-
-/* https://www.w3schools.com/howto/howto_js_treeview.asp */
- /* Remove default bullets */
-ul.tree,
-ul.nested
-{
- list-style-type: none;
-}
-
-
-
-/* Style the caret/arrow */
-.caret {
- cursor: pointer;
- user-select: none; /* Prevent text selection */
-}
-
-/* Create the caret/arrow with a unicode, and style it */
-.caret::before {
- content: "\25B6";
- color: black;
- display: inline-block;
- margin-right: 6px;
-}
-
-/* Rotate the caret/arrow icon when clicked on (using JavaScript) */
-.caret-down::before {
- transform: rotate(90deg);
-}
-
-/* Hide the nested list */
-.nested {
- display: none;
-}
-
-/* Show the nested list when the user clicks on the caret/arrow (with JavaScript) */
-.active {
- display: block;
-}
-
-/* https://css-tricks.com/on-target/ */
-:target {
- animation: highlight 1s ease;
- transform: translateX(20px);
-}
-@keyframes highlight {
- 0% { border-left-color: red; }
- 100% { border-left-color: white; }
-}
-section > div {
- border-left: 40px solid white;
- padding: 10px;
- transition: all 0.5s ease;
- padding-right: 50px;
- margin-left: -20px;
-}
\ No newline at end of file
diff --git a/docs/xqdoc/resources/prism/1.29.0/prism.css b/docs/xqdoc/resources/prism/1.29.0/prism.css
deleted file mode 100644
index ba69077..0000000
--- a/docs/xqdoc/resources/prism/1.29.0/prism.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/* PrismJS 1.29.0
-https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+xquery&plugins=line-numbers+toolbar+copy-to-clipboard */
-code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}
-pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}
-div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;z-index:10;top:.3em;right:.2em;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224,224,224,.2);box-shadow:0 2px 0 0 rgba(0,0,0,.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover{color:inherit;text-decoration:none}
diff --git a/docs/xqdoc/resources/prism/1.29.0/prism.js b/docs/xqdoc/resources/prism/1.29.0/prism.js
deleted file mode 100644
index b4132b3..0000000
--- a/docs/xqdoc/resources/prism/1.29.0/prism.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/* PrismJS 1.29.0
-https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+xquery&plugins=line-numbers+toolbar+copy-to-clipboard */
-var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""+i.tag+">"},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
-Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,(function(){return a})),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;
-!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|"+e.source+")*?(?:;|(?=\\s*\\{))"),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism);
-Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};
-Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript;
-!function(e){e.languages.xquery=e.languages.extend("markup",{"xquery-comment":{pattern:/\(:[\s\S]*?:\)/,greedy:!0,alias:"comment"},string:{pattern:/(["'])(?:\1\1|(?!\1)[\s\S])*\1/,greedy:!0},extension:{pattern:/\(#.+?#\)/,alias:"symbol"},variable:/\$[-\w:]+/,axis:{pattern:/(^|[^-])(?:ancestor(?:-or-self)?|attribute|child|descendant(?:-or-self)?|following(?:-sibling)?|parent|preceding(?:-sibling)?|self)(?=::)/,lookbehind:!0,alias:"operator"},"keyword-operator":{pattern:/(^|[^:-])\b(?:and|castable as|div|eq|except|ge|gt|idiv|instance of|intersect|is|le|lt|mod|ne|or|union)\b(?=$|[^:-])/,lookbehind:!0,alias:"operator"},keyword:{pattern:/(^|[^:-])\b(?:as|ascending|at|base-uri|boundary-space|case|cast as|collation|construction|copy-namespaces|declare|default|descending|else|empty (?:greatest|least)|encoding|every|external|for|function|if|import|in|inherit|lax|let|map|module|namespace|no-inherit|no-preserve|option|order(?: by|ed|ing)?|preserve|return|satisfies|schema|some|stable|strict|strip|then|to|treat as|typeswitch|unordered|validate|variable|version|where|xquery)\b(?=$|[^:-])/,lookbehind:!0},function:/[\w-]+(?::[\w-]+)*(?=\s*\()/,"xquery-element":{pattern:/(element\s+)[\w-]+(?::[\w-]+)*/,lookbehind:!0,alias:"tag"},"xquery-attribute":{pattern:/(attribute\s+)[\w-]+(?::[\w-]+)*/,lookbehind:!0,alias:"attr-name"},builtin:{pattern:/(^|[^:-])\b(?:attribute|comment|document|element|processing-instruction|text|xs:(?:ENTITIES|ENTITY|ID|IDREFS?|NCName|NMTOKENS?|NOTATION|Name|QName|anyAtomicType|anyType|anyURI|base64Binary|boolean|byte|date|dateTime|dayTimeDuration|decimal|double|duration|float|gDay|gMonth|gMonthDay|gYear|gYearMonth|hexBinary|int|integer|language|long|negativeInteger|nonNegativeInteger|nonPositiveInteger|normalizedString|positiveInteger|short|string|time|token|unsigned(?:Byte|Int|Long|Short)|untyped(?:Atomic)?|yearMonthDuration))\b(?=$|[^:-])/,lookbehind:!0},number:/\b\d+(?:\.\d+)?(?:E[+-]?\d+)?/,operator:[/[+*=?|@]|\.\.?|:=|!=|<[=<]?|>[=>]?/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}],punctuation:/[[\](){},;:/]/}),e.languages.xquery.tag.pattern=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/,e.languages.xquery.tag.inside["attr-value"].pattern=/=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+)/,e.languages.xquery.tag.inside["attr-value"].inside.punctuation=/^="|"$/,e.languages.xquery.tag.inside["attr-value"].inside.expression={pattern:/\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}/,inside:e.languages.xquery,alias:"language-xquery"};var t=function(e){return"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(t).join("")},n=function(a){for(var o=[],i=0;i0&&o[o.length-1].tagName===t(r.content[0].content[1])&&o.pop():"/>"===r.content[r.content.length-1].content||o.push({tagName:t(r.content[0].content[1]),openedBraces:0}):!(o.length>0&&"punctuation"===r.type&&"{"===r.content)||a[i+1]&&"punctuation"===a[i+1].type&&"{"===a[i+1].content||a[i-1]&&"plain-text"===a[i-1].type&&"{"===a[i-1].content?o.length>0&&o[o.length-1].openedBraces>0&&"punctuation"===r.type&&"}"===r.content?o[o.length-1].openedBraces--:"comment"!==r.type&&(s=!0):o[o.length-1].openedBraces++),(s||"string"==typeof r)&&o.length>0&&0===o[o.length-1].openedBraces){var l=t(r);i0&&("string"==typeof a[i-1]||"plain-text"===a[i-1].type)&&(l=t(a[i-1])+l,a.splice(i-1,1),i--),/^\s+$/.test(l)?a[i]=l:a[i]=new e.Token("plain-text",l,null,l)}r.content&&"string"!=typeof r.content&&n(r.content)}};e.hooks.add("after-tokenize",(function(e){"xquery"===e.language&&n(e.tokens)}))}(Prism);
-!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var e="line-numbers",n=/\n(?!$)/g,t=Prism.plugins.lineNumbers={getLine:function(n,t){if("PRE"===n.tagName&&n.classList.contains(e)){var i=n.querySelector(".line-numbers-rows");if(i){var r=parseInt(n.getAttribute("data-start"),10)||1,s=r+(i.children.length-1);ts&&(t=s);var l=t-r;return i.children[l]}}},resize:function(e){r([e])},assumeViewportIndependence:!0},i=void 0;window.addEventListener("resize",(function(){t.assumeViewportIndependence&&i===window.innerWidth||(i=window.innerWidth,r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers"))))})),Prism.hooks.add("complete",(function(t){if(t.code){var i=t.element,s=i.parentNode;if(s&&/pre/i.test(s.nodeName)&&!i.querySelector(".line-numbers-rows")&&Prism.util.isActive(i,e)){i.classList.remove(e),s.classList.add(e);var l,o=t.code.match(n),a=o?o.length+1:1,u=new Array(a+1).join(" ");(l=document.createElement("span")).setAttribute("aria-hidden","true"),l.className="line-numbers-rows",l.innerHTML=u,s.hasAttribute("data-start")&&(s.style.counterReset="linenumber "+(parseInt(s.getAttribute("data-start"),10)-1)),t.element.appendChild(l),r([s]),Prism.hooks.run("line-numbers",t)}}})),Prism.hooks.add("line-numbers",(function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}))}function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getComputedStyle?getComputedStyle(n):n.currentStyle||null:null)["white-space"];return"pre-wrap"===t||"pre-line"===t}))).length){var t=e.map((function(e){var t=e.querySelector("code"),i=e.querySelector(".line-numbers-rows");if(t&&i){var r=e.querySelector(".line-numbers-sizer"),s=t.textContent.split(n);r||((r=document.createElement("span")).className="line-numbers-sizer",t.appendChild(r)),r.innerHTML="0",r.style.display="block";var l=r.getBoundingClientRect().height;return r.innerHTML="",{element:e,lines:s,lineHeights:[],oneLinerHeight:l,sizer:r}}})).filter(Boolean);t.forEach((function(e){var n=e.sizer,t=e.lines,i=e.lineHeights,r=e.oneLinerHeight;i[t.length-1]=void 0,t.forEach((function(e,t){if(e&&e.length>1){var s=n.appendChild(document.createElement("span"));s.style.display="block",s.textContent=e}else i[t]=r}))})),t.forEach((function(e){for(var n=e.sizer,t=e.lineHeights,i=0,r=0;r A plugin for [svg.js](https://github.com/svgdotjs/svg.js) that enables panzoom for svg elements
-
-## Getting started
-
-```
-npm install @svgdotjs/svg.js @svgdotjs/svg.panzoom.js
-```
-
-Include this plugin after including the svg.js library in your html document.
-
-```
-
-
-```
-
-Or for esm just import it:
-
-```
-import { SVG } from '@svgdotjs/svg.js'
-import '@svgdotjs/svg.panzoom.js'
-```
-
-To enable pan/zoom on an svg:
-
-```js
-// enables panZoom
-var canvas = SVG()
- .addTo('#id')
- .size(1000, 1000)
- .panZoom()
-
-// zoom programatically
-canvas.zoom(lvl, point)
-```
-
-You can configure `panZoom` by passing options to it.
-
-- zoomMin: Minimal zoom level
-- zoomMax: Maximal zoom level
-- zoomFactor: How much is zoomed by one mouse wheel step
-
-This could look like this:
-
-```js
-var canvas = SVG()
- .addTo('#id')
- .size(1000, 1000)
- .panZoom({ zoomMin: 0.5, zoomMax: 20 })
-```
-
-Setting the min and max value will automatically restrict the zoom to the provided level.
-However you are still able to change the zoom out of that bonds by calling `zoom(lvl)` programatically.
-
-On touchable devices a pinchZoom gesture is supported. Min and max values also apply here.
-
-Zooming is animatable, too:
-
-```js
-canvas
- .zoom(1) // uses center of viewport by default
- .animate()
- .zoom(2, { x: 100, y: 100 }) // zoom into specified point
-```
-
-To disable `panZoom` or change its options just call it again with `false` or the new options.
-
-## Options
-
-You can override the default options by passing an object in to the `.panZoom({options})` call.
-
-| Option | Default | Description |
-| ------------ | ---------------- | -------------------------------------------------------------------------------------------------------------- |
-| panning | true | Enable panning |
-| pinchZoom | true | Enable pinch to zoom |
-| wheelZoom | true | Enable mouse wheel zoom |
-| panButton | 0 | Which mouse button to use for pan ([info](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button)) |
-| oneFingerPan | false | Enables the ability to pan with only one finger instead of two for touchdevices |
-| margins | false | An object {top, left, right, bottom} to restrict the pan area towards this side so that at least x user units of the opposite side are still visible |
-| zoomFactor | 2 | How quickly to zoom when using `wheelZoom` |
-| zoomMin | Number.MIN_VALUE | The minimum zoom level |
-| zoomMax | Number.MAX_VALUE | The maximum zoom level |
-| wheelZoomDeltaModeLinePixels | 17 | The multiplier to convert wheel zoom deltaY values from deltaMode=1 (lines) to deltaMode=0 (pixels) |
-| wheelZoomDeltaModeScreenPixels | 53 | The multiplier to convert wheel zoom deltaY values from deltaMode=2 (screen) to deltaMode=0 (pixels) |
-
-### Example:
-
-```js
-draw.panZoom({
- wheelZoom: false,
- zoomMin: 0.5,
- zoomMax: 2
-})
-```
-
-This will disable wheel zooming and set the maximum zoom to 2 or 200% and the minimum zoom to 0.5 or 50%.
-
-## Events
-
-Multiple events are fired doing different actions. This allow you to respond
-to actions and in some cases stop an action via `preventDefault()`.
-
-`zoom` is fired when a mouse wheel event or programmable `zoom()` triggers
-a zoom. This usually doesn't happen on mobile devices, in which case
-`pinchZoomStart` is fired when a zoom happens.
-
-Events fired from SVG.js are [`CustomEvent`s](http://devdocs.io/dom/customevent),
-so the arguments passed from svg.panzoom.js are in in the `.detail` property.
-
-| Event Name | Argument Value | preventDefault support |
-| -------------- | ---------------- | ---------------------- |
-| zoom | `{ lvl, focus }` | YES |
-| panStart | `{ event }` | NO |
-| panEnd | `{ event }` | NO |
-| panning | `{ box }` | YES |
-| pinchZoomStart | `{ event }` | YES |
-| pinchZoomEnd | `{ event }` | NO |
-
-Where `lvl` is the new zoom level,
-[`focus`](https://svgjs.com/docs/3.0/classes/#svg-point) is th point of zoom, [`box`](https://svgjs.com/docs/3.0/classes/#svg-box) is the new calculated viewbox
-and event is the event that triggered the action.
-
-An example of stopping a pinch-zoom action:
-
-```js
-var canvas = SVG()
- .addTo('#id')
- .size(1000, 1000)
- .panZoom()
-
-canvas.on('pinchZoomStart', function (ev) {
- ev.preventDefault()
- // ...
-})
-```
diff --git a/docs/xqdoc/resources/svgdotjs/svg.panzoom.js b/docs/xqdoc/resources/svgdotjs/svg.panzoom.js
deleted file mode 100644
index fb4d286..0000000
--- a/docs/xqdoc/resources/svgdotjs/svg.panzoom.js
+++ /dev/null
@@ -1,372 +0,0 @@
-/*!
-* @svgdotjs/svg.panzoom.js - A plugin for svg.js that enables panzoom for viewport elements
-* @version 2.1.2
-* https://github.com/svgdotjs/svg.panzoom.js#readme
-*
-* @copyright undefined
-* @license MIT
-*
-* BUILT: Thu Jul 22 2021 14:51:35 GMT+0200 (Mitteleuropäische Sommerzeit)
-*/;
-(function (svg_js) {
- 'use strict';
-
- var normalizeEvent = function normalizeEvent(ev) {
- return ev.touches || [{
- clientX: ev.clientX,
- clientY: ev.clientY
- }];
- };
-
- svg_js.extend(svg_js.Svg, {
- panZoom: function panZoom(options) {
- var _options,
- _options$zoomFactor,
- _options$zoomMin,
- _options$zoomMax,
- _options$wheelZoom,
- _options$pinchZoom,
- _options$panning,
- _options$panButton,
- _options$oneFingerPan,
- _options$margins,
- _options$wheelZoomDel,
- _options$wheelZoomDel2,
- _this = this;
-
- this.off('.panZoom'); // when called with false, disable panZoom
-
- if (options === false) return this;
- options = (_options = options) != null ? _options : {};
- var zoomFactor = (_options$zoomFactor = options.zoomFactor) != null ? _options$zoomFactor : 2;
- var zoomMin = (_options$zoomMin = options.zoomMin) != null ? _options$zoomMin : Number.MIN_VALUE;
- var zoomMax = (_options$zoomMax = options.zoomMax) != null ? _options$zoomMax : Number.MAX_VALUE;
- var doWheelZoom = (_options$wheelZoom = options.wheelZoom) != null ? _options$wheelZoom : true;
- var doPinchZoom = (_options$pinchZoom = options.pinchZoom) != null ? _options$pinchZoom : true;
- var doPanning = (_options$panning = options.panning) != null ? _options$panning : true;
- var panButton = (_options$panButton = options.panButton) != null ? _options$panButton : 0;
- var oneFingerPan = (_options$oneFingerPan = options.oneFingerPan) != null ? _options$oneFingerPan : false;
- var margins = (_options$margins = options.margins) != null ? _options$margins : false;
- var wheelZoomDeltaModeLinePixels = (_options$wheelZoomDel = options.wheelZoomDeltaModeLinePixels) != null ? _options$wheelZoomDel : 17;
- var wheelZoomDeltaModeScreenPixels = (_options$wheelZoomDel2 = options.wheelZoomDeltaModeScreenPixels) != null ? _options$wheelZoomDel2 : 53;
- var lastP;
- var lastTouches;
- var zoomInProgress = false;
- var viewbox = this.viewbox();
-
- var restrictToMargins = function restrictToMargins(box) {
- if (!margins) return box;
- var top = margins.top,
- left = margins.left,
- bottom = margins.bottom,
- right = margins.right;
-
- var _this$attr = _this.attr(['width', 'height']),
- width = _this$attr.width,
- height = _this$attr.height;
-
- var preserveAspectRatio = _this.node.preserveAspectRatio.baseVal; // The current viewport (exactly what is shown on the screen, what we ultimately want to restrict)
- // is not always exactly the same as current viewbox. They are different when the viewbox aspectRatio and the svg aspectRatio
- // are different and preserveAspectRatio is not "none". These offsets represent the difference in user coordinates
- // between the side of the viewbox and the side of the viewport.
-
- var viewportLeftOffset = 0;
- var viewportRightOffset = 0;
- var viewportTopOffset = 0;
- var viewportBottomOffset = 0; // preserveAspectRatio none has no offsets
-
- if (preserveAspectRatio.align !== preserveAspectRatio.SVG_PRESERVEASPECTRATIO_NONE) {
- var svgAspectRatio = width / height;
- var viewboxAspectRatio = viewbox.width / viewbox.height; // when aspectRatios are the same, there are no offsets
-
- if (viewboxAspectRatio !== svgAspectRatio) {
- // aspectRatio unknown is like meet because that's the default
- var isMeet = preserveAspectRatio.meetOrSlice !== preserveAspectRatio.SVG_MEETORSLICE_SLICE;
- var changedAxis = svgAspectRatio > viewboxAspectRatio ? 'width' : 'height';
- var isWidth = changedAxis === 'width';
- var changeHorizontal = isMeet && isWidth || !isMeet && !isWidth;
- var ratio = changeHorizontal ? svgAspectRatio / viewboxAspectRatio : viewboxAspectRatio / svgAspectRatio;
- var offset = box[changedAxis] - box[changedAxis] * ratio;
-
- if (changeHorizontal) {
- if (preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMIN || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMAX) {
- viewportLeftOffset = offset / 2;
- viewportRightOffset = -offset / 2;
- } else if (preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMIN || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMID || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMAX) {
- viewportRightOffset = -offset;
- } else if (preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMID || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMAX) {
- viewportLeftOffset = offset;
- }
- } else {
- if (preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMID || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMID) {
- viewportTopOffset = offset / 2;
- viewportBottomOffset = -offset / 2;
- } else if (preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMIN || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMIN || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN) {
- viewportBottomOffset = -offset;
- } else if (preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMAX || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMAX || preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMAX) {
- viewportTopOffset = offset;
- }
- }
- }
- } // when box.x == leftLimit, the image is panned to the left,
- // i.e the current box is to the right of the initial viewbox,
- // and only the right part of the initial image is visible, i.e.
- // the right side of the initial viewbox minus left margin (viewbox.x+viewbox.width-left)
- // is aligned with the left side of the viewport (box.x + viewportLeftOffset):
- // viewbox.width + viewbox.x - left = box.x + viewportLeftOffset
- // viewbox.width + viewbox.x - left - viewportLeftOffset = box.x (= leftLimit)
-
-
- var leftLimit = viewbox.width + viewbox.x - left - viewportLeftOffset; // when box.x == rightLimit, the image is panned to the right,
- // i.e the current box is to the left of the initial viewbox
- // and only the left part of the initial image is visible, i.e
- // the left side of the initial viewbox plus right margin (viewbox.x + right)
- // is aligned with the right side of the viewport (box.x + box.width + viewportRightOffset)
- // viewbox.x + right = box.x + box.width + viewportRightOffset
- // viewbox.x + right - box.width - viewportRightOffset = box.x (= rightLimit)
-
- var rightLimit = viewbox.x + right - box.width - viewportRightOffset; // same with top and bottom
-
- var topLimit = viewbox.height + viewbox.y - top - viewportTopOffset;
- var bottomLimit = viewbox.y + bottom - box.height - viewportBottomOffset;
- box.x = Math.min(leftLimit, Math.max(rightLimit, box.x)); // enforce rightLimit <= box.x <= leftLimit
-
- box.y = Math.min(topLimit, Math.max(bottomLimit, box.y)); // enforce bottomLimit <= box.y <= topLimit
-
- return box;
- };
-
- var wheelZoom = function wheelZoom(ev) {
- ev.preventDefault(); // When wheeling on a mouse,
- // - chrome by default uses deltaY = 53, deltaMode = 0 (pixel)
- // - firefox by default uses deltaY = 3, deltaMode = 1 (line)
- // - chrome and firefox on windows after configuring "One screen at a time"
- // use deltaY = 1, deltaMode = 2 (screen)
- //
- // Note that when when wheeling on a touchpad, deltaY depends on how fast
- // you swipe, but the deltaMode is still different between the browsers.
- //
- // Normalize everything so that zooming speed is approximately the same in all cases
-
- var normalizedPixelDeltaY;
-
- switch (ev.deltaMode) {
- case 1:
- normalizedPixelDeltaY = ev.deltaY * wheelZoomDeltaModeLinePixels;
- break;
-
- case 2:
- normalizedPixelDeltaY = ev.deltaY * wheelZoomDeltaModeScreenPixels;
- break;
-
- default:
- // 0 (already pixels) or new mode (avoid crashing)
- normalizedPixelDeltaY = ev.deltaY;
- break;
- }
-
- var lvl = Math.pow(1 + zoomFactor, -1 * normalizedPixelDeltaY / 100) * this.zoom();
- var p = this.point(ev.clientX, ev.clientY);
-
- if (lvl > zoomMax) {
- lvl = zoomMax;
- }
-
- if (lvl < zoomMin) {
- lvl = zoomMin;
- }
-
- if (this.dispatch('zoom', {
- level: lvl,
- focus: p
- }).defaultPrevented) {
- return this;
- }
-
- this.zoom(lvl, p);
-
- if (margins) {
- var box = restrictToMargins(this.viewbox());
- this.viewbox(box);
- }
- };
-
- var pinchZoomStart = function pinchZoomStart(ev) {
- lastTouches = normalizeEvent(ev); // Start panning in case only one touch is found
-
- if (lastTouches.length < 2) {
- if (doPanning && oneFingerPan) {
- panStart.call(this, ev);
- }
-
- return;
- } // Stop panning for more than one touch
-
-
- if (doPanning && oneFingerPan) {
- panStop.call(this, ev);
- } // We call it so late, so the user is still able to scroll / reload the page via gesture
- // In case oneFingerPan is not active
-
-
- ev.preventDefault();
-
- if (this.dispatch('pinchZoomStart', {
- event: ev
- }).defaultPrevented) {
- return;
- }
-
- this.off('touchstart.panZoom', pinchZoomStart);
- zoomInProgress = true;
- svg_js.on(document, 'touchmove.panZoom', pinchZoom, this, {
- passive: false
- });
- svg_js.on(document, 'touchend.panZoom', pinchZoomStop, this, {
- passive: false
- });
- };
-
- var pinchZoomStop = function pinchZoomStop(ev) {
- ev.preventDefault();
- var currentTouches = normalizeEvent(ev);
-
- if (currentTouches.length > 1) {
- return;
- }
-
- zoomInProgress = false;
- this.dispatch('pinchZoomEnd', {
- event: ev
- });
- svg_js.off(document, 'touchmove.panZoom', pinchZoom);
- svg_js.off(document, 'touchend.panZoom', pinchZoomStop);
- this.on('touchstart.panZoom', pinchZoomStart);
-
- if (currentTouches.length && doPanning && oneFingerPan) {
- panStart.call(this, ev);
- }
- };
-
- var pinchZoom = function pinchZoom(ev) {
- ev.preventDefault();
- var currentTouches = normalizeEvent(ev);
- var zoom = this.zoom(); // Distance Formula
-
- var lastDelta = Math.sqrt(Math.pow(lastTouches[0].clientX - lastTouches[1].clientX, 2) + Math.pow(lastTouches[0].clientY - lastTouches[1].clientY, 2));
- var currentDelta = Math.sqrt(Math.pow(currentTouches[0].clientX - currentTouches[1].clientX, 2) + Math.pow(currentTouches[0].clientY - currentTouches[1].clientY, 2));
- var zoomAmount = lastDelta / currentDelta;
-
- if (zoom < zoomMin && zoomAmount > 1 || zoom > zoomMax && zoomAmount < 1) {
- zoomAmount = 1;
- }
-
- var currentFocus = {
- x: currentTouches[0].clientX + 0.5 * (currentTouches[1].clientX - currentTouches[0].clientX),
- y: currentTouches[0].clientY + 0.5 * (currentTouches[1].clientY - currentTouches[0].clientY)
- };
- var lastFocus = {
- x: lastTouches[0].clientX + 0.5 * (lastTouches[1].clientX - lastTouches[0].clientX),
- y: lastTouches[0].clientY + 0.5 * (lastTouches[1].clientY - lastTouches[0].clientY)
- };
- var p = this.point(currentFocus.x, currentFocus.y);
- var focusP = this.point(2 * currentFocus.x - lastFocus.x, 2 * currentFocus.y - lastFocus.y);
- var box = new svg_js.Box(this.viewbox()).transform(new svg_js.Matrix().translate(-focusP.x, -focusP.y).scale(zoomAmount, 0, 0).translate(p.x, p.y));
- restrictToMargins(box);
- this.viewbox(box);
- lastTouches = currentTouches;
- this.dispatch('zoom', {
- box: box,
- focus: focusP
- });
- };
-
- var panStart = function panStart(ev) {
- var isMouse = ev.type.indexOf('mouse') > -1; // In case panStart is called with touch, ev.button is undefined
-
- if (isMouse && ev.button !== panButton && ev.which !== panButton + 1) {
- return;
- }
-
- ev.preventDefault();
- this.off('mousedown.panZoom', panStart);
- lastTouches = normalizeEvent(ev);
- if (zoomInProgress) return;
- this.dispatch('panStart', {
- event: ev
- });
- lastP = {
- x: lastTouches[0].clientX,
- y: lastTouches[0].clientY
- };
- svg_js.on(document, 'touchmove.panZoom mousemove.panZoom', panning, this, {
- passive: false
- });
- svg_js.on(document, 'touchend.panZoom mouseup.panZoom', panStop, this, {
- passive: false
- });
- };
-
- var panStop = function panStop(ev) {
- ev.preventDefault();
- svg_js.off(document, 'touchmove.panZoom mousemove.panZoom', panning);
- svg_js.off(document, 'touchend.panZoom mouseup.panZoom', panStop);
- this.on('mousedown.panZoom', panStart);
- this.dispatch('panEnd', {
- event: ev
- });
- };
-
- var panning = function panning(ev) {
- ev.preventDefault();
- var currentTouches = normalizeEvent(ev);
- var currentP = {
- x: currentTouches[0].clientX,
- y: currentTouches[0].clientY
- };
- var p1 = this.point(currentP.x, currentP.y);
- var p2 = this.point(lastP.x, lastP.y);
- var deltaP = [p2.x - p1.x, p2.y - p1.y];
-
- if (!deltaP[0] && !deltaP[1]) {
- return;
- }
-
- var box = new svg_js.Box(this.viewbox()).transform(new svg_js.Matrix().translate(deltaP[0], deltaP[1]));
- lastP = currentP;
- restrictToMargins(box);
-
- if (this.dispatch('panning', {
- box: box,
- event: ev
- }).defaultPrevented) {
- return;
- }
-
- this.viewbox(box);
- };
-
- if (doWheelZoom) {
- this.on('wheel.panZoom', wheelZoom, this, {
- passive: false
- });
- }
-
- if (doPinchZoom) {
- this.on('touchstart.panZoom', pinchZoomStart, this, {
- passive: false
- });
- }
-
- if (doPanning) {
- this.on('mousedown.panZoom', panStart, this, {
- passive: false
- });
- }
-
- return this;
- }
- });
-
-}(SVG));
-//# sourceMappingURL=svg.panzoom.js.map
diff --git a/docs/xqdoc/resources/svgdotjs/svg.panzoom.js.map b/docs/xqdoc/resources/svgdotjs/svg.panzoom.js.map
deleted file mode 100644
index 5cb9367..0000000
--- a/docs/xqdoc/resources/svgdotjs/svg.panzoom.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"svg.panzoom.js","sources":["../src/svg.panzoom.js"],"sourcesContent":["import { Svg, on, off, extend, Matrix, Box } from '@svgdotjs/svg.js'\n\nconst normalizeEvent = ev =>\n ev.touches || [{ clientX: ev.clientX, clientY: ev.clientY }]\n\nextend(Svg, {\n panZoom (options) {\n this.off('.panZoom')\n\n // when called with false, disable panZoom\n if (options === false) return this\n\n options = options ?? {}\n const zoomFactor = options.zoomFactor ?? 2\n const zoomMin = options.zoomMin ?? Number.MIN_VALUE\n const zoomMax = options.zoomMax ?? Number.MAX_VALUE\n const doWheelZoom = options.wheelZoom ?? true\n const doPinchZoom = options.pinchZoom ?? true\n const doPanning = options.panning ?? true\n const panButton = options.panButton ?? 0\n const oneFingerPan = options.oneFingerPan ?? false\n const margins = options.margins ?? false\n const wheelZoomDeltaModeLinePixels = options.wheelZoomDeltaModeLinePixels ?? 17\n const wheelZoomDeltaModeScreenPixels = options.wheelZoomDeltaModeScreenPixels ?? 53\n\n let lastP\n let lastTouches\n let zoomInProgress = false\n\n const viewbox = this.viewbox()\n\n const restrictToMargins = box => {\n if (!margins) return box\n const { top, left, bottom, right } = margins\n\n const { width, height } = this.attr(['width', 'height'])\n const preserveAspectRatio = this.node.preserveAspectRatio.baseVal\n\n // The current viewport (exactly what is shown on the screen, what we ultimately want to restrict)\n // is not always exactly the same as current viewbox. They are different when the viewbox aspectRatio and the svg aspectRatio\n // are different and preserveAspectRatio is not \"none\". These offsets represent the difference in user coordinates\n // between the side of the viewbox and the side of the viewport.\n let viewportLeftOffset = 0\n let viewportRightOffset = 0\n let viewportTopOffset = 0\n let viewportBottomOffset = 0\n\n // preserveAspectRatio none has no offsets\n if (preserveAspectRatio.align !== preserveAspectRatio.SVG_PRESERVEASPECTRATIO_NONE) {\n const svgAspectRatio = width / height\n const viewboxAspectRatio = viewbox.width / viewbox.height\n // when aspectRatios are the same, there are no offsets\n if (viewboxAspectRatio !== svgAspectRatio) {\n // aspectRatio unknown is like meet because that's the default\n const isMeet = preserveAspectRatio.meetOrSlice !== preserveAspectRatio.SVG_MEETORSLICE_SLICE\n const changedAxis = svgAspectRatio > viewboxAspectRatio ? 'width' : 'height'\n const isWidth = changedAxis === 'width'\n const changeHorizontal = (isMeet && isWidth) || (!isMeet && !isWidth)\n const ratio = changeHorizontal\n ? svgAspectRatio / viewboxAspectRatio\n : viewboxAspectRatio / svgAspectRatio\n\n const offset = box[changedAxis] - box[changedAxis] * ratio\n if (changeHorizontal) {\n if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMAX) {\n viewportLeftOffset = offset / 2\n viewportRightOffset = -offset / 2\n } else if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMAX) {\n viewportRightOffset = -offset\n } else if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMAX) {\n viewportLeftOffset = offset\n }\n } else {\n if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMID) {\n viewportTopOffset = offset / 2\n viewportBottomOffset = -offset / 2\n } else if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN) {\n viewportBottomOffset = -offset\n } else if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMAX ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMAX ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMAX) {\n viewportTopOffset = offset\n }\n }\n\n }\n }\n\n // when box.x == leftLimit, the image is panned to the left,\n // i.e the current box is to the right of the initial viewbox,\n // and only the right part of the initial image is visible, i.e.\n // the right side of the initial viewbox minus left margin (viewbox.x+viewbox.width-left)\n // is aligned with the left side of the viewport (box.x + viewportLeftOffset):\n // viewbox.width + viewbox.x - left = box.x + viewportLeftOffset\n // viewbox.width + viewbox.x - left - viewportLeftOffset = box.x (= leftLimit)\n const leftLimit = viewbox.width + viewbox.x - left - viewportLeftOffset\n // when box.x == rightLimit, the image is panned to the right,\n // i.e the current box is to the left of the initial viewbox\n // and only the left part of the initial image is visible, i.e\n // the left side of the initial viewbox plus right margin (viewbox.x + right)\n // is aligned with the right side of the viewport (box.x + box.width + viewportRightOffset)\n // viewbox.x + right = box.x + box.width + viewportRightOffset\n // viewbox.x + right - box.width - viewportRightOffset = box.x (= rightLimit)\n const rightLimit = viewbox.x + right - box.width - viewportRightOffset\n // same with top and bottom\n const topLimit = viewbox.height + viewbox.y - top - viewportTopOffset\n const bottomLimit = viewbox.y + bottom - box.height - viewportBottomOffset\n\n box.x = Math.min(leftLimit, Math.max(rightLimit, box.x)) // enforce rightLimit <= box.x <= leftLimit\n box.y = Math.min(topLimit, Math.max(bottomLimit, box.y)) // enforce bottomLimit <= box.y <= topLimit\n return box\n }\n\n const wheelZoom = function (ev) {\n ev.preventDefault()\n\n // When wheeling on a mouse,\n // - chrome by default uses deltaY = 53, deltaMode = 0 (pixel)\n // - firefox by default uses deltaY = 3, deltaMode = 1 (line)\n // - chrome and firefox on windows after configuring \"One screen at a time\"\n // use deltaY = 1, deltaMode = 2 (screen)\n //\n // Note that when when wheeling on a touchpad, deltaY depends on how fast\n // you swipe, but the deltaMode is still different between the browsers.\n //\n // Normalize everything so that zooming speed is approximately the same in all cases\n let normalizedPixelDeltaY\n switch (ev.deltaMode) {\n case 1:\n normalizedPixelDeltaY = ev.deltaY * wheelZoomDeltaModeLinePixels\n break\n case 2:\n normalizedPixelDeltaY = ev.deltaY * wheelZoomDeltaModeScreenPixels\n break\n default:\n // 0 (already pixels) or new mode (avoid crashing)\n normalizedPixelDeltaY = ev.deltaY\n break\n }\n\n let lvl = Math.pow(1 + zoomFactor, (-1 * normalizedPixelDeltaY) / 100) * this.zoom()\n const p = this.point(ev.clientX, ev.clientY)\n\n if (lvl > zoomMax) {\n lvl = zoomMax\n }\n\n if (lvl < zoomMin) {\n lvl = zoomMin\n }\n\n if (this.dispatch('zoom', { level: lvl, focus: p }).defaultPrevented) {\n return this\n }\n\n this.zoom(lvl, p)\n\n if (margins) {\n const box = restrictToMargins(this.viewbox())\n this.viewbox(box)\n }\n }\n\n const pinchZoomStart = function (ev) {\n lastTouches = normalizeEvent(ev)\n\n // Start panning in case only one touch is found\n if (lastTouches.length < 2) {\n if (doPanning && oneFingerPan) {\n panStart.call(this, ev)\n }\n return\n }\n\n // Stop panning for more than one touch\n if (doPanning && oneFingerPan) {\n panStop.call(this, ev)\n }\n\n // We call it so late, so the user is still able to scroll / reload the page via gesture\n // In case oneFingerPan is not active\n ev.preventDefault()\n\n if (this.dispatch('pinchZoomStart', { event: ev }).defaultPrevented) {\n return\n }\n\n this.off('touchstart.panZoom', pinchZoomStart)\n\n zoomInProgress = true\n on(document, 'touchmove.panZoom', pinchZoom, this, { passive: false })\n on(document, 'touchend.panZoom', pinchZoomStop, this, { passive: false })\n }\n\n const pinchZoomStop = function (ev) {\n ev.preventDefault()\n\n const currentTouches = normalizeEvent(ev)\n if (currentTouches.length > 1) {\n return\n }\n\n zoomInProgress = false\n\n this.dispatch('pinchZoomEnd', { event: ev })\n\n off(document, 'touchmove.panZoom', pinchZoom)\n off(document, 'touchend.panZoom', pinchZoomStop)\n this.on('touchstart.panZoom', pinchZoomStart)\n\n if (currentTouches.length && doPanning && oneFingerPan) {\n panStart.call(this, ev)\n }\n }\n\n const pinchZoom = function (ev) {\n ev.preventDefault()\n\n const currentTouches = normalizeEvent(ev)\n const zoom = this.zoom()\n\n // Distance Formula\n const lastDelta = Math.sqrt(\n Math.pow(lastTouches[0].clientX - lastTouches[1].clientX, 2) +\n Math.pow(lastTouches[0].clientY - lastTouches[1].clientY, 2)\n )\n\n const currentDelta = Math.sqrt(\n Math.pow(currentTouches[0].clientX - currentTouches[1].clientX, 2) +\n Math.pow(currentTouches[0].clientY - currentTouches[1].clientY, 2)\n )\n\n let zoomAmount = lastDelta / currentDelta\n\n if (\n (zoom < zoomMin && zoomAmount > 1) ||\n (zoom > zoomMax && zoomAmount < 1)\n ) {\n zoomAmount = 1\n }\n\n const currentFocus = {\n x:\n currentTouches[0].clientX +\n 0.5 * (currentTouches[1].clientX - currentTouches[0].clientX),\n y:\n currentTouches[0].clientY +\n 0.5 * (currentTouches[1].clientY - currentTouches[0].clientY)\n }\n\n const lastFocus = {\n x:\n lastTouches[0].clientX +\n 0.5 * (lastTouches[1].clientX - lastTouches[0].clientX),\n y:\n lastTouches[0].clientY +\n 0.5 * (lastTouches[1].clientY - lastTouches[0].clientY)\n }\n\n const p = this.point(currentFocus.x, currentFocus.y)\n const focusP = this.point(\n 2 * currentFocus.x - lastFocus.x,\n 2 * currentFocus.y - lastFocus.y\n )\n const box = new Box(this.viewbox()).transform(\n new Matrix()\n .translate(-focusP.x, -focusP.y)\n .scale(zoomAmount, 0, 0)\n .translate(p.x, p.y)\n )\n\n restrictToMargins(box)\n this.viewbox(box)\n\n lastTouches = currentTouches\n\n this.dispatch('zoom', { box: box, focus: focusP })\n }\n\n const panStart = function (ev) {\n const isMouse = ev.type.indexOf('mouse') > -1\n\n // In case panStart is called with touch, ev.button is undefined\n if (isMouse && ev.button !== panButton && ev.which !== panButton + 1) {\n return\n }\n\n ev.preventDefault()\n\n this.off('mousedown.panZoom', panStart)\n\n lastTouches = normalizeEvent(ev)\n\n if (zoomInProgress) return\n\n this.dispatch('panStart', { event: ev })\n\n lastP = { x: lastTouches[0].clientX, y: lastTouches[0].clientY }\n\n on(document, 'touchmove.panZoom mousemove.panZoom', panning, this, {\n passive: false\n })\n\n on(document, 'touchend.panZoom mouseup.panZoom', panStop, this, {\n passive: false\n })\n }\n\n const panStop = function (ev) {\n ev.preventDefault()\n\n off(document, 'touchmove.panZoom mousemove.panZoom', panning)\n off(document, 'touchend.panZoom mouseup.panZoom', panStop)\n this.on('mousedown.panZoom', panStart)\n\n this.dispatch('panEnd', { event: ev })\n }\n\n const panning = function (ev) {\n ev.preventDefault()\n\n const currentTouches = normalizeEvent(ev)\n\n const currentP = {\n x: currentTouches[0].clientX,\n y: currentTouches[0].clientY\n }\n\n const p1 = this.point(currentP.x, currentP.y)\n\n const p2 = this.point(lastP.x, lastP.y)\n\n const deltaP = [p2.x - p1.x, p2.y - p1.y]\n\n if (!deltaP[0] && !deltaP[1]) {\n return\n }\n\n const box = new Box(this.viewbox()).transform(\n new Matrix().translate(deltaP[0], deltaP[1])\n )\n\n lastP = currentP\n\n restrictToMargins(box)\n\n if (this.dispatch('panning', { box, event: ev }).defaultPrevented) {\n return\n }\n\n this.viewbox(box)\n }\n\n if (doWheelZoom) {\n this.on('wheel.panZoom', wheelZoom, this, { passive: false })\n }\n\n if (doPinchZoom) {\n this.on('touchstart.panZoom', pinchZoomStart, this, { passive: false })\n }\n\n if (doPanning) {\n this.on('mousedown.panZoom', panStart, this, { passive: false })\n }\n\n return this\n }\n})\n"],"names":["normalizeEvent","ev","touches","clientX","clientY","extend","Svg","panZoom","options","off","zoomFactor","zoomMin","Number","MIN_VALUE","zoomMax","MAX_VALUE","doWheelZoom","wheelZoom","doPinchZoom","pinchZoom","doPanning","panning","panButton","oneFingerPan","margins","wheelZoomDeltaModeLinePixels","wheelZoomDeltaModeScreenPixels","lastP","lastTouches","zoomInProgress","viewbox","restrictToMargins","box","top","left","bottom","right","attr","width","height","preserveAspectRatio","node","baseVal","viewportLeftOffset","viewportRightOffset","viewportTopOffset","viewportBottomOffset","align","SVG_PRESERVEASPECTRATIO_NONE","svgAspectRatio","viewboxAspectRatio","isMeet","meetOrSlice","SVG_MEETORSLICE_SLICE","changedAxis","isWidth","changeHorizontal","ratio","offset","SVG_PRESERVEASPECTRATIO_XMIDYMIN","SVG_PRESERVEASPECTRATIO_XMIDYMID","SVG_PRESERVEASPECTRATIO_XMIDYMAX","SVG_PRESERVEASPECTRATIO_XMINYMIN","SVG_PRESERVEASPECTRATIO_XMINYMID","SVG_PRESERVEASPECTRATIO_XMINYMAX","SVG_PRESERVEASPECTRATIO_XMAXYMIN","SVG_PRESERVEASPECTRATIO_XMAXYMID","SVG_PRESERVEASPECTRATIO_XMAXYMAX","leftLimit","x","rightLimit","topLimit","y","bottomLimit","Math","min","max","preventDefault","normalizedPixelDeltaY","deltaMode","deltaY","lvl","pow","zoom","p","point","dispatch","level","focus","defaultPrevented","pinchZoomStart","length","panStart","call","panStop","event","on","document","passive","pinchZoomStop","currentTouches","lastDelta","sqrt","currentDelta","zoomAmount","currentFocus","lastFocus","focusP","Box","transform","Matrix","translate","scale","isMouse","type","indexOf","button","which","currentP","p1","p2","deltaP"],"mappings":"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"}
\ No newline at end of file
diff --git a/docs/xqdoc/resources/svgdotjs/svg.panzoom.min.js b/docs/xqdoc/resources/svgdotjs/svg.panzoom.min.js
deleted file mode 100644
index 758bed0..0000000
--- a/docs/xqdoc/resources/svgdotjs/svg.panzoom.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! @svgdotjs/svg.panzoom.js v2.1.2 MIT*/;
-!function(D){"use strict";function G(t){return t.touches||[{clientX:t.clientX,clientY:t.clientY}]}D.extend(D.Svg,{panZoom:function(t){var n,e,i,o,a,l,h,s,c,E,u,V=this;if(this.off(".panZoom"),!1===t)return this;function m(t){if(!_)return t;var n=_.top,e=_.left,i=_.bottom,o=_.right,a=V.attr(["width","height"]),l=a.width,h=a.height,s=V.node.preserveAspectRatio.baseVal,c=0,E=0,u=0,m=0;if(s.align!==s.SVG_PRESERVEASPECTRATIO_NONE){var p=l/h,r=x.width/x.height;if(r!=p){var S=s.meetOrSlice!==s.SVG_MEETORSLICE_SLICE,R=r\n ev.touches || [{ clientX: ev.clientX, clientY: ev.clientY }]\n\nextend(Svg, {\n panZoom (options) {\n this.off('.panZoom')\n\n // when called with false, disable panZoom\n if (options === false) return this\n\n options = options ?? {}\n const zoomFactor = options.zoomFactor ?? 2\n const zoomMin = options.zoomMin ?? Number.MIN_VALUE\n const zoomMax = options.zoomMax ?? Number.MAX_VALUE\n const doWheelZoom = options.wheelZoom ?? true\n const doPinchZoom = options.pinchZoom ?? true\n const doPanning = options.panning ?? true\n const panButton = options.panButton ?? 0\n const oneFingerPan = options.oneFingerPan ?? false\n const margins = options.margins ?? false\n const wheelZoomDeltaModeLinePixels = options.wheelZoomDeltaModeLinePixels ?? 17\n const wheelZoomDeltaModeScreenPixels = options.wheelZoomDeltaModeScreenPixels ?? 53\n\n let lastP\n let lastTouches\n let zoomInProgress = false\n\n const viewbox = this.viewbox()\n\n const restrictToMargins = box => {\n if (!margins) return box\n const { top, left, bottom, right } = margins\n\n const { width, height } = this.attr(['width', 'height'])\n const preserveAspectRatio = this.node.preserveAspectRatio.baseVal\n\n // The current viewport (exactly what is shown on the screen, what we ultimately want to restrict)\n // is not always exactly the same as current viewbox. They are different when the viewbox aspectRatio and the svg aspectRatio\n // are different and preserveAspectRatio is not \"none\". These offsets represent the difference in user coordinates\n // between the side of the viewbox and the side of the viewport.\n let viewportLeftOffset = 0\n let viewportRightOffset = 0\n let viewportTopOffset = 0\n let viewportBottomOffset = 0\n\n // preserveAspectRatio none has no offsets\n if (preserveAspectRatio.align !== preserveAspectRatio.SVG_PRESERVEASPECTRATIO_NONE) {\n const svgAspectRatio = width / height\n const viewboxAspectRatio = viewbox.width / viewbox.height\n // when aspectRatios are the same, there are no offsets\n if (viewboxAspectRatio !== svgAspectRatio) {\n // aspectRatio unknown is like meet because that's the default\n const isMeet = preserveAspectRatio.meetOrSlice !== preserveAspectRatio.SVG_MEETORSLICE_SLICE\n const changedAxis = svgAspectRatio > viewboxAspectRatio ? 'width' : 'height'\n const isWidth = changedAxis === 'width'\n const changeHorizontal = (isMeet && isWidth) || (!isMeet && !isWidth)\n const ratio = changeHorizontal\n ? svgAspectRatio / viewboxAspectRatio\n : viewboxAspectRatio / svgAspectRatio\n\n const offset = box[changedAxis] - box[changedAxis] * ratio\n if (changeHorizontal) {\n if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMAX) {\n viewportLeftOffset = offset / 2\n viewportRightOffset = -offset / 2\n } else if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMAX) {\n viewportRightOffset = -offset\n } else if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMAX) {\n viewportLeftOffset = offset\n }\n } else {\n if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMID) {\n viewportTopOffset = offset / 2\n viewportBottomOffset = -offset / 2\n } else if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMIN ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN) {\n viewportBottomOffset = -offset\n } else if (\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMAX ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMAX ||\n preserveAspectRatio.align === preserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMAX) {\n viewportTopOffset = offset\n }\n }\n\n }\n }\n\n // when box.x == leftLimit, the image is panned to the left,\n // i.e the current box is to the right of the initial viewbox,\n // and only the right part of the initial image is visible, i.e.\n // the right side of the initial viewbox minus left margin (viewbox.x+viewbox.width-left)\n // is aligned with the left side of the viewport (box.x + viewportLeftOffset):\n // viewbox.width + viewbox.x - left = box.x + viewportLeftOffset\n // viewbox.width + viewbox.x - left - viewportLeftOffset = box.x (= leftLimit)\n const leftLimit = viewbox.width + viewbox.x - left - viewportLeftOffset\n // when box.x == rightLimit, the image is panned to the right,\n // i.e the current box is to the left of the initial viewbox\n // and only the left part of the initial image is visible, i.e\n // the left side of the initial viewbox plus right margin (viewbox.x + right)\n // is aligned with the right side of the viewport (box.x + box.width + viewportRightOffset)\n // viewbox.x + right = box.x + box.width + viewportRightOffset\n // viewbox.x + right - box.width - viewportRightOffset = box.x (= rightLimit)\n const rightLimit = viewbox.x + right - box.width - viewportRightOffset\n // same with top and bottom\n const topLimit = viewbox.height + viewbox.y - top - viewportTopOffset\n const bottomLimit = viewbox.y + bottom - box.height - viewportBottomOffset\n\n box.x = Math.min(leftLimit, Math.max(rightLimit, box.x)) // enforce rightLimit <= box.x <= leftLimit\n box.y = Math.min(topLimit, Math.max(bottomLimit, box.y)) // enforce bottomLimit <= box.y <= topLimit\n return box\n }\n\n const wheelZoom = function (ev) {\n ev.preventDefault()\n\n // When wheeling on a mouse,\n // - chrome by default uses deltaY = 53, deltaMode = 0 (pixel)\n // - firefox by default uses deltaY = 3, deltaMode = 1 (line)\n // - chrome and firefox on windows after configuring \"One screen at a time\"\n // use deltaY = 1, deltaMode = 2 (screen)\n //\n // Note that when when wheeling on a touchpad, deltaY depends on how fast\n // you swipe, but the deltaMode is still different between the browsers.\n //\n // Normalize everything so that zooming speed is approximately the same in all cases\n let normalizedPixelDeltaY\n switch (ev.deltaMode) {\n case 1:\n normalizedPixelDeltaY = ev.deltaY * wheelZoomDeltaModeLinePixels\n break\n case 2:\n normalizedPixelDeltaY = ev.deltaY * wheelZoomDeltaModeScreenPixels\n break\n default:\n // 0 (already pixels) or new mode (avoid crashing)\n normalizedPixelDeltaY = ev.deltaY\n break\n }\n\n let lvl = Math.pow(1 + zoomFactor, (-1 * normalizedPixelDeltaY) / 100) * this.zoom()\n const p = this.point(ev.clientX, ev.clientY)\n\n if (lvl > zoomMax) {\n lvl = zoomMax\n }\n\n if (lvl < zoomMin) {\n lvl = zoomMin\n }\n\n if (this.dispatch('zoom', { level: lvl, focus: p }).defaultPrevented) {\n return this\n }\n\n this.zoom(lvl, p)\n\n if (margins) {\n const box = restrictToMargins(this.viewbox())\n this.viewbox(box)\n }\n }\n\n const pinchZoomStart = function (ev) {\n lastTouches = normalizeEvent(ev)\n\n // Start panning in case only one touch is found\n if (lastTouches.length < 2) {\n if (doPanning && oneFingerPan) {\n panStart.call(this, ev)\n }\n return\n }\n\n // Stop panning for more than one touch\n if (doPanning && oneFingerPan) {\n panStop.call(this, ev)\n }\n\n // We call it so late, so the user is still able to scroll / reload the page via gesture\n // In case oneFingerPan is not active\n ev.preventDefault()\n\n if (this.dispatch('pinchZoomStart', { event: ev }).defaultPrevented) {\n return\n }\n\n this.off('touchstart.panZoom', pinchZoomStart)\n\n zoomInProgress = true\n on(document, 'touchmove.panZoom', pinchZoom, this, { passive: false })\n on(document, 'touchend.panZoom', pinchZoomStop, this, { passive: false })\n }\n\n const pinchZoomStop = function (ev) {\n ev.preventDefault()\n\n const currentTouches = normalizeEvent(ev)\n if (currentTouches.length > 1) {\n return\n }\n\n zoomInProgress = false\n\n this.dispatch('pinchZoomEnd', { event: ev })\n\n off(document, 'touchmove.panZoom', pinchZoom)\n off(document, 'touchend.panZoom', pinchZoomStop)\n this.on('touchstart.panZoom', pinchZoomStart)\n\n if (currentTouches.length && doPanning && oneFingerPan) {\n panStart.call(this, ev)\n }\n }\n\n const pinchZoom = function (ev) {\n ev.preventDefault()\n\n const currentTouches = normalizeEvent(ev)\n const zoom = this.zoom()\n\n // Distance Formula\n const lastDelta = Math.sqrt(\n Math.pow(lastTouches[0].clientX - lastTouches[1].clientX, 2) +\n Math.pow(lastTouches[0].clientY - lastTouches[1].clientY, 2)\n )\n\n const currentDelta = Math.sqrt(\n Math.pow(currentTouches[0].clientX - currentTouches[1].clientX, 2) +\n Math.pow(currentTouches[0].clientY - currentTouches[1].clientY, 2)\n )\n\n let zoomAmount = lastDelta / currentDelta\n\n if (\n (zoom < zoomMin && zoomAmount > 1) ||\n (zoom > zoomMax && zoomAmount < 1)\n ) {\n zoomAmount = 1\n }\n\n const currentFocus = {\n x:\n currentTouches[0].clientX +\n 0.5 * (currentTouches[1].clientX - currentTouches[0].clientX),\n y:\n currentTouches[0].clientY +\n 0.5 * (currentTouches[1].clientY - currentTouches[0].clientY)\n }\n\n const lastFocus = {\n x:\n lastTouches[0].clientX +\n 0.5 * (lastTouches[1].clientX - lastTouches[0].clientX),\n y:\n lastTouches[0].clientY +\n 0.5 * (lastTouches[1].clientY - lastTouches[0].clientY)\n }\n\n const p = this.point(currentFocus.x, currentFocus.y)\n const focusP = this.point(\n 2 * currentFocus.x - lastFocus.x,\n 2 * currentFocus.y - lastFocus.y\n )\n const box = new Box(this.viewbox()).transform(\n new Matrix()\n .translate(-focusP.x, -focusP.y)\n .scale(zoomAmount, 0, 0)\n .translate(p.x, p.y)\n )\n\n restrictToMargins(box)\n this.viewbox(box)\n\n lastTouches = currentTouches\n\n this.dispatch('zoom', { box: box, focus: focusP })\n }\n\n const panStart = function (ev) {\n const isMouse = ev.type.indexOf('mouse') > -1\n\n // In case panStart is called with touch, ev.button is undefined\n if (isMouse && ev.button !== panButton && ev.which !== panButton + 1) {\n return\n }\n\n ev.preventDefault()\n\n this.off('mousedown.panZoom', panStart)\n\n lastTouches = normalizeEvent(ev)\n\n if (zoomInProgress) return\n\n this.dispatch('panStart', { event: ev })\n\n lastP = { x: lastTouches[0].clientX, y: lastTouches[0].clientY }\n\n on(document, 'touchmove.panZoom mousemove.panZoom', panning, this, {\n passive: false\n })\n\n on(document, 'touchend.panZoom mouseup.panZoom', panStop, this, {\n passive: false\n })\n }\n\n const panStop = function (ev) {\n ev.preventDefault()\n\n off(document, 'touchmove.panZoom mousemove.panZoom', panning)\n off(document, 'touchend.panZoom mouseup.panZoom', panStop)\n this.on('mousedown.panZoom', panStart)\n\n this.dispatch('panEnd', { event: ev })\n }\n\n const panning = function (ev) {\n ev.preventDefault()\n\n const currentTouches = normalizeEvent(ev)\n\n const currentP = {\n x: currentTouches[0].clientX,\n y: currentTouches[0].clientY\n }\n\n const p1 = this.point(currentP.x, currentP.y)\n\n const p2 = this.point(lastP.x, lastP.y)\n\n const deltaP = [p2.x - p1.x, p2.y - p1.y]\n\n if (!deltaP[0] && !deltaP[1]) {\n return\n }\n\n const box = new Box(this.viewbox()).transform(\n new Matrix().translate(deltaP[0], deltaP[1])\n )\n\n lastP = currentP\n\n restrictToMargins(box)\n\n if (this.dispatch('panning', { box, event: ev }).defaultPrevented) {\n return\n }\n\n this.viewbox(box)\n }\n\n if (doWheelZoom) {\n this.on('wheel.panZoom', wheelZoom, this, { passive: false })\n }\n\n if (doPinchZoom) {\n this.on('touchstart.panZoom', pinchZoomStart, this, { passive: false })\n }\n\n if (doPanning) {\n this.on('mousedown.panZoom', panStart, this, { passive: false })\n }\n\n return this\n }\n})\n"],"names":["normalizeEvent","ev","touches","clientX","clientY","Svg","panZoom","options","off","this","restrictToMargins","box","margins","top","left","bottom","right","_this","attr","width","height","preserveAspectRatio","node","baseVal","viewportLeftOffset","viewportRightOffset","viewportTopOffset","viewportBottomOffset","align","SVG_PRESERVEASPECTRATIO_NONE","svgAspectRatio","viewboxAspectRatio","viewbox","isMeet","meetOrSlice","SVG_MEETORSLICE_SLICE","changedAxis","isWidth","changeHorizontal","ratio","offset","SVG_PRESERVEASPECTRATIO_XMIDYMIN","SVG_PRESERVEASPECTRATIO_XMIDYMID","SVG_PRESERVEASPECTRATIO_XMIDYMAX","SVG_PRESERVEASPECTRATIO_XMINYMIN","SVG_PRESERVEASPECTRATIO_XMINYMID","SVG_PRESERVEASPECTRATIO_XMINYMAX","SVG_PRESERVEASPECTRATIO_XMAXYMIN","SVG_PRESERVEASPECTRATIO_XMAXYMID","SVG_PRESERVEASPECTRATIO_XMAXYMAX","leftLimit","x","rightLimit","topLimit","y","bottomLimit","Math","min","max","pinchZoomStart","lastTouches","length","doPanning","oneFingerPan","panStart","call","panStop","preventDefault","dispatch","event","defaultPrevented","zoomInProgress","on","document","pinchZoom","passive","pinchZoomStop","lastP","zoomFactor","zoomMin","Number","MIN_VALUE","zoomMax","MAX_VALUE","doWheelZoom","wheelZoom","doPinchZoom","panning","panButton","wheelZoomDeltaModeLinePixels","wheelZoomDeltaModeScreenPixels","currentTouches","zoom","zoomAmount","sqrt","pow","currentFocus","lastFocus","p","point","focusP","Box","transform","Matrix","translate","scale","focus","type","indexOf","button","which","currentP","p1","p2","deltaP","normalizedPixelDeltaY","deltaMode","deltaY","lvl","level"],"mappings":"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"}
\ No newline at end of file
diff --git a/docs/xqdoc/resources/xqdoc.png b/docs/xqdoc/resources/xqdoc.png
deleted file mode 100644
index 5b76960..0000000
Binary files a/docs/xqdoc/resources/xqdoc.png and /dev/null differ
diff --git a/docs/xqdoc/resources/xqdoca.js b/docs/xqdoc/resources/xqdoca.js
deleted file mode 100644
index 36d44c1..0000000
--- a/docs/xqdoc/resources/xqdoca.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// simple javascript support
-
-//https://www.w3schools.com/howto/howto_js_treeview.asp
-var toggler = document.getElementsByClassName("caret");
-var i;
-
-for (i = 0; i < toggler.length; i++) {
- toggler[i].addEventListener("click", function() {
- this.parentElement.querySelector(".nested").classList.toggle("active");
- this.classList.toggle("caret-down");
- });
-}
\ No newline at end of file
diff --git a/docs/xqdoc/restxq.html b/docs/xqdoc/restxq.html
deleted file mode 100644
index 2747644..0000000
--- a/docs/xqdoc/restxq.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
jars - xqDocA - xqDocA
\ No newline at end of file
diff --git a/docs/xqdoc/validation-report.xml b/docs/xqdoc/validation-report.xml
deleted file mode 100644
index 13b1954..0000000
--- a/docs/xqdoc/validation-report.xml
+++ /dev/null
@@ -1 +0,0 @@
-invalid cvc-complex-type.2.1: Element 'xqdoc:namespace' must have no character or element information item [children], because the type's content type is empty. cvc-complex-type.2.1: Element 'xqdoc:namespace' must have no character or element information item [children], because the type's content type is empty. cvc-complex-type.2.1: Element 'xqdoc:namespace' must have no character or element information item [children], because the type's content type is empty. cvc-complex-type.2.1: Element 'xqdoc:namespace' must have no character or element information item [children], because the type's content type is empty. cvc-complex-type.2.1: Element 'xqdoc:namespace' must have no character or element information item [children], because the type's content type is empty.
\ No newline at end of file
diff --git a/docs/xqdoc/xqdoca.xml b/docs/xqdoc/xqdoca.xml
deleted file mode 100644
index 2cb8fe6..0000000
--- a/docs/xqdoc/xqdoca.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-0.9.0 docs/xqdoc/
- report
- restxq
- imports
- imports-diag imports-diag.mmd
- annotations
- xqdoca.xml
- xqdoc-validate
-
- module
- xqdoc
- xqparse
- basex *.xqm,*.xq,*.xquery jars jars/ true true 1.1 true
\ No newline at end of file
diff --git a/jars/Pdfbox3.xqm b/jars/Pdfbox3.xqm
index 33f6b70..b52353c 100644
--- a/jars/Pdfbox3.xqm
+++ b/jars/Pdfbox3.xqm
@@ -43,40 +43,42 @@ declare namespace PDFRenderer="java:org.apache.pdfbox.rendering.PDFRenderer";
declare namespace RandomAccessReadBufferedFile = "java:org.apache.pdfbox.io.RandomAccessReadBufferedFile";
declare namespace File ="java:java.io.File";
-(:~ version of pdfbox:)
+(:~ version of Apacke Pdfbox in use :)
declare function pdfbox:version()
as xs:string{
Q{java:org.apache.pdfbox.util.Version}getVersion()
};
-(:~ open pdf, returns handle :)
+(:~ open pdf, returns pdf object :)
declare function pdfbox:open($pdfpath as xs:string)
as item(){
Loader:loadPDF( RandomAccessReadBufferedFile:new($pdfpath))
};
-(:~ the PDF specification version this document conforms to.:)
-declare function pdfbox:pdfVersion($doc as item())
+(:~ the PDF specification version this $pdf conforms to.:)
+declare function pdfbox:pdfVersion($pdf as item())
as xs:float{
- PDDocument:getVersion($doc)
+ PDDocument:getVersion($pdf)
};
-(:~ save pdf $doc to $savepath , returns $savepath :)
-declare function pdfbox:save($doc as item(),$savepath as xs:string)
+(:~ save pdf $pdf to $savepath , returns $savepath :)
+declare function pdfbox:save($pdf as item(),$savepath as xs:string)
as xs:string{
- PDDocument:save($doc,File:new($savepath)),$savepath
+ PDDocument:save($pdf, File:new($savepath)),$savepath
};
-declare function pdfbox:close($doc as item())
+(: release references to $pdf:)
+declare function pdfbox:close($pdf as item())
as empty-sequence(){
(# db:wrapjava void #) {
- PDDocument:close($doc)
+ PDDocument:close($pdf)
}
};
-declare function pdfbox:page-count($doc as item())
+(:~ number of pages in PDF:)
+declare function pdfbox:page-count($pdf as item())
as xs:integer{
- PDDocument:getNumberOfPages($doc)
+ PDDocument:getNumberOfPages($pdf)
};
(:~ map with document metadata :)
@@ -95,7 +97,7 @@ as map(*){
};
(:~ convert date :)
-declare
+declare %private
function pdfbox:gregToISO($item as item())
as xs:string{
Q{java:java.util.GregorianCalendar}toZonedDateTime($item)=>string()
@@ -123,7 +125,7 @@ as map(*)*{
};
(: BaseX bug 10.7? error if inlined in outline :)
-declare function pdfbox:_outline($doc as item(),$outlineItem as item()?)
+declare %private function pdfbox:_outline($doc as item(),$outlineItem as item()?)
as map(*){
hof:until(
function($output) { empty($output?this) },
@@ -157,7 +159,9 @@ as element(bookmark)*
};
-(: return bookmark info for children of $outlineItem :)
+(:~ return bookmark info for children of $outlineItem
+@return map like{index:,title:,hasChildren:}
+:)
declare function pdfbox:bookmark($bookmark as item(),$doc as item())
as map(*)
{
@@ -191,11 +195,11 @@ as item()?
(:~ save new PDF doc from 1 based page range
@return save path :)
-declare function pdfbox:extract($doc as item(),
+declare function pdfbox:extract($pdf as item(),
$start as xs:integer,$end as xs:integer,$target as xs:string)
as xs:string
{
- let $a:=PageExtractor:new($doc, $start, $end) =>PageExtractor:extract()
+ let $a:=PageExtractor:new($pdf, $start, $end) =>PageExtractor:extract()
return (pdfbox:save($a,$target),pdfbox:close($a))
};
@@ -204,10 +208,10 @@ as xs:string
@see https://www.w3.org/TR/WCAG20-TECHS/PDF17.html#PDF17-examples
@see https://codereview.stackexchange.com/questions/286078/java-code-showing-page-labels-from-pdf-files
:)
-declare function pdfbox:getPageLabels($doc as item())
+declare function pdfbox:getPageLabels($pdf as item())
as item()
{
- PDDocument:getDocumentCatalog($doc)
+ PDDocument:getDocumentCatalog($pdf)
=>PDDocumentCatalog:getPageLabels()
};
diff --git a/lib/pdfbox-3.0.4.fat.jar b/lib/pdfbox-3.0.4.fat.jar
index 3bd6cfc..66f8833 100644
Binary files a/lib/pdfbox-3.0.4.fat.jar and b/lib/pdfbox-3.0.4.fat.jar differ
diff --git a/scripts/make-fat-jar.xq b/scripts/make-fat-jar.xq
index 18b217e..7c52f08 100644
--- a/scripts/make-fat-jar.xq
+++ b/scripts/make-fat-jar.xq
@@ -7,18 +7,18 @@ Main-Class: org.basex.modules.Hello
let $config :=map {
"base": file:resolve-path("../",static-base-uri()),
"manifest-jar" : "pdfbox-3.0.4.jar",
- "input-dir" : "C:\Users\mrwhe\git\expkg-zone58\pdfbox\jars\",
- "output" : "../lib/pdfbox-3.0.4.fat.jar",
+ "input-dir" : "jars/",
+ "output" : "lib/pdfbox-3.0.4.fat.jar",
"main-class": "org.expkg_zone58.Pdfbox3"
}
-let $jar-path:=file:resolve-path("jars/",$config?base=>trace("base "))=>trace("jar: ")
+let $jar-path:=file:resolve-path($config?input-dir,$config?base=>trace("base "))=>trace("jar: ")
let $fat-jar := build:fatjar-from-folder($jar-path,$config?manifest-jar)
let $fat-jar:=build:update-manifest($fat-jar, $config?main-class)
let $name:=replace($config?main-class,"\.","/") || ".xqm"
let $content:=file:read-binary($jar-path || "Pdfbox3.xqm")
let $fat-jar:=archive:update($fat-jar, $name,$content)
-let $output-file := file:resolve-path($config?output, $fat-jar)
+let $output-file := file:resolve-path($config?output,$config?base)
return (file:write-binary($output-file, $fat-jar),
trace($output-file,"fat jar: "))
\ No newline at end of file
diff --git a/src/scratch/nos.xq b/src/scratch/nos.xq
index b467d60..52f83c2 100644
--- a/src/scratch/nos.xq
+++ b/src/scratch/nos.xq
@@ -1,6 +1,6 @@
(:~ describe book page numbering :)
-import module namespace pdfbox="urn:expkg-zone58:pdfbox3" at "../lib/pdfbox3.xqm";
+import module namespace pdfbox="urn:expkg-zone58:pdfbox3" ;
import module namespace bookpages="urn:bookpages" at "../lib/bookpages.xqm";
import module namespace pdfscrape="urn:pdfscrape" at "../lib/pdfscrape.xqm";