From e877271c5e11e6908cd11b6ba3c1524b80846a90 Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Tue, 13 May 2025 18:48:57 -0400 Subject: [PATCH 1/7] TempContext - new createFileFromString method --- src/core/temp-types.ts | 4 ++++ src/core/temp.ts | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/core/temp-types.ts b/src/core/temp-types.ts index 52630a6fd0b..768f3e59086 100644 --- a/src/core/temp-types.ts +++ b/src/core/temp-types.ts @@ -6,6 +6,10 @@ export interface TempContext { baseDir: string; + createFileFromString: ( + content: string, + options?: Deno.MakeTempOptions, + ) => string; createFile: (options?: Deno.MakeTempOptions) => string; createDir: (options?: Deno.MakeTempOptions) => string; cleanup: () => void; diff --git a/src/core/temp.ts b/src/core/temp.ts index c85264fe281..49623b83620 100644 --- a/src/core/temp.ts +++ b/src/core/temp.ts @@ -66,8 +66,13 @@ export function createTempContext(options?: Deno.MakeTempOptions): TempContext { const tempContextCleanupHandlers: VoidFunction[] = []; - return { + const result: TempContext = { baseDir: dir, + createFileFromString: (content: string, options?: Deno.MakeTempOptions) => { + const file = result.createFile(options); + Deno.writeTextFileSync(file, content); + return file; + }, createFile: (options?: Deno.MakeTempOptions) => { return Deno.makeTempFileSync({ ...options, dir }); }, @@ -93,6 +98,7 @@ export function createTempContext(options?: Deno.MakeTempOptions): TempContext { tempContextCleanupHandlers.push(handler); }, }; + return result; } export function systemTempDir(name: string) { From e213ac43178685f4bc3ffc21684a94da8741acf5 Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Tue, 13 May 2025 18:51:29 -0400 Subject: [PATCH 2/7] html - add minimal axe checker implementation --- src/format/html/format-html-axe.ts | 30 +++++++++++++++++ src/format/html/format-html-shared.ts | 1 + src/format/html/format-html.ts | 17 ++++++++-- src/resources/formats/html/axe/axe-check.js | 33 +++++++++++++++++++ .../formats/html/esbuild-analysis-cache.json | 5 +++ src/resources/formats/html/quarto.js | 2 ++ 6 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 src/format/html/format-html-axe.ts create mode 100644 src/resources/formats/html/axe/axe-check.js diff --git a/src/format/html/format-html-axe.ts b/src/format/html/format-html-axe.ts new file mode 100644 index 00000000000..08f5b74f840 --- /dev/null +++ b/src/format/html/format-html-axe.ts @@ -0,0 +1,30 @@ +/* + * format-html-axe.ts + * + * Copyright (C) 2020-2025 Posit Software, PBC + */ + +import { kIncludeInHeader } from "../../config/constants.ts"; +import { Format, FormatExtras } from "../../config/types.ts"; +import { TempContext } from "../../core/temp-types.ts"; +import { encodeBase64 } from "../../deno_ral/encoding.ts"; + +export function axeFormatDependencies( + _format: Format, + temp: TempContext, + options?: unknown, +): FormatExtras { + if (options === undefined) { + return {}; + } + + return { + [kIncludeInHeader]: [ + temp.createFileFromString( + ``, + ), + ], + }; +} diff --git a/src/format/html/format-html-shared.ts b/src/format/html/format-html-shared.ts index d138428dbe8..6d63e73abd5 100644 --- a/src/format/html/format-html-shared.ts +++ b/src/format/html/format-html-shared.ts @@ -56,6 +56,7 @@ export const kComments = "comments"; export const kHypothesis = "hypothesis"; export const kUtterances = "utterances"; export const kGiscus = "giscus"; +export const kAxe = "axe"; export const kGiscusRepoId = "repo-id"; export const kGiscusCategoryId = "category-id"; diff --git a/src/format/html/format-html.ts b/src/format/html/format-html.ts index e2bfc2a9830..6cc057081b1 100644 --- a/src/format/html/format-html.ts +++ b/src/format/html/format-html.ts @@ -5,7 +5,7 @@ * * Copyright (C) 2020-2022 Posit Software, PBC */ -import { dirname, join, relative } from "../../deno_ral/path.ts"; +import { join, relative } from "../../deno_ral/path.ts"; import { warning } from "../../deno_ral/log.ts"; import * as ld from "../../core/lodash.ts"; @@ -68,6 +68,7 @@ import { clipboardDependency, createCodeCopyButton, kAnchorSections, + kAxe, kBootstrapDependencyName, kCitationsHover, kCodeAnnotations, @@ -116,8 +117,9 @@ import { import { kQuartoHtmlDependency } from "./format-html-constants.ts"; import { registerWriterFormatHandler } from "../format-handlers.ts"; import { brandSassFormatExtras } from "../../core/sass/brand.ts"; -import { ESBuildAnalysis, esbuildAnalyze } from "../../core/esbuild.ts"; +import { ESBuildAnalysis } from "../../core/esbuild.ts"; import { assert } from "testing/asserts"; +import { axeFormatDependencies } from "./format-html-axe.ts"; let esbuildAnalysisCache: Record | undefined; export function esbuildCachedAnalysis( @@ -245,6 +247,10 @@ export async function htmlFormatExtras( tippyOptions?: HtmlFormatTippyOptions, scssOptions?: HtmlFormatScssOptions, ): Promise { + const configurableExtras: FormatExtras[] = [ + axeFormatDependencies(format, temp, format.metadata[kAxe]), + ]; + // note whether we are targeting bootstrap const bootstrap = formatHasBootstrap(format); @@ -645,7 +651,7 @@ export async function htmlFormatExtras( } const metadata: Metadata = {}; - return { + const result: FormatExtras = { [kIncludeInHeader]: includeInHeader, [kIncludeBeforeBody]: includeBeforeBody, [kIncludeAfterBody]: includeAfterBody, @@ -657,6 +663,11 @@ export async function htmlFormatExtras( [kHtmlPostprocessors]: htmlPostProcessors, }, }; + + return mergeConfigs( + result, + ...configurableExtras, + ) as FormatExtras; } const kFormatHasBootstrap = "has-bootstrap"; diff --git a/src/resources/formats/html/axe/axe-check.js b/src/resources/formats/html/axe/axe-check.js new file mode 100644 index 00000000000..db28e9637fd --- /dev/null +++ b/src/resources/formats/html/axe/axe-check.js @@ -0,0 +1,33 @@ +class QuartoAxeChecker { + constructor(opts) { + this.options = opts; + } + async init() { + const axe = (await import("https://cdn.skypack.dev/pin/axe-core@v4.10.3-aVOFXWsJaCpVrtv89pCa/mode=imports,min/optimized/axe-core.js")).default; + const result = await axe.run({ + preload: { assets: ['cssom'], timeout: 50000 } + }); + if (this.options.output === "json") { + console.log(JSON.stringify(result, null, 2)); + return; + } + for (const violation of result.violations) { + console.log(violation.description); + for (const node of violation.nodes) { + for (const target of node.target) { + console.log(target); + console.log(document.querySelector(target)); + } + } + } + } +} + +export async function init() { + const opts = document.querySelector("#quarto-axe-checker-options"); + if (opts) { + const jsonOptions = JSON.parse(atob(opts.textContent)); + const checker = new QuartoAxeChecker(jsonOptions); + await checker.init(); + } +} \ No newline at end of file diff --git a/src/resources/formats/html/esbuild-analysis-cache.json b/src/resources/formats/html/esbuild-analysis-cache.json index 16f8062bbc3..384ce2bc0c4 100644 --- a/src/resources/formats/html/esbuild-analysis-cache.json +++ b/src/resources/formats/html/esbuild-analysis-cache.json @@ -14,6 +14,11 @@ "path": "./tabsets/tabsets.js", "kind": "import-statement", "external": true + }, + { + "path": "./axe/axe-check.js", + "kind": "import-statement", + "external": true } ], "exports": [], diff --git a/src/resources/formats/html/quarto.js b/src/resources/formats/html/quarto.js index ee807684be1..84574cacad2 100644 --- a/src/resources/formats/html/quarto.js +++ b/src/resources/formats/html/quarto.js @@ -1,4 +1,5 @@ import * as tabsets from "./tabsets/tabsets.js"; +import * as axe from "./axe/axe-check.js"; const sectionChanged = new CustomEvent("quarto-sectionChanged", { detail: {}, @@ -826,6 +827,7 @@ window.document.addEventListener("DOMContentLoaded", function (_event) { }); tabsets.init(); +axe.init(); function throttle(func, wait) { let waiting = false; From 312bf6910ced36d25439ecb88910719560d835db Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Tue, 13 May 2025 18:54:56 -0400 Subject: [PATCH 3/7] build artifacts --- src/resources/editor/tools/vs-code.mjs | 32 ++++++++++++++++--- src/resources/editor/tools/yaml/web-worker.js | 32 ++++++++++++++++--- .../yaml/yaml-intelligence-resources.json | 32 ++++++++++++++++--- .../formats/html/esbuild-analysis-cache.json | 6 ++-- src/resources/schema/document-a11y.yml | 10 ++++++ 5 files changed, 97 insertions(+), 15 deletions(-) create mode 100644 src/resources/schema/document-a11y.yml diff --git a/src/resources/editor/tools/vs-code.mjs b/src/resources/editor/tools/vs-code.mjs index 7e18bf4769f..456bf142e77 100644 --- a/src/resources/editor/tools/vs-code.mjs +++ b/src/resources/editor/tools/vs-code.mjs @@ -23758,6 +23758,7 @@ var require_yaml_intelligence_resources = __commonJS({ "Manuscript configuration", "internal-schema-hack", "List execution engines you want to give priority when determining\nwhich engine should render a notebook. If two engines have support for a\nnotebook, the one listed earlier will be chosen. Quarto\u2019s default order\nis \u2018knitr\u2019, \u2018jupyter\u2019, \u2018markdown\u2019, \u2018julia\u2019.", + "When defined, run axe-core accessibility tests on the document.", "Project configuration.", "Project type (default, website,\nbook, or manuscript)", "Files to render (defaults to all files)", @@ -24332,12 +24333,12 @@ var require_yaml_intelligence_resources = __commonJS({ mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 195562, + _internalId: 196726, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 195554, + _internalId: 196718, type: "enum", enum: [ "png", @@ -24353,7 +24354,7 @@ var require_yaml_intelligence_resources = __commonJS({ exhaustiveCompletions: true }, theme: { - _internalId: 195561, + _internalId: 196725, type: "anyOf", anyOf: [ { @@ -24393,7 +24394,30 @@ var require_yaml_intelligence_resources = __commonJS({ "case-detection": true }, $id: "handlers/mermaid" - } + }, + "schema/document-a11y.yml": [ + { + name: "axe", + schema: { + anyOf: [ + true, + { + object: { + properties: { + output: { + enum: [ + "json" + ], + description: "If true, output axe-core results on console in JSON format." + } + } + } + } + ] + }, + description: "When defined, run axe-core accessibility tests on the document." + } + ] }; } }); diff --git a/src/resources/editor/tools/yaml/web-worker.js b/src/resources/editor/tools/yaml/web-worker.js index 54c2aede01a..8fcb38e574d 100644 --- a/src/resources/editor/tools/yaml/web-worker.js +++ b/src/resources/editor/tools/yaml/web-worker.js @@ -23759,6 +23759,7 @@ try { "Manuscript configuration", "internal-schema-hack", "List execution engines you want to give priority when determining\nwhich engine should render a notebook. If two engines have support for a\nnotebook, the one listed earlier will be chosen. Quarto\u2019s default order\nis \u2018knitr\u2019, \u2018jupyter\u2019, \u2018markdown\u2019, \u2018julia\u2019.", + "When defined, run axe-core accessibility tests on the document.", "Project configuration.", "Project type (default, website,\nbook, or manuscript)", "Files to render (defaults to all files)", @@ -24333,12 +24334,12 @@ try { mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 195562, + _internalId: 196726, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 195554, + _internalId: 196718, type: "enum", enum: [ "png", @@ -24354,7 +24355,7 @@ try { exhaustiveCompletions: true }, theme: { - _internalId: 195561, + _internalId: 196725, type: "anyOf", anyOf: [ { @@ -24394,7 +24395,30 @@ try { "case-detection": true }, $id: "handlers/mermaid" - } + }, + "schema/document-a11y.yml": [ + { + name: "axe", + schema: { + anyOf: [ + true, + { + object: { + properties: { + output: { + enum: [ + "json" + ], + description: "If true, output axe-core results on console in JSON format." + } + } + } + } + ] + }, + description: "When defined, run axe-core accessibility tests on the document." + } + ] }; } }); diff --git a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json index 0d06a1bd673..f5a2c552635 100644 --- a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json +++ b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json @@ -16730,6 +16730,7 @@ "Manuscript configuration", "internal-schema-hack", "List execution engines you want to give priority when determining\nwhich engine should render a notebook. If two engines have support for a\nnotebook, the one listed earlier will be chosen. Quarto’s default order\nis ‘knitr’, ‘jupyter’, ‘markdown’, ‘julia’.", + "When defined, run axe-core accessibility tests on the document.", "Project configuration.", "Project type (default, website,\nbook, or manuscript)", "Files to render (defaults to all files)", @@ -17304,12 +17305,12 @@ "mermaid": "%%" }, "handlers/mermaid/schema.yml": { - "_internalId": 195562, + "_internalId": 196726, "type": "object", "description": "be an object", "properties": { "mermaid-format": { - "_internalId": 195554, + "_internalId": 196718, "type": "enum", "enum": [ "png", @@ -17325,7 +17326,7 @@ "exhaustiveCompletions": true }, "theme": { - "_internalId": 195561, + "_internalId": 196725, "type": "anyOf", "anyOf": [ { @@ -17365,5 +17366,28 @@ "case-detection": true }, "$id": "handlers/mermaid" - } + }, + "schema/document-a11y.yml": [ + { + "name": "axe", + "schema": { + "anyOf": [ + true, + { + "object": { + "properties": { + "output": { + "enum": [ + "json" + ], + "description": "If true, output axe-core results on console in JSON format." + } + } + } + } + ] + }, + "description": "When defined, run axe-core accessibility tests on the document." + } + ] } \ No newline at end of file diff --git a/src/resources/formats/html/esbuild-analysis-cache.json b/src/resources/formats/html/esbuild-analysis-cache.json index 384ce2bc0c4..35225503b2b 100644 --- a/src/resources/formats/html/esbuild-analysis-cache.json +++ b/src/resources/formats/html/esbuild-analysis-cache.json @@ -2,7 +2,7 @@ "quarto.js": { "inputs": { "quarto.js": { - "bytes": 26830, + "bytes": 26885, "imports": [], "format": "esm" } @@ -25,10 +25,10 @@ "entryPoint": "quarto.js", "inputs": { "quarto.js": { - "bytesInOutput": 22313 + "bytesInOutput": 22368 } }, - "bytes": 22313 + "bytes": 22368 } } } diff --git a/src/resources/schema/document-a11y.yml b/src/resources/schema/document-a11y.yml new file mode 100644 index 00000000000..48fd0024e27 --- /dev/null +++ b/src/resources/schema/document-a11y.yml @@ -0,0 +1,10 @@ +- name: axe + schema: + anyOf: + - true + - object: + properties: + output: + enum: [json] + description: "If true, output axe-core results on console in JSON format." + description: "When defined, run axe-core accessibility tests on the document." From 8e764f6604b2d3be17b96b8245c8d0b562268ff9 Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Tue, 13 May 2025 20:29:29 -0400 Subject: [PATCH 4/7] fix schema definition --- src/format/html/format-html-axe.ts | 2 +- src/resources/editor/tools/vs-code.mjs | 9 +++++---- src/resources/editor/tools/yaml/web-worker.js | 9 +++++---- .../editor/tools/yaml/yaml-intelligence-resources.json | 9 +++++---- src/resources/schema/document-a11y.yml | 2 +- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/format/html/format-html-axe.ts b/src/format/html/format-html-axe.ts index 08f5b74f840..c9fb215cbcb 100644 --- a/src/format/html/format-html-axe.ts +++ b/src/format/html/format-html-axe.ts @@ -14,7 +14,7 @@ export function axeFormatDependencies( temp: TempContext, options?: unknown, ): FormatExtras { - if (options === undefined) { + if (!options) { return {}; } diff --git a/src/resources/editor/tools/vs-code.mjs b/src/resources/editor/tools/vs-code.mjs index 456bf142e77..314d4c459e5 100644 --- a/src/resources/editor/tools/vs-code.mjs +++ b/src/resources/editor/tools/vs-code.mjs @@ -23759,6 +23759,7 @@ var require_yaml_intelligence_resources = __commonJS({ "internal-schema-hack", "List execution engines you want to give priority when determining\nwhich engine should render a notebook. If two engines have support for a\nnotebook, the one listed earlier will be chosen. Quarto\u2019s default order\nis \u2018knitr\u2019, \u2018jupyter\u2019, \u2018markdown\u2019, \u2018julia\u2019.", "When defined, run axe-core accessibility tests on the document.", + "If true, output axe-core results on console in JSON format.", "Project configuration.", "Project type (default, website,\nbook, or manuscript)", "Files to render (defaults to all files)", @@ -24333,12 +24334,12 @@ var require_yaml_intelligence_resources = __commonJS({ mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 196726, + _internalId: 196509, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 196718, + _internalId: 196501, type: "enum", enum: [ "png", @@ -24354,7 +24355,7 @@ var require_yaml_intelligence_resources = __commonJS({ exhaustiveCompletions: true }, theme: { - _internalId: 196725, + _internalId: 196508, type: "anyOf", anyOf: [ { @@ -24400,7 +24401,7 @@ var require_yaml_intelligence_resources = __commonJS({ name: "axe", schema: { anyOf: [ - true, + "boolean", { object: { properties: { diff --git a/src/resources/editor/tools/yaml/web-worker.js b/src/resources/editor/tools/yaml/web-worker.js index 8fcb38e574d..8d9fa9f6672 100644 --- a/src/resources/editor/tools/yaml/web-worker.js +++ b/src/resources/editor/tools/yaml/web-worker.js @@ -23760,6 +23760,7 @@ try { "internal-schema-hack", "List execution engines you want to give priority when determining\nwhich engine should render a notebook. If two engines have support for a\nnotebook, the one listed earlier will be chosen. Quarto\u2019s default order\nis \u2018knitr\u2019, \u2018jupyter\u2019, \u2018markdown\u2019, \u2018julia\u2019.", "When defined, run axe-core accessibility tests on the document.", + "If true, output axe-core results on console in JSON format.", "Project configuration.", "Project type (default, website,\nbook, or manuscript)", "Files to render (defaults to all files)", @@ -24334,12 +24335,12 @@ try { mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 196726, + _internalId: 196509, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 196718, + _internalId: 196501, type: "enum", enum: [ "png", @@ -24355,7 +24356,7 @@ try { exhaustiveCompletions: true }, theme: { - _internalId: 196725, + _internalId: 196508, type: "anyOf", anyOf: [ { @@ -24401,7 +24402,7 @@ try { name: "axe", schema: { anyOf: [ - true, + "boolean", { object: { properties: { diff --git a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json index f5a2c552635..b4e07f06f1f 100644 --- a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json +++ b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json @@ -16731,6 +16731,7 @@ "internal-schema-hack", "List execution engines you want to give priority when determining\nwhich engine should render a notebook. If two engines have support for a\nnotebook, the one listed earlier will be chosen. Quarto’s default order\nis ‘knitr’, ‘jupyter’, ‘markdown’, ‘julia’.", "When defined, run axe-core accessibility tests on the document.", + "If true, output axe-core results on console in JSON format.", "Project configuration.", "Project type (default, website,\nbook, or manuscript)", "Files to render (defaults to all files)", @@ -17305,12 +17306,12 @@ "mermaid": "%%" }, "handlers/mermaid/schema.yml": { - "_internalId": 196726, + "_internalId": 196509, "type": "object", "description": "be an object", "properties": { "mermaid-format": { - "_internalId": 196718, + "_internalId": 196501, "type": "enum", "enum": [ "png", @@ -17326,7 +17327,7 @@ "exhaustiveCompletions": true }, "theme": { - "_internalId": 196725, + "_internalId": 196508, "type": "anyOf", "anyOf": [ { @@ -17372,7 +17373,7 @@ "name": "axe", "schema": { "anyOf": [ - true, + "boolean", { "object": { "properties": { diff --git a/src/resources/schema/document-a11y.yml b/src/resources/schema/document-a11y.yml index 48fd0024e27..a38b83fc9d1 100644 --- a/src/resources/schema/document-a11y.yml +++ b/src/resources/schema/document-a11y.yml @@ -1,7 +1,7 @@ - name: axe schema: anyOf: - - true + - boolean - object: properties: output: From 6ec050d313ea2903bcc9376953d847ed601178ad Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Thu, 15 May 2025 12:59:23 -0400 Subject: [PATCH 5/7] spruce up the in-document output --- src/format/html/format-html-axe.ts | 40 +++++- src/resources/editor/tools/vs-code.mjs | 12 +- src/resources/editor/tools/yaml/web-worker.js | 12 +- .../yaml/yaml-intelligence-resources.json | 12 +- src/resources/formats/html/axe/axe-check.js | 134 ++++++++++++++++-- src/resources/schema/document-a11y.yml | 4 +- 6 files changed, 181 insertions(+), 33 deletions(-) diff --git a/src/format/html/format-html-axe.ts b/src/format/html/format-html-axe.ts index c9fb215cbcb..b931cb1a459 100644 --- a/src/format/html/format-html-axe.ts +++ b/src/format/html/format-html-axe.ts @@ -14,9 +14,7 @@ export function axeFormatDependencies( temp: TempContext, options?: unknown, ): FormatExtras { - if (!options) { - return {}; - } + if (!options) return {}; return { [kIncludeInHeader]: [ @@ -26,5 +24,41 @@ export function axeFormatDependencies( }`, ), ], + html: { + "sass-bundles": [ + { + key: "axe", + dependency: "bootstrap", + user: [{ + uses: "", + defaults: "", + functions: "", + mixins: "", + rules: ` +body div.quarto-axe-report { + position: fixed; + bottom: 3rem; + right: 3rem; + padding: 1rem; + border: 1px solid $body-color; +} + +.quarto-axe-violation-help { padding-left: 0.5rem; } +.quarto-axe-violation-selector { padding-left: 1rem; } +.quarto-axe-violation-target { + padding: 0.5rem; + color: $link-color; + text-decoration: underline; + cursor: pointer; +} + +.quarto-axe-hover-highlight { + background-color: red; + border: 1px solid $body-color; +}`, + }], + }, + ], + }, }; } diff --git a/src/resources/editor/tools/vs-code.mjs b/src/resources/editor/tools/vs-code.mjs index 314d4c459e5..43176544d17 100644 --- a/src/resources/editor/tools/vs-code.mjs +++ b/src/resources/editor/tools/vs-code.mjs @@ -24334,12 +24334,12 @@ var require_yaml_intelligence_resources = __commonJS({ mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 196509, + _internalId: 196437, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 196501, + _internalId: 196429, type: "enum", enum: [ "png", @@ -24355,7 +24355,7 @@ var require_yaml_intelligence_resources = __commonJS({ exhaustiveCompletions: true }, theme: { - _internalId: 196508, + _internalId: 196436, type: "anyOf", anyOf: [ { @@ -24407,9 +24407,11 @@ var require_yaml_intelligence_resources = __commonJS({ properties: { output: { enum: [ - "json" + "json", + "console", + "document" ], - description: "If true, output axe-core results on console in JSON format." + description: "If set, output axe-core results on console. `json`: produce structured output; `console`: print output to javascript console; `document`: produce a visual report of violations in the document itself." } } } diff --git a/src/resources/editor/tools/yaml/web-worker.js b/src/resources/editor/tools/yaml/web-worker.js index 8d9fa9f6672..ecac36b684e 100644 --- a/src/resources/editor/tools/yaml/web-worker.js +++ b/src/resources/editor/tools/yaml/web-worker.js @@ -24335,12 +24335,12 @@ try { mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 196509, + _internalId: 196437, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 196501, + _internalId: 196429, type: "enum", enum: [ "png", @@ -24356,7 +24356,7 @@ try { exhaustiveCompletions: true }, theme: { - _internalId: 196508, + _internalId: 196436, type: "anyOf", anyOf: [ { @@ -24408,9 +24408,11 @@ try { properties: { output: { enum: [ - "json" + "json", + "console", + "document" ], - description: "If true, output axe-core results on console in JSON format." + description: "If set, output axe-core results on console. `json`: produce structured output; `console`: print output to javascript console; `document`: produce a visual report of violations in the document itself." } } } diff --git a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json index b4e07f06f1f..d98fbbca907 100644 --- a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json +++ b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json @@ -17306,12 +17306,12 @@ "mermaid": "%%" }, "handlers/mermaid/schema.yml": { - "_internalId": 196509, + "_internalId": 196437, "type": "object", "description": "be an object", "properties": { "mermaid-format": { - "_internalId": 196501, + "_internalId": 196429, "type": "enum", "enum": [ "png", @@ -17327,7 +17327,7 @@ "exhaustiveCompletions": true }, "theme": { - "_internalId": 196508, + "_internalId": 196436, "type": "anyOf", "anyOf": [ { @@ -17379,9 +17379,11 @@ "properties": { "output": { "enum": [ - "json" + "json", + "console", + "document" ], - "description": "If true, output axe-core results on console in JSON format." + "description": "If set, output axe-core results on console. `json`: produce structured output; `console`: print output to javascript console; `document`: produce a visual report of violations in the document itself." } } } diff --git a/src/resources/formats/html/axe/axe-check.js b/src/resources/formats/html/axe/axe-check.js index db28e9637fd..db2c27bce29 100644 --- a/src/resources/formats/html/axe/axe-check.js +++ b/src/resources/formats/html/axe/axe-check.js @@ -1,17 +1,31 @@ -class QuartoAxeChecker { - constructor(opts) { - this.options = opts; +class QuartoAxeReporter { + constructor(axeResult, options) { + this.axeResult = axeResult; + this.options = options; } - async init() { - const axe = (await import("https://cdn.skypack.dev/pin/axe-core@v4.10.3-aVOFXWsJaCpVrtv89pCa/mode=imports,min/optimized/axe-core.js")).default; - const result = await axe.run({ - preload: { assets: ['cssom'], timeout: 50000 } - }); - if (this.options.output === "json") { - console.log(JSON.stringify(result, null, 2)); - return; - } - for (const violation of result.violations) { + + report() { + throw new Error("report() is an abstract method"); + } +} + +class QuartoAxeJsonReporter extends QuartoAxeReporter { + constructor(axeResult, options) { + super(axeResult, options); + } + + report() { + console.log(JSON.stringify(this.axeResult, null, 2)); + } +} + +class QuartoAxeConsoleReporter extends QuartoAxeReporter { + constructor(axeResult, options) { + super(axeResult, options); + } + + report() { + for (const violation of this.axeResult.violations) { console.log(violation.description); for (const node of violation.nodes) { for (const target of node.target) { @@ -23,6 +37,100 @@ class QuartoAxeChecker { } } +class QuartoAxeDocumentReporter extends QuartoAxeReporter { + constructor(axeResult, options) { + super(axeResult, options); + } + + createViolationElement(violation) { + const violationElement = document.createElement("div"); + + const descriptionElement = document.createElement("div"); + descriptionElement.className = "quarto-axe-violation-description"; + descriptionElement.innerText = `${violation.impact.replace(/^[a-z]/, match => match.toLocaleUpperCase())}: ${violation.description}`; + violationElement.appendChild(descriptionElement); + + const helpElement = document.createElement("div"); + helpElement.className = "quarto-axe-violation-help"; + helpElement.innerText = violation.help; + violationElement.appendChild(helpElement); + + const nodesElement = document.createElement("div"); + nodesElement.className = "quarto-axe-violation-nodes"; + violationElement.appendChild(nodesElement); + const nodeElement = document.createElement("div"); + nodeElement.className = "quarto-axe-violation-selector"; + for (const node of violation.nodes) { + for (const target of node.target) { + const targetElement = document.createElement("span"); + targetElement.className = "quarto-axe-violation-target"; + targetElement.innerText = target; + nodeElement.appendChild(targetElement); + nodeElement.addEventListener("mouseenter", () => { + const element = document.querySelector(target); + if (element) { + element.scrollIntoView({ behavior: "smooth", block: "center" }); + element.classList.add("quarto-axe-hover-highlight"); + setTimeout(() => { + element.style.border = ""; + }, 2000); + } + }); + nodeElement.addEventListener("mouseleave", () => { + const element = document.querySelector(target); + if (element) { + element.classList.remove("quarto-axe-hover-highlight"); + } + }); + nodeElement.addEventListener("click", () => { + console.log(document.querySelector(target)); + }); + nodeElement.appendChild(targetElement); + } + nodesElement.appendChild(nodeElement); + } + return violationElement; + } + + report() { + const violations = this.axeResult.violations; + const reportElement = document.createElement("div"); + reportElement.className = "quarto-axe-report"; + violations.forEach((violation) => { + reportElement.appendChild(this.createViolationElement(violation)); + }); + document.body.appendChild(reportElement); + } +} + +const reporters = { + json: QuartoAxeJsonReporter, + console: QuartoAxeConsoleReporter, + document: QuartoAxeDocumentReporter, +}; + +class QuartoAxeChecker { + constructor(opts) { + this.options = opts; + } + async init() { + const axe = (await import("https://cdn.skypack.dev/pin/axe-core@v4.10.3-aVOFXWsJaCpVrtv89pCa/mode=imports,min/optimized/axe-core.js")).default; + + + // https://github.com/microsoft/tabster/issues/288 + // MS has claimed they won't fix this, so we need to add an exclusion to + // all tabster elements + const result = await axe.run({ + exclude: [ + "[data-tabster-dummy]" + ], + preload: { assets: ['cssom'], timeout: 50000 } + }); + const reporter = this.options === true ? new QuartoAxeConsoleReporter(result) : new reporters[this.options.output](result, this.options); + reporter.report(); + } +} + export async function init() { const opts = document.querySelector("#quarto-axe-checker-options"); if (opts) { diff --git a/src/resources/schema/document-a11y.yml b/src/resources/schema/document-a11y.yml index a38b83fc9d1..0860ea42a0e 100644 --- a/src/resources/schema/document-a11y.yml +++ b/src/resources/schema/document-a11y.yml @@ -5,6 +5,6 @@ - object: properties: output: - enum: [json] - description: "If true, output axe-core results on console in JSON format." + enum: [json, console, document] + description: "If set, output axe-core results on console. `json`: produce structured output; `console`: print output to javascript console; `document`: produce a visual report of violations in the document itself." description: "When defined, run axe-core accessibility tests on the document." From 687096a5fcb805890791cb85b060c0e2494b4936 Mon Sep 17 00:00:00 2001 From: Carlos Scheidegger Date: Thu, 15 May 2025 13:23:21 -0400 Subject: [PATCH 6/7] chore - upgrade html dependencies --- configuration | 2 +- .../formats/dashboard/js/dt/datatables.min.js | 5 +++++ src/resources/formats/html/axe/axe-check.js | 10 ++++------ .../projects/website/cookie-consent/cookie-consent.js | 2 +- .../website/search/autocomplete-preset-algolia.umd.js | 4 ++-- .../projects/website/search/autocomplete.umd.js | 4 ++-- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/configuration b/configuration index 960188ac6ff..4c1718ba16e 100644 --- a/configuration +++ b/configuration @@ -54,7 +54,7 @@ export DATATABLES_CONFIG=bs5/jszip-3.10.1/dt-1.13.8/b-2.4.2/b-html5-2.4.2/b-prin export PDF_MAKE=0.2.7 # javascript search dependencies -export AUTOCOMPLETE_JS=1.11.1 +export AUTOCOMPLETE_JS=1.19.1 export FUSE_JS=6.6.2 export ALGOLIA_SEARCH_JS=4.5.1 export ALGOLIA_SEARCH_INSIGHTS_JS=2.0.3 diff --git a/src/resources/formats/dashboard/js/dt/datatables.min.js b/src/resources/formats/dashboard/js/dt/datatables.min.js index 6417d914e01..44d6f38b31b 100644 --- a/src/resources/formats/dashboard/js/dt/datatables.min.js +++ b/src/resources/formats/dashboard/js/dt/datatables.min.js @@ -24,6 +24,11 @@ https://github.com/nodeca/pako/blob/main/LICENSE !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t="function"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l="function"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{"./support":30,"./utils":32}],2:[function(e,t,r){"use strict";var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){"use strict";var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){"use strict";var n=e("./utils");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){"use strict";var n=null;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function h(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h("Deflate",e)},r.uncompressWorker=function(){return new h("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){"use strict";function A(e,t){var r,n="";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo("string",s(h.name)),c=I.transformTo("string",O.utf8encode(h.name)),d=h.comment,p=I.transformTo("string",s(d)),m=I.transformTo("string",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b="",v="",y="",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),"UNIX"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+="up"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+="uc"+A(y.length,2)+y);var E="";return E+="\n\0",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+"\0\0\0\0"+A(z,4)+A(n,4)+f+b+p}}var I=e("../utils"),i=e("../stream/GenericWorker"),O=e("../utf8"),B=e("../crc32"),R=e("../signature");function s(e,t,r,n){i.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,r){"use strict";var n=e("./Uint8ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){"use strict";var n=e("./ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../support"),s=e("./ArrayReader"),a=e("./StringReader"),o=e("./NodeBufferReader"),h=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new o(e):i.uint8array?new h(n.transformTo("uint8array",e)):new s(n.transformTo("array",e)):new a(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../utils");function s(e){n.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../crc32");function s(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){"use strict";function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=n},{}],29:[function(e,t,r){"use strict";var h=e("../utils"),i=e("./ConvertWorker"),s=e("./GenericWorker"),u=e("../base64"),n=e("../support"),a=e("../external"),o=null;if(n.nodestream)try{o=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on("data",function(e,t){n.push(e),o&&o(t)}).on("error",function(e){n=[],r(e)}).on("end",function(){try{var e=function(e,t,r){switch(e){case"blob":return h.newBlob(h.transformTo("arraybuffer",t),r);case"base64":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?"uint8array":"array",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){"use strict";var o=e("./support"),h=e("./base64"),r=e("./nodejsUtils"),u=e("./external");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){"use strict";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){"use strict";var h,c=e("../utils/common"),u=e("./trees"),d=e("./adler32"),p=e("./crc32"),n=e("./messages"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&u)){e.msg="unknown compression method",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg="invalid distance code",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,r){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){"use strict";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i="[object process]"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage("","*"),r.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",d,!1):r.attachEvent("onmessage",d),function(e){r.postMessage(a+e,"*")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&"onreadystatechange"in l.createElement("script")?(s=l.documentElement,function(e){var t=l.createElement("script");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r").css({position:"fixed",top:0,left:-1*q.pageXOffset,height:1,width:1,overflow:"hidden"}).append(V("
").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(V("
").css({width:"100%",height:10}))).appendTo("body"),p=j.children(),O=p.children(),P.barWidth=p[0].offsetWidth-p[0].clientWidth,P.bScrollbarLeft=1!==Math.round(O.offset().left),j.remove()),V.extend(e.oBrowser,$.__browser),e.oScroll.iBarWidth=$.__browser.barWidth,u.oClasses),d=(V.extend(c,$.ext.classes,n.oClasses),o.addClass(c.table),u.oFeatures.bPaginate||(n.iDisplayStart=0),void 0===u.iInitDisplayStart&&(u.iInitDisplayStart=n.iDisplayStart,u._iDisplayStart=n.iDisplayStart),u.oLanguage),f=(V.extend(!0,d,n.oLanguage),d.sUrl?(V.ajax({dataType:"json",url:d.sUrl,success:function(e){z(t.oLanguage,e),V.extend(!0,d,e,u.oInit.oLanguage),K(u,null,"i18n",[u]),Me(u)},error:function(){J(u,0,"i18n file loading error",21),Me(u)}}),r=!0):K(u,null,"i18n",[u]),[]),h=this.getElementsByTagName("thead"),p=Ie(u,h[0]);if(n.aoColumns)f=n.aoColumns;else if(p.length)for(l=p[a=0].length;a").appendTo(o):t).html(u.caption),t.length&&(t[0]._captionSide=t.css("caption-side"),u.captionNode=t[0]),0===h.length&&(h=V("").appendTo(o)),u.nTHead=h[0],V("tr",h).addClass(c.thead.row),o.children("tbody")),t=(0===t.length&&(t=V("").insertAfter(h)),u.nTBody=t[0],o.children("tfoot"));if(0===t.length&&(t=V("").appendTo(o)),u.nTFoot=t[0],V("tr",t).addClass(c.tfoot.row),n.aaData)for(a=0;a/g,N=/^\d{2,4}[./-]\d{1,2}[./-]\d{1,2}([T ]{1}\d{1,2}[:.]\d{2}([.:]\d{2})?)?$/,j=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^","-"].join("|\\")+")","g"),P=/['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,y=function(e){return!e||!0===e||"-"===e},R=function(e,t){return s[t]||(s[t]=new RegExp(Pe(t),"g")),"string"==typeof e&&"."!==t?e.replace(/\./g,"").replace(s[t],"."):e},f=function(e,t,n){var a=[],r=0,o=e.length;if(void 0!==n)for(;r/g,">").replace(/"/g,"""):e},O=function(e,t){var n;return"string"!=typeof e?e:(n=e.normalize("NFD")).length!==e.length?(!0===t?e+" ":"")+n.replace(/[\u0300-\u036f]/g,""):n},D=function(e){if(Array.from&&Set)return Array.from(new Set(e));if(function(e){if(!(e.length<2))for(var t=e.slice().sort(),n=t[0],a=1,r=t.length;a"),V("").appendTo(f.find("tbody")));for(f.append(V(t.nTHead).clone()).append(V(t.nTFoot).clone()),f.find("tfoot th, tfoot td").css("width",""),f.find("thead th, thead td").each(function(){var e=se(t,this,!0,!1);e?(this.style.width=e,s&&V(this).append(V("
").css({width:a.sWidthOrig,margin:0,padding:0,border:0,height:1}))):this.style.width=""}),n=0;no&&(r=s,o=a.length)}n.maxLenString=r}return n.maxLenString}(t,p),g=S.type.className[a.sType],v=p+a.sContentPadding,p=-1===p.indexOf("<")?x.createTextNode(v):v;V("").addClass(g).addClass(a.sClass).append(p).appendTo(h)}V("[name]",f).removeAttr("name");var b=V("
").css(s||l?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(f).appendTo(d),m=(s&&i?f.width(i):s?(f.css("width","auto"),f.removeAttr("width"),f.width()").appendTo(l),n=0,a=i.length;n").html(i[n][s]).appendTo(r);var u=Ie(e,l,!0);"header"===t?e.aoHeader=u:e.aoFooter=u,V(l).children("tr").attr("role","row"),V(l).children("tr").children("th, td").each(function(){Ke(e,t)(e,V(this),o)})}}function Se(e,t,n){var a,r,o,i,l,s=[],u=[],c=[],d=e.aoColumns,f=d.length;if(t){for(n=n||p(f).filter(function(e){return d[e].bVisible}),a=0;a=s.fnRecordsDisplay()?0:o,s.iInitDisplayStart=-1),-1!==K(e,"aoPreDrawCallback","preDraw",[e]).indexOf(!1))I(e,!1);else{var l,n=[],a=0,r=e.oLanguage,o="ssp"==ee(e),i=e.aiDisplay,s=e._iDisplayStart,u=e.fnDisplayEnd(),c=e.aoColumns;if(e.bDrawing=!0,o){if(!e.bDestroying&&!t)return(l=e).iDraw++,I(l,!0),void Ae(l,function(t){function n(e,t){return"function"==typeof a[e][t]?"function":a[e][t]}var a=t.aoColumns,e=t.oFeatures,r=t.oPreviousSearch,o=t.aoPreSearchCols;return{draw:t.iDraw,columns:a.map(function(t,e){return{data:n(e,"mData"),name:t.sName,searchable:t.bSearchable,orderable:t.bSortable,search:{value:o[e].search,regex:o[e].regex,fixed:Object.keys(t.searchFixed).map(function(e){return{name:e,term:t.searchFixed[e].toString()}})}}}),order:Ue(t).map(function(e){return{column:e.col,dir:e.dir,name:n(e.col,"sName")}}),start:t._iDisplayStart,length:e.bPaginate?t._iDisplayLength:-1,search:{value:r.search,regex:r.regex,fixed:Object.keys(t.searchFixed).map(function(e){return{name:e,term:t.searchFixed[e].toString()}})}}}(l),function(e){var t=l,n=Fe(t,e=e),a=Le(t,"draw",e),r=Le(t,"recordsTotal",e),e=Le(t,"recordsFiltered",e);if(void 0!==a){if(+a").append(V("",{colSpan:B(e),class:e.oClasses.empty.row}).html(t))[0]}K(e,"aoHeaderCallback","header",[V(e.nTHead).children("tr")[0],pe(e),s,u,i]),K(e,"aoFooterCallback","footer",[V(e.nTFoot).children("tr")[0],pe(e),s,u,i]);o=V(e.nTBody);o.children().detach(),o.append(V(n)),K(e,"aoDrawCallback","draw",[e],!0),e.bSorted=!1,e.bFiltered=!1,e.bDrawing=!1}}function c(e,t,n){var a=e.oFeatures,r=a.bSort,a=a.bFilter;void 0!==n&&!0!==n||(r&&$e(e),a?Ne(e,e.oPreviousSearch):e.aiDisplay=e.aiDisplayMaster.slice()),!0!==t&&(e._iDisplayStart=0),e._drawHold=t,C(e),e._drawHold=!1}function Te(e,t,n){for(var a={},r=(V.each(t,function(e,t){var n;null===t||(e=e.replace(/([A-Z])/g," $1").split(" "),a[e[0]]||(a[e[0]]={}),n=1===e.length?"full":e[1].toLowerCase(),e=a[e[0]],V.isPlainObject(t)?t.contents?e[n]=t:e[n]={contents:Object.keys(t).map(function(e){return{feature:e,opts:t[e]}})}:e[n]={contents:t},V.isArray(e[n].contents))||(e[n].contents=[e[n].contents])}),Object.keys(a).map(function(e){return 0!==e.indexOf(n)?null:{name:e,val:a[e]}}).filter(function(e){return null!==e})),o=(r.sort(function(e,t){e=+e.name.replace(/[^0-9]/g,"");return+t.name.replace(/[^0-9]/g,"")-e}),"bottom"===n&&r.reverse(),[]),i=0,l=r.length;i").attr({id:t.sTableId+"_wrapper",class:e.container}).insertBefore(n);if(t.nTableWrapper=l[0],t.sDom)for(var s,u,c,d,f,h,p=t,e=t.sDom,g=l,v=e.match(/(".*?")|('.*?')|./g),b=0;b"),"'"!=(d=v[b+1])[0]&&'"'!=d[0]||(d=d.replace(/['"]/g,""),f="",-1!=d.indexOf(".")?(h=d.split("."),f=h[0],h=h[1]):"#"==d[0]?f=d:h=d,c.attr("id",f.substring(1)).addClass(h),b++),g.append(c),g=c):">"==u?g=g.parent():"t"==u?s=We(p):$.ext.feature.forEach(function(e){u==e.cFeature&&(s=e.fnInit(p))}),s&&g.append(s);else r.forEach(function(e){i(t,l,e)}),i(t,l,{full:{table:!0,contents:[We(t)]}}),o.forEach(function(e){i(t,l,e)});n=t,e=n.nTable;n.oFeatures.bProcessing&&(a=V("
",{id:n.sTableId+"_processing",class:n.oClasses.processing.container,role:"status"}).html(n.oLanguage.sProcessing).append("
").insertBefore(e),V(e).on("processing.dt.DT",function(e,t,n){a.css("display",n?"block":"none")}))}function Ie(e,t,n){for(var a,r,o,i,l,s,u=e.aoColumns,c=V(t).children("tr"),d=[],f=0,h=c.length;f/g,""),p.autoTitle=!0)):p.footer&&(r.innerHTML=p.footer),p.ariaTitle||(p.ariaTitle=V(r).attr("aria-label")||p.sTitle)),0===V("span.dt-column-title",r).length&&V("").addClass("dt-column-title").append(r.childNodes).appendTo(r),p.className)&&V(r).addClass(p.className),i=0;i")[0],Oe=void 0!==Re.textContent;function Me(n){var a,e,t,r,o,i=n.iInitDisplayStart;n.bInitialised?(xe(n,"header"),xe(n,"footer"),we(n,n.aoHeader),we(n,n.aoFooter),Ce(n),o=(e=n).nTHead,t=o.querySelectorAll("tr"),!0===(r=e.bSortCellsTop)?o=t[0]:!1===r&&(o=t[t.length-1]),Ve(e,o,"tr"+(r=':not([data-dt-order="disable"]):not([data-dt-order="icon-only"])')+" th"+r+", tr"+r+" td"+r),qe(e,t=[],e.aaSorting),e.aaSorting=t,I(n,!0),K(n,null,"preInit",[n],!0),c(n),"ssp"!=(o=ee(n))&&("ajax"==o?Ae(n,{},function(e){var t=Fe(n,e);for(a=0;a",{class:n.container}).append(V(l,{class:n.header.self}).css({overflow:"hidden",position:"relative",border:0,width:d?u(d):"100%"}).append(V(l,{class:n.header.inner}).css({"box-sizing":"content-box",width:p.sXInner||"100%"}).append(s.removeAttr("id").css("margin-left",0).append("top"===r?a:null).append(h.children("thead"))))).append(V(l,{class:n.body}).css({position:"relative",overflow:"auto",width:u(d)}).append(h)),i&&s.append(V(l,{class:n.footer.self}).css({overflow:"hidden",border:0,width:d?u(d):"100%"}).append(V(l,{class:n.footer.inner}).append(o.removeAttr("id").css("margin-left",0).append("bottom"===r?a:null).append(h.children("tfoot"))))),u=s.children(),c=u[0],d=u[1],f=i?u[2]:null,V(d).on("scroll.DT",function(){var e=this.scrollLeft;c.scrollLeft=e,i&&(f.scrollLeft=e)}),V(d).css("max-height",t),p.bCollapse||V(d).css("height",t),e.nScrollHead=c,e.nScrollBody=d,e.nScrollFoot=f,e.aoDrawCallback.push(Xe),s[0])}function Xe(e){function t(e){(e=e.style).paddingTop="0",e.paddingBottom="0",e.borderTopWidth="0",e.borderBottomWidth="0",e.height=0}var n,a,r,o,i=e.oScroll,l=i.sX,s=i.sXInner,i=i.iBarWidth,u=V(e.nScrollHead),c=u[0].style,d=u.children("div"),f=d[0].style,d=d.children("table"),h=e.nScrollBody,p=V(h),g=h.style,v=V(e.nScrollFoot).children("div"),b=v.children("table"),m=V(e.nTHead),y=V(e.nTable),D=y[0].style,x=e.nTFoot?V(e.nTFoot):null,S=e.oBrowser,w=[],T=[],_=[],C=[],I=h.scrollHeight>h.clientHeight;e.scrollBarVis!==I&&void 0!==e.scrollBarVis?(e.scrollBarVis=I,E(e)):(e.scrollBarVis=I,y.children("thead, tfoot").remove(),x&&(I=x.clone().prependTo(y),n=x.find("tr"),r=I.find("tr"),I.find("[id]").removeAttr("id")),I=m.clone().prependTo(y),m=m.find("tr"),a=I.find("tr"),I.find("th, td").removeAttr("tabindex"),I.find("[id]").removeAttr("id"),l||(g.width="100%",u[0].style.width="100%"),H(e,I),x&&A(function(e){e.style.width=""},r),u=y.outerWidth(),""===l?(D.width="100%",u=y.outerWidth()):""!==s&&(D.width=F(s),u=y.outerWidth()),A(t,a),A(function(e){var t=q.getComputedStyle?q.getComputedStyle(e).width:F(V(e).width());_.push(e.innerHTML),w.push(t)},a),A(function(e,t){e.style.width=w[t]},m),V(a).css("height",0),x&&(A(t,r),A(function(e){C.push(e.innerHTML),T.push(F(V(e).css("width")))},r),A(function(e,t){e.style.width=T[t]},n),V(r).height(0)),A(function(e,t){e.innerHTML='
'+_[t]+"
",e.childNodes[0].style.height="0",e.childNodes[0].style.overflow="hidden",e.style.width=w[t]},a),x&&A(function(e,t){e.innerHTML='
'+C[t]+"
",e.childNodes[0].style.height="0",e.childNodes[0].style.overflow="hidden",e.style.width=T[t]},r),Math.round(y.outerWidth())h.offsetHeight||"scroll"==p.css("overflow-y")?u+i:u,""!==l&&""===s||J(e,1,"Possible column misalignment",6)):o="100%",g.width=F(o),c.width=F(o),x&&(e.nScrollFoot.style.width=F(o)),I=y.outerWidth(),d[0].style.width=F(I),f.width=F(I),D=Math.floor(y.height())>h.clientHeight||"scroll"==p.css("overflow-y"),f[m="padding"+(S.bScrollbarLeft?"Left":"Right")]=D?i+"px":"0px",x&&(b[0].style.width=F(I),v[0].style.width=F(I),v[0].style[m]=D?i+"px":"0px"),y.children("colgroup").insertBefore(y.children("thead")),p.trigger("scroll"),!e.bSorted&&!e.bFiltered||e._drawHold||(h.scrollTop=0))}function A(e,t,n){for(var a,r,o=0,i=0,l=t.length;i=o.length?[0,t[1]]:t)})),void 0!==e.search&&V.extend(n.oPreviousSearch,e.search),e.columns){for(a=0,r=e.columns.length;ae?new U(t[e],this[e]):null},filter:function(e){e=n.filter.call(this,e,this);return new U(this.context,e)},flatten:function(){var e=[];return new U(this.context,e.concat.apply(e,this.toArray()))},get:function(e){return this[e]},join:n.join,includes:function(e){return-1!==this.indexOf(e)},indexOf:n.indexOf,iterator:function(e,t,n,a){var r,o,i,l,s,u,c,d,f=[],h=this.context,p=this.selector;for("string"==typeof e&&(a=n,n=t,t=e,e=!1),o=0,i=h.length;o").html(r),e.captionNode=n[0],o)||(t.prepend(n),o=n.css("caption-side")),n.html(r),o&&(n.css("caption-side",o),n[0]._captionSide=o),(a.find("div.dataTables_scroll").length?(e="top"===o?"Head":"Foot",a.find("div.dataTables_scroll"+e+" table")):t).prepend(n)},1)}),t("caption.node()",function(){var e=this.context;return e.length?e[0].captionNode:null}),t("draw()",function(t){return this.iterator("table",function(e){"page"===t?C(e):c(e,!1===(t="string"==typeof t?"full-hold"!==t:t))})}),t("page()",function(t){return void 0===t?this.page.info().page:this.iterator("table",function(e){He(e,t)})}),t("page.info()",function(){var e,t,n,a,r;if(0!==this.context.length)return t=(e=this.context[0])._iDisplayStart,n=e.oFeatures.bPaginate?e._iDisplayLength:-1,a=e.fnRecordsDisplay(),{page:(r=-1===n)?0:Math.floor(t/n),pages:r?1:Math.ceil(a/n),start:t,end:e.fnDisplayEnd(),length:n,recordsTotal:e.fnRecordsTotal(),recordsDisplay:a,serverSide:"ssp"===ee(e)}}),t("page.len()",function(t){return void 0===t?0!==this.context.length?this.context[0]._iDisplayLength:void 0:this.iterator("table",function(e){Ee(e,t)})}),t("ajax.json()",function(){var e=this.context;if(0").attr("data-dt-row",i.idx).addClass(t),V("td",n).addClass(t).html(e)[0].colSpan=B(o),s.push(n[0]))}var s=[];l(e,t),i._details&&i._details.detach(),i._details=V(s),i._detailsShow&&i._details.insertAfter(i.nTr)}function st(e,t){var n=e.context;if(n.length&&e.length){var a=n[0].aoData[e[0]];if(a._details){(a._detailsShow=t)?(a._details.insertAfter(a.nTr),V(a.nTr).addClass("dt-hasChild")):(a._details.detach(),V(a.nTr).removeClass("dt-hasChild")),K(n[0],null,"childRow",[t,e.row(e[0])]);var i=n[0],r=new U(i),a=".dt.DT_details",t="draw"+a,e="column-sizing"+a,a="destroy"+a,l=i.aoData;if(r.off(t+" "+e+" "+a),f(l,"_details").length>0){r.on(t,function(e,t){if(i!==t)return;r.rows({page:"current"}).eq(0).each(function(e){var t=l[e];if(t._detailsShow)t._details.insertAfter(t.nTr)})});r.on(e,function(e,t){if(i!==t)return;var n,a=B(t);for(var r=0,o=l.length;r
').html(n)[0]:V("