From 3c6ec7b9275d7f427ca69fee87ddb93657cdc092 Mon Sep 17 00:00:00 2001 From: PSPDFKit Date: Tue, 19 Dec 2023 13:39:02 +0200 Subject: [PATCH] Release 2.8.0 --- .eslintrc.js | 6 +- .gitignore | 3 + ACKNOWLEDGEMENTS.md | 1088 +- CHANGELOG.md | 29 +- README.md | 12 +- android/build.gradle | 19 +- android/src/main/AndroidManifest.xml | 4 + .../com/pspdfkit/react/PSPDFKitModule.java | 43 +- .../pspdfkit/react/helper/PSPDFKitUtils.kt | 33 + .../react/menu/ReactGroupingRule.java | 76 +- .../main/java/com/pspdfkit/views/PdfView.java | 109 +- .../views/PdfViewDocumentListener.java | 19 +- .../jsdoc-assets/css/components/_code.css | 25 + .../jsdoc-assets/css/components/_dash.css | 59 + .../jsdoc-assets/css/components/_grid.css | 11 + .../jsdoc-assets/css/components/_header.css | 94 + .../css/components/_main-content.css | 228 + .../jsdoc-assets/css/components/_nav-sub.css | 78 + .../css/components/_scaffolding.css | 58 + .../jsdoc-assets/css/components/_search.css | 63 + .../jsdoc-assets/css/components/_sidebar.css | 68 + documentation/jsdoc-assets/css/highlight.css | 260 + .../jsdoc-assets/css/jsdoc-stock.css | 350 + documentation/jsdoc-assets/img/dash.png | Bin 0 -> 416 bytes documentation/jsdoc-assets/img/favicon.ico | Bin 0 -> 34494 bytes documentation/jsdoc-assets/img/pspdfkit.svg | 1 + documentation/jsdoc-assets/js/jazzy.js | 103 + documentation/jsdoc-assets/js/jquery.min.js | 5789 ++++++ .../vendor/bootstrap/css/bootstrap.css | 7162 ++++++++ .../vendor/bootstrap/css/bootstrap.css.map | 1 + .../vendor/bootstrap/js/bootstrap.js | 2616 +++ documentation/jsdoc-layout.tmpl | 166 + documentation/jsdoc.md | 30 + index.js | 1149 +- .../RCTConvert+PSPDFConfiguration.m | 4 + ios/RCTPSPDFKit/InstantDocumentInfo.swift | 10 +- ios/RCTPSPDFKit/RCTPSPDFKitManager.m | 11 +- ios/RCTPSPDFKit/RCTPSPDFKitViewManager.m | 4 + jsdoc.json | 26 + package-lock.json | 13947 +++++++++++++++ package.json | 41 +- react-native-pspdfkit.podspec | 6 +- samples/Catalog/.eslintrc.js | 2 +- samples/Catalog/.tool-versions | 1 + samples/Catalog/{Catalog.js => Catalog.tsx} | 21 +- ...tionMenu.js => ExamplesNavigationMenu.tsx} | 256 +- .../legacy_tests/AnnotationToolbarScreen.js | 53 - .../legacy_tests/AuthorNameScreen.js | 41 - .../__tests__/legacy_tests/FormsScreen.js | 78 - .../legacy_tests/GetAnnotationsScreen.js | 72 - .../Catalog/__tests__/legacy_tests/Testing.js | 137 - .../Catalog/__tests__/legacy_tests/styles.js | 70 - samples/Catalog/android/app/build.gradle | 14 +- .../com/pspdfkit/rn/ReactNativeFlipper.java | 75 - .../java/com/pspdfkit/rn/MainApplication.java | 1 + .../com/pspdfkit/rn/ReactNativeFlipper.java | 20 - samples/Catalog/android/build.gradle | 8 +- samples/Catalog/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- samples/Catalog/android/gradlew | 8 +- samples/Catalog/android/settings.gradle | 2 +- samples/Catalog/babel.config.js | 2 +- .../{linkButton.js => linkButton.tsx} | 1 + .../{primaryButton.js => primaryButton.tsx} | 1 + .../components/{urlInput.js => urlInput.tsx} | 3 + .../{Constants.js => Constants.ts} | 7 +- ...n.js => AnnotationPresetCustomization.tsx} | 8 +- ...Processing.js => AnnotationProcessing.tsx} | 67 +- ...stomFontPicker.js => CustomFontPicker.tsx} | 13 +- .../{EventListeners.js => EventListeners.tsx} | 37 +- .../{GeneratePDF.js => GeneratePDF.tsx} | 8 +- ...GeneratePDFMenu.js => GeneratePDFMenu.tsx} | 8 +- .../{HiddenToolbar.js => HiddenToolbar.tsx} | 31 +- .../{HomeScreen.js => HomeScreen.tsx} | 8 +- ...nization.js => InstantSynchronization.tsx} | 80 +- .../{ManualSave.js => ManualSave.tsx} | 24 +- .../{Measurement.js => Measurement.tsx} | 24 +- ...ImageDocument.js => OpenImageDocument.tsx} | 10 +- ...Component.js => PSPDFKitViewComponent.tsx} | 7 +- ...tations.js => ProgrammaticAnnotations.tsx} | 102 +- ...Filling.js => ProgrammaticFormFilling.tsx} | 148 +- .../examples/{SaveAs.js => SaveAs.tsx} | 37 +- .../examples/{SplitPDF.js => SplitPDF.tsx} | 17 +- .../{StateChange.js => StateChange.tsx} | 41 +- ...tomization.js => ToolbarCustomization.tsx} | 22 +- ... BaseExampleAutoHidingHeaderComponent.tsx} | 12 +- ...ion.js => ExampleDocumentConfiguration.ts} | 0 .../helpers/{FileHelper.js => FileHelper.ts} | 26 +- ...eSystemHelpers.js => FileSystemHelpers.ts} | 2 +- .../{ImageHelper.js => ImageHelper.ts} | 2 +- ...avigationHelper.js => NavigationHelper.ts} | 1 + .../helpers/{PSPDFKit.js => PSPDFKit.ts} | 0 .../api/{ApiClient.js => ApiClient.ts} | 12 +- .../api/{ApiConfig.js => ApiConfig.ts} | 2 +- .../api/{ApiRequest.js => ApiRequest.ts} | 31 +- .../ios/Catalog.xcodeproj/project.pbxproj | 111 +- samples/Catalog/ios/Catalog/AppDelegate.mm | 6 - samples/Catalog/ios/Catalog/Info.plist | 12 +- samples/Catalog/ios/Podfile | 20 +- samples/Catalog/ios/Podfile.lock | 1452 +- samples/Catalog/metro.config.js | 20 +- samples/Catalog/package.json | 84 +- samples/Catalog/styles/styles.js | 2 +- samples/Catalog/tsconfig.json | 31 +- samples/Catalog/yarn.lock | 6311 ++++--- samples/NativeCatalog/.eslintrc.js | 2 +- samples/NativeCatalog/NativeCatalog.js | 12 +- .../NativeCatalog/android/app/build.gradle | 27 +- .../nativecatalog/ReactNativeFlipper.java | 69 - .../android/app/src/main/AndroidManifest.xml | 3 +- .../nativecatalog/MainApplication.java | 1 + samples/NativeCatalog/android/build.gradle | 6 +- .../NativeCatalog/android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- samples/NativeCatalog/android/settings.gradle | 2 +- samples/NativeCatalog/babel.config.js | 2 +- .../NativeCatalog/examples/ManualSigning.js | 4 +- .../NativeCatalog.xcodeproj/project.pbxproj | 35 +- .../ios/NativeCatalog/AppDelegate.m | 9 +- .../InstantExample/InstantDocumentInfo.swift | 9 +- .../InstantDocumentViewController.swift | 6 +- .../ios/NativeCatalog/Info.plist | 12 +- samples/NativeCatalog/ios/Podfile | 75 +- samples/NativeCatalog/ios/Podfile.lock | 1527 +- samples/NativeCatalog/metro.config.js | 20 +- samples/NativeCatalog/package-lock.json | 14480 ++++++++++++++++ samples/NativeCatalog/package.json | 49 +- samples/NativeCatalog/yarn.lock | 7272 ++++---- tsconfig.json | 13 + types-scripts/append.js | 9 + types-scripts/fix-code-tags.js | 20 + types-scripts/native-modules.ts | 9 + types/index.d.ts | 1173 ++ types/index.d.ts.map | 1 + yarn.lock | 5078 ------ 135 files changed, 58774 insertions(+), 14665 deletions(-) create mode 100644 android/src/main/java/com/pspdfkit/react/helper/PSPDFKitUtils.kt create mode 100644 documentation/jsdoc-assets/css/components/_code.css create mode 100644 documentation/jsdoc-assets/css/components/_dash.css create mode 100644 documentation/jsdoc-assets/css/components/_grid.css create mode 100644 documentation/jsdoc-assets/css/components/_header.css create mode 100644 documentation/jsdoc-assets/css/components/_main-content.css create mode 100644 documentation/jsdoc-assets/css/components/_nav-sub.css create mode 100644 documentation/jsdoc-assets/css/components/_scaffolding.css create mode 100644 documentation/jsdoc-assets/css/components/_search.css create mode 100644 documentation/jsdoc-assets/css/components/_sidebar.css create mode 100644 documentation/jsdoc-assets/css/highlight.css create mode 100644 documentation/jsdoc-assets/css/jsdoc-stock.css create mode 100644 documentation/jsdoc-assets/img/dash.png create mode 100644 documentation/jsdoc-assets/img/favicon.ico create mode 100644 documentation/jsdoc-assets/img/pspdfkit.svg create mode 100755 documentation/jsdoc-assets/js/jazzy.js create mode 100755 documentation/jsdoc-assets/js/jquery.min.js create mode 100644 documentation/jsdoc-assets/vendor/bootstrap/css/bootstrap.css create mode 100644 documentation/jsdoc-assets/vendor/bootstrap/css/bootstrap.css.map create mode 100644 documentation/jsdoc-assets/vendor/bootstrap/js/bootstrap.js create mode 100644 documentation/jsdoc-layout.tmpl create mode 100644 documentation/jsdoc.md create mode 100644 jsdoc.json create mode 100644 package-lock.json create mode 100644 samples/Catalog/.tool-versions rename samples/Catalog/{Catalog.js => Catalog.tsx} (88%) rename samples/Catalog/{ExamplesNavigationMenu.js => ExamplesNavigationMenu.tsx} (73%) delete mode 100644 samples/Catalog/__tests__/legacy_tests/AnnotationToolbarScreen.js delete mode 100644 samples/Catalog/__tests__/legacy_tests/AuthorNameScreen.js delete mode 100644 samples/Catalog/__tests__/legacy_tests/FormsScreen.js delete mode 100644 samples/Catalog/__tests__/legacy_tests/GetAnnotationsScreen.js delete mode 100644 samples/Catalog/__tests__/legacy_tests/Testing.js delete mode 100644 samples/Catalog/__tests__/legacy_tests/styles.js delete mode 100644 samples/Catalog/android/app/src/debug/java/com/pspdfkit/rn/ReactNativeFlipper.java delete mode 100644 samples/Catalog/android/app/src/release/java/com/pspdfkit/rn/ReactNativeFlipper.java rename samples/Catalog/components/{linkButton.js => linkButton.tsx} (97%) rename samples/Catalog/components/{primaryButton.js => primaryButton.tsx} (97%) rename samples/Catalog/components/{urlInput.js => urlInput.tsx} (97%) rename samples/Catalog/configuration/{Constants.js => Constants.ts} (83%) rename samples/Catalog/examples/{AnnotationPresetCustomization.js => AnnotationPresetCustomization.tsx} (91%) rename samples/Catalog/examples/{AnnotationProcessing.js => AnnotationProcessing.tsx} (80%) rename samples/Catalog/examples/{CustomFontPicker.js => CustomFontPicker.tsx} (85%) rename samples/Catalog/examples/{EventListeners.js => EventListeners.tsx} (60%) rename samples/Catalog/examples/{GeneratePDF.js => GeneratePDF.tsx} (85%) rename samples/Catalog/examples/{GeneratePDFMenu.js => GeneratePDFMenu.tsx} (89%) rename samples/Catalog/examples/{HiddenToolbar.js => HiddenToolbar.tsx} (75%) rename samples/Catalog/examples/{HomeScreen.js => HomeScreen.tsx} (90%) rename samples/Catalog/examples/{InstantSynchronization.js => InstantSynchronization.tsx} (68%) rename samples/Catalog/examples/{ManualSave.js => ManualSave.tsx} (72%) rename samples/Catalog/examples/{Measurement.js => Measurement.tsx} (83%) rename samples/Catalog/examples/{OpenImageDocument.js => OpenImageDocument.tsx} (81%) rename samples/Catalog/examples/{PSPDFKitViewComponent.js => PSPDFKitViewComponent.tsx} (93%) rename samples/Catalog/examples/{ProgrammaticAnnotations.js => ProgrammaticAnnotations.tsx} (80%) rename samples/Catalog/examples/{ProgrammaticFormFilling.js => ProgrammaticFormFilling.tsx} (50%) rename samples/Catalog/examples/{SaveAs.js => SaveAs.tsx} (71%) rename samples/Catalog/examples/{SplitPDF.js => SplitPDF.tsx} (83%) rename samples/Catalog/examples/{StateChange.js => StateChange.tsx} (78%) rename samples/Catalog/examples/{ToolbarCustomization.js => ToolbarCustomization.tsx} (83%) rename samples/Catalog/helpers/{BaseExampleAutoHidingHeaderComponent.js => BaseExampleAutoHidingHeaderComponent.tsx} (79%) rename samples/Catalog/helpers/{ExampleDocumentConfiguration.js => ExampleDocumentConfiguration.ts} (100%) rename samples/Catalog/helpers/{FileHelper.js => FileHelper.ts} (60%) rename samples/Catalog/helpers/{FileSystemHelpers.js => FileSystemHelpers.ts} (93%) rename samples/Catalog/helpers/{ImageHelper.js => ImageHelper.ts} (70%) rename samples/Catalog/helpers/{NavigationHelper.js => NavigationHelper.ts} (95%) rename samples/Catalog/helpers/{PSPDFKit.js => PSPDFKit.ts} (100%) rename samples/Catalog/helpers/api/{ApiClient.js => ApiClient.ts} (78%) rename samples/Catalog/helpers/api/{ApiConfig.js => ApiConfig.ts} (92%) rename samples/Catalog/helpers/api/{ApiRequest.js => ApiRequest.ts} (51%) delete mode 100644 samples/NativeCatalog/android/app/src/debug/java/com/pspfdkit/nativecatalog/ReactNativeFlipper.java create mode 100644 samples/NativeCatalog/package-lock.json create mode 100644 tsconfig.json create mode 100644 types-scripts/append.js create mode 100644 types-scripts/fix-code-tags.js create mode 100644 types-scripts/native-modules.ts create mode 100644 types/index.d.ts create mode 100644 types/index.d.ts.map delete mode 100644 yarn.lock diff --git a/.eslintrc.js b/.eslintrc.js index d8e3a771..c86af9c2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,10 +1,6 @@ module.exports = { root: true, - extends: [ - 'eslint:recommended', - 'plugin:react/recommended', - '@react-native-community', - ], + extends: ['eslint:recommended', 'plugin:react/recommended', '@react-native'], plugins: ['simple-import-sort'], parserOptions: { ecmaVersion: 12, diff --git a/.gitignore b/.gitignore index 478a6af8..daa2c641 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,7 @@ PSPDFKit/PSPDFKitUI.xcframework # UWP license file samples/Catalog/windows/Catalog/License.xaml +#Jsdoc +jsdoc/ + .fake diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index 91c56cac..bb3417b4 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -266,101 +266,101 @@ SUCH DAMAGE. -------------------------------------------------------------------------------- -## Caveat (https://github.com/googlefonts/caveat) - -Copyright 2014 The Caveat Project Authors (https://github.com/googlefonts/caveat) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +## Caveat (https://github.com/googlefonts/caveat) + +Copyright 2014 The Caveat Project Authors (https://github.com/googlefonts/caveat) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. -------------------------------------------------------------------------------- @@ -1732,86 +1732,292 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- -## Kotlin (https://github.com/JetBrains/kotlin) +## koin (https://github.com/InsertKoinIO/koin) -Copyright 2010-2018 JetBrains s.r.o. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - http://www.apache.org/licenses/LICENSE-2.0 + 1. Definitions. -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. --------------------------------------------------------------------------------- -## Leptonica (http://www.leptonica.org/) + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -/*====================================================================* - - Copyright (C) 2001-2016 Leptonica. All rights reserved. - - - - Redistribution and use in source and binary forms, with or without - - modification, are permitted provided that the following conditions - - are met: - - 1. Redistributions of source code must retain the above copyright - - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above - - copyright notice, this list of conditions and the following - - disclaimer in the documentation and/or other materials - - provided with the distribution. - - - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *====================================================================*/ + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. --------------------------------------------------------------------------------- -## libjpeg-turbo (http://www.libjpeg-turbo.org) + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -libjpeg-turbo Licenses -====================== + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -libjpeg-turbo is covered by three compatible BSD-style open source licenses: + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -- The IJG (Independent JPEG Group) License, which is listed in - [README.ijg](README.ijg) + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." - This license applies to the libjpeg API library and associated programs - (any code inherited from libjpeg, and any modifications to that code.) + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -- The Modified (3-clause) BSD License, which is listed below + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. - This license covers the TurboJPEG API library and associated programs, as - well as the build system. + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -- The [zlib License](https://opensource.org/licenses/Zlib) + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - This license is a subset of the other two, and it covers the libjpeg-turbo - SIMD extensions. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -Complying with the libjpeg-turbo Licenses -========================================= + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -This section provides a roll-up of the libjpeg-turbo licensing terms, to the -best of our understanding. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -1. If you are distributing a modified version of the libjpeg-turbo source, - then: + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017-2023 Arnaud GIULIANI + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +-------------------------------------------------------------------------------- +## Kotlin (https://github.com/JetBrains/kotlin) + +Copyright 2010-2018 JetBrains s.r.o. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +-------------------------------------------------------------------------------- +## Leptonica (http://www.leptonica.org/) + +/*====================================================================* + - Copyright (C) 2001-2016 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + + +-------------------------------------------------------------------------------- +## libjpeg-turbo (http://www.libjpeg-turbo.org) + +libjpeg-turbo Licenses +====================== + +libjpeg-turbo is covered by three compatible BSD-style open source licenses: + +- The IJG (Independent JPEG Group) License, which is listed in + [README.ijg](README.ijg) + + This license applies to the libjpeg API library and associated programs + (any code inherited from libjpeg, and any modifications to that code.) + +- The Modified (3-clause) BSD License, which is listed below + + This license covers the TurboJPEG API library and associated programs, as + well as the build system. + +- The [zlib License](https://opensource.org/licenses/Zlib) + + This license is a subset of the other two, and it covers the libjpeg-turbo + SIMD extensions. + + +Complying with the libjpeg-turbo Licenses +========================================= + +This section provides a roll-up of the libjpeg-turbo licensing terms, to the +best of our understanding. + +1. If you are distributing a modified version of the libjpeg-turbo source, + then: 1. You cannot alter or remove any existing copyright or license notices from the source. @@ -2063,102 +2269,102 @@ OTHER DEALINGS IN THE FONT SOFTWARE. -------------------------------------------------------------------------------- -## Marck Script (https://fonts.google.com/specimen/Marck+Script) - -Copyright (c) 2011, Denis Masharov & Marck Fogel, -with Reserved Font Name "Marck Script". - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +## Marck Script (https://fonts.google.com/specimen/Marck+Script) + +Copyright (c) 2011, Denis Masharov & Marck Fogel, +with Reserved Font Name "Marck Script". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. -------------------------------------------------------------------------------- @@ -2168,102 +2374,102 @@ OTHER DEALINGS IN THE FONT SOFTWARE. are licensed under [CC BY 4.0](http://creativecommons.org/licenses/by/4.0/). -------------------------------------------------------------------------------- -## Meddon (https://fonts.google.com/specimen/Meddon) - -Copyright (c) 2010, 2011 by vernon adams (vern@newtypography.co.uk), -with Reserved Font Name Meddon. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +## Meddon (https://fonts.google.com/specimen/Meddon) + +Copyright (c) 2010, 2011 by vernon adams (vern@newtypography.co.uk), +with Reserved Font Name Meddon. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. -------------------------------------------------------------------------------- @@ -2481,101 +2687,101 @@ OTHER DEALINGS IN THE FONT SOFTWARE. -------------------------------------------------------------------------------- -## Pacifico (https://github.com/googlefonts/Pacifico) - -Copyright 2018 The Pacifico Project Authors (https://github.com/googlefonts/Pacifico) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +## Pacifico (https://github.com/googlefonts/Pacifico) + +Copyright 2018 The Pacifico Project Authors (https://github.com/googlefonts/Pacifico) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. -------------------------------------------------------------------------------- diff --git a/CHANGELOG.md b/CHANGELOG.md index 13481c99..4a3f79e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,19 +1,32 @@ ## Newest Release +### 2.8.0 - 18 Dec 2023 + +- Adds TypeScript types support to PSPDFKit plugin. (#42380) +- Adds support for loading image documents using the PSPDFKit component on Android. (#42692) +- Updates plugin to target React Native 0.72.7. (#42800) +- Updates Android compileSdkVersion to API 34 and Gradle to 8. (#42380) +- Updates PSPDFKit for Android version to 8.10.0. +- Updates PSPDFKit for iOS version to 13.1.0. +- Fixes issue where building iOS project led to "'PSPDFKitReactNativeiOS-Swift.h' file not found" error. (#41986) +- Fixes issue where getAnnotations with invalid page index caused a crash on Android. (#42073) +- Fixes issue where onAnnotationsChanged event did not fire when a form field was updated on Android. (#42525) +- Fixes issue where annotation toolbar color picker wasn't added by default. (#42761) + +## Previous Releases + ### 2.7.0 - 07 Sep 2023 - Adds Annotation Preset customization. (#41528) - Updates for PSPDFKit 8.8.1 for Android. (#41910) - Updates for PSPDFKit 12.3.1 for iOS. (#41910) - Updates the deployment target to iOS 15. (#39956) -- Fixed issue where configuration is overridden by ToolbarMenuItems. (#41681) -- Fixed issue where PDF generation returns "can not get property of null" on iOS. (#41247) -- Fixed annotation toolbar menu grouping customization values. (#41197) -- Fixed issue where the close button is not displayed on iOS. (#41710) -- Fixed issue where showCloseButton config removes all other BarButtonItems on iOS. (#41731) -- Fixed issue where presentInstant uses different parameters on iOS and Android. (#41922) - -## Previous Releases +- Fixes issue where configuration is overridden by ToolbarMenuItems. (#41681) +- Fixes issue where PDF generation returns "can not get property of null" on iOS. (#41247) +- Fixes annotation toolbar menu grouping customization values. (#41197) +- Fixes issue where the close button is not displayed on iOS. (#41710) +- Fixes issue where showCloseButton config removes all other BarButtonItems on iOS. (#41731) +- Fixes issue where presentInstant uses different parameters on iOS and Android. (#41922) ### 2.6.1 - 19 Jun 2023 diff --git a/README.md b/README.md index 3146a6c6..6ca7b14a 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,12 @@ Let's create a simple app that integrates PSPDFKit and uses the `react-native-ps Your Podfile should look like this: ```diff - require_relative '../node_modules/react-native/scripts/react_native_pods' - require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' + # Resolve react_native_pods.rb with node to allow for hoisting + require Pod::Executable.execute_command('node', ['-p', + 'require.resolve( + "react-native/scripts/react_native_pods.rb", + {paths: [process.argv[1]]}, + )', __dir__]).strip - platform :ios, '10.0' + platform :ios, '15.0' @@ -130,7 +134,7 @@ Let's create a simple app that integrates PSPDFKit and uses the `react-native-ps use_flipper!() post_install do |installer| - react_native_post_install(installer) + react_native_post_install(installer, config[:reactNativePath]) end end ``` @@ -542,7 +546,7 @@ Let's create a simple app that integrates PSPDFKit and uses the `react-native-ps pageTransition: 'scrollContinuous', scrollDirection: 'vertical', }} - ref="pdfView" + ref={ this.pdfRef } fragmentTag="PDF1" style={{ flex: 1 }} /> diff --git a/android/build.gradle b/android/build.gradle index 26f91c9c..75049012 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -15,7 +15,7 @@ * Contains gradle configuration constants */ ext { - PSPDFKIT_VERSION = '8.8.1' + PSPDFKIT_VERSION = '8.10.0' } buildscript { @@ -32,7 +32,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.1.0-alpha03' + classpath("com.android.tools.build:gradle:8.1.0") classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -41,24 +41,29 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 33 - buildToolsVersion "30.0.3" + compileSdkVersion 34 + buildToolsVersion "34.0.0" + namespace "com.pspdfkit.react" defaultConfig { minSdkVersion 21 - targetSdkVersion 33 + targetSdkVersion 34 versionCode 1 versionName "1.0" } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } lintOptions { abortOnError false } + + buildFeatures { + buildConfig true + } } dependencies { diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 88b78f67..561a182b 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -21,6 +21,10 @@ + + diff --git a/android/src/main/java/com/pspdfkit/react/PSPDFKitModule.java b/android/src/main/java/com/pspdfkit/react/PSPDFKitModule.java index 012afce5..8c2b2d04 100644 --- a/android/src/main/java/com/pspdfkit/react/PSPDFKitModule.java +++ b/android/src/main/java/com/pspdfkit/react/PSPDFKitModule.java @@ -47,6 +47,7 @@ import com.pspdfkit.react.RNInstantPdfActivity; import com.pspdfkit.listeners.SimpleDocumentListener; import com.pspdfkit.react.helper.ConversionHelpers; +import com.pspdfkit.react.helper.PSPDFKitUtils; import com.pspdfkit.ui.PdfActivity; import com.pspdfkit.ui.PdfFragment; @@ -65,15 +66,7 @@ public class PSPDFKitModule extends ReactContextBaseJavaModule implements Applic private static final int REQUEST_CODE_TO_INDEX = 16; private static final int MASKED_REQUEST_CODE_TO_REAL_CODE = 0xffff; - private static final String[] SUPPORTED_IMAGE_TYPES = new String[] { - ".jpg", - ".png", - ".jpeg", - ".tif", - ".tiff" - }; - - + @Nullable private Activity resumedActivity; @Nullable @@ -115,10 +108,10 @@ public String getName() { @ReactMethod public void present(@NonNull String document, @NonNull ReadableMap configuration, @Nullable Promise promise) { File documentFile = new File(document); - if(isPdf(documentFile)) { + if(PSPDFKitUtils.isValidPdf(documentFile)) { lastPresentPromise = promise; presentPdf(document, configuration, promise); - } else if(isImage(documentFile)) { + } else if(PSPDFKitUtils.isValidImage(documentFile)) { lastPresentPromise = promise; presentImage(document, configuration, promise); }else { @@ -166,7 +159,18 @@ public void presentImage(@NonNull String imageDocument, @NonNull ReadableMap con } @ReactMethod - public void presentInstant(@NonNull String serverUrl, @NonNull String jwt, @NonNull ReadableMap configuration, @Nullable Promise promise) { + public void presentInstant(@NonNull ReadableMap documentData, @NonNull ReadableMap configuration, @Nullable Promise promise) { + String serverUrl = documentData.getString("serverUrl"); + String jwt = documentData.getString("jwt"); + + if (serverUrl == null || jwt == null) { + Throwable error = new Throwable("serverUrl and jwt are required"); + if (promise != null) { + promise.reject(error); + } + return; + } + if (getCurrentActivity() != null) { if (resumedActivity == null) { // We register an activity lifecycle callback so we can get notified of the current activity. @@ -178,7 +182,7 @@ public void presentInstant(@NonNull String serverUrl, @NonNull String jwt, @NonN RNInstantPdfActivity.showInstantDocument(getCurrentActivity(), serverUrl, jwt, configurationAdapter.build()); } } - + @ReactMethod public synchronized void setPageIndex(final int pageIndex, final boolean animated) { if (resumedActivity instanceof PdfActivity) { @@ -447,17 +451,4 @@ public void run() { public void onNewIntent(Intent intent) { // Not required right now. } - - private boolean isPdf(File file) { - return file.getName().toLowerCase().endsWith(".pdf"); - } - - private boolean isImage(File file) { - for (String extension: SUPPORTED_IMAGE_TYPES) { - if (file.getName().toLowerCase().endsWith(extension)) { - return true; - } - } - return false; - } } diff --git a/android/src/main/java/com/pspdfkit/react/helper/PSPDFKitUtils.kt b/android/src/main/java/com/pspdfkit/react/helper/PSPDFKitUtils.kt new file mode 100644 index 00000000..e70540f6 --- /dev/null +++ b/android/src/main/java/com/pspdfkit/react/helper/PSPDFKitUtils.kt @@ -0,0 +1,33 @@ +package com.pspdfkit.react.helper + +import java.io.File +import java.util.Locale + + +class PSPDFKitUtils { + companion object { + + private val SUPPORTED_IMAGE_TYPES = arrayOf( + ".jpg", + ".png", + ".jpeg", + ".tif", + ".tiff" + ) + + @JvmStatic + public fun isValidImage(file: File): Boolean { + for (extension in SUPPORTED_IMAGE_TYPES) { + if (file.name.lowercase(Locale.getDefault()).endsWith(extension)) { + return true + } + } + return false + } + + @JvmStatic + public fun isValidPdf(file: File): Boolean { + return file.name.lowercase(Locale.getDefault()).endsWith(".pdf") + } + } +} \ No newline at end of file diff --git a/android/src/main/java/com/pspdfkit/react/menu/ReactGroupingRule.java b/android/src/main/java/com/pspdfkit/react/menu/ReactGroupingRule.java index d479f9be..e6c7ce5e 100644 --- a/android/src/main/java/com/pspdfkit/react/menu/ReactGroupingRule.java +++ b/android/src/main/java/com/pspdfkit/react/menu/ReactGroupingRule.java @@ -61,11 +61,11 @@ public ReactGroupingRule(@NonNull Context context, @NonNull ReadableArray menuIt } items.add(new MenuItem(id)); } - } - //Add undo and redo to the end of the list - items.add(new MenuItem(R.id.pspdf__annotation_creation_toolbar_item_undo)); - items.add(new MenuItem(R.id.pspdf__annotation_creation_toolbar_item_redo)); + // Add colour picker, undo and redo to the end of the list, as iOS always include these items. + items.add(new MenuItem(com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_picker)); + items.add(new MenuItem(com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_undo)); + items.add(new MenuItem(com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_redo)); } private int[] collectItemIds(ReadableArray items) { @@ -90,73 +90,73 @@ private int[] collectItemIds(ReadableArray items) { private int getIdFromName(@NonNull String name) { switch (name) { case "markup": - return R.id.pspdf__annotation_creation_toolbar_group_markup; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_group_markup; case "writing": - return R.id.pspdf__annotation_creation_toolbar_item_writing; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_writing; case "highlight": - return R.id.pspdf__annotation_creation_toolbar_item_highlight; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_highlight; case "squiggly": - return R.id.pspdf__annotation_creation_toolbar_item_squiggly; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_squiggly; case "strikeout": - return R.id.pspdf__annotation_creation_toolbar_item_strikeout; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_strikeout; case "underline": - return R.id.pspdf__annotation_creation_toolbar_item_underline; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_underline; case "freetext": - return R.id.pspdf__annotation_creation_toolbar_item_freetext; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_freetext; case "freetext_callout": - return R.id.pspdf__annotation_creation_toolbar_item_freetext_callout; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_freetext_callout; case "signature": - return R.id.pspdf__annotation_creation_toolbar_item_signature; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_signature; case "pen": - return R.id.pspdf__annotation_creation_toolbar_item_ink_pen; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_ink_pen; case "highlighter": - return R.id.pspdf__annotation_creation_toolbar_item_ink_highlighter; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_ink_highlighter; case "note": - return R.id.pspdf__annotation_creation_toolbar_item_note; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_note; case "drawing": - return R.id.pspdf__annotation_creation_toolbar_group_drawing; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_group_drawing; case "multimedia": - return R.id.pspdf__annotation_creation_toolbar_group_multimedia; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_group_multimedia; case "image": - return R.id.pspdf__annotation_creation_toolbar_item_image; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_image; case "camera": - return R.id.pspdf__annotation_creation_toolbar_item_camera; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_camera; case "stamp": - return R.id.pspdf__annotation_creation_toolbar_item_stamp; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_stamp; case "line": - return R.id.pspdf__annotation_creation_toolbar_item_line; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_line; case "square": - return R.id.pspdf__annotation_creation_toolbar_item_square; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_square; case "circle": - return R.id.pspdf__annotation_creation_toolbar_item_circle; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_circle; case "polygon": - return R.id.pspdf__annotation_creation_toolbar_item_polygon; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_polygon; case "polyline": - return R.id.pspdf__annotation_creation_toolbar_item_polyline; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_polyline; case "eraser": - return R.id.pspdf__annotation_creation_toolbar_item_eraser; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_eraser; case "redaction": - return R.id.pspdf__annotation_creation_toolbar_item_redaction; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_redaction; case "magic_ink": - return R.id.pspdf__annotation_creation_toolbar_item_magic_ink; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_magic_ink; case "undo_redo": - return R.id.pspdf__annotation_creation_toolbar_group_undo_redo; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_group_undo_redo; case "undo": - return R.id.pspdf__annotation_creation_toolbar_item_undo; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_undo; case "redo": - return R.id.pspdf__annotation_creation_toolbar_item_redo; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_redo; case "measurement": - return R.id.pspdf__annotation_creation_toolbar_group_measurement; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_group_measurement; case "distance": - return R.id.pspdf__annotation_creation_toolbar_item_measurement_distance; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_measurement_distance; case "perimeter": - return R.id.pspdf__annotation_creation_toolbar_item_measurement_perimeter; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_measurement_perimeter; case "area_polygon": - return R.id.pspdf__annotation_creation_toolbar_item_measurement_area_polygon; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_measurement_area_polygon; case "area_square": - return R.id.pspdf__annotation_creation_toolbar_item_measurement_area_rect; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_measurement_area_rect; case "area_circle": - return R.id.pspdf__annotation_creation_toolbar_item_measurement_area_ellipse; + return com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_measurement_area_ellipse; } Log.i(TAG, String.format("Received unknown menu item %s.", name)); diff --git a/android/src/main/java/com/pspdfkit/views/PdfView.java b/android/src/main/java/com/pspdfkit/views/PdfView.java index e0b6c503..1e7d2974 100644 --- a/android/src/main/java/com/pspdfkit/views/PdfView.java +++ b/android/src/main/java/com/pspdfkit/views/PdfView.java @@ -18,11 +18,13 @@ import android.annotation.SuppressLint; import android.content.Context; import android.net.Uri; +import android.os.Build; import android.util.AttributeSet; import android.util.Log; import android.util.Pair; import android.view.Choreographer; import android.view.View; +import android.view.ViewTreeObserver; import android.widget.FrameLayout; import androidx.annotation.NonNull; @@ -39,6 +41,9 @@ import com.pspdfkit.annotations.configuration.AnnotationConfiguration; import com.pspdfkit.annotations.configuration.FreeTextAnnotationConfiguration; import com.pspdfkit.configuration.activity.PdfActivityConfiguration; +import com.pspdfkit.document.DocumentSaveOptions; +import com.pspdfkit.document.ImageDocument; +import com.pspdfkit.document.ImageDocumentLoader; import com.pspdfkit.document.PdfDocument; import com.pspdfkit.document.PdfDocumentLoader; import com.pspdfkit.document.formatters.DocumentJsonFormatter; @@ -60,6 +65,7 @@ import com.pspdfkit.react.events.PdfViewStateChangedEvent; import com.pspdfkit.react.helper.DocumentJsonDataProvider; import com.pspdfkit.react.helper.MeasurementHelper; +import com.pspdfkit.react.helper.PSPDFKitUtils; import com.pspdfkit.ui.DocumentDescriptor; import com.pspdfkit.ui.PdfFragment; import com.pspdfkit.ui.PdfUiFragment; @@ -117,6 +123,7 @@ public class PdfView extends FrameLayout { private PdfActivityConfiguration configuration; private Disposable documentOpeningDisposable; private PdfDocument document; + private String documentPath; private int pageIndex = 0; private boolean isActive = true; @@ -249,18 +256,35 @@ public void setDocument(@Nullable String documentPath) { if (documentOpeningDisposable != null) { documentOpeningDisposable.dispose(); } + this.documentPath = documentPath; updateState(); - documentOpeningDisposable = PdfDocumentLoader.openDocumentAsync(getContext(), Uri.parse(documentPath)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(pdfDocument -> { - PdfView.this.document = pdfDocument; - setupFragment(); - }, throwable -> { - PdfView.this.document = null; - setupFragment(); - eventDispatcher.dispatchEvent(new PdfViewDocumentLoadFailedEvent(getId(), throwable.getMessage())); - }); + + File documentFile = new File(documentPath); + if (PSPDFKitUtils.isValidImage(documentFile)) { + documentOpeningDisposable = ImageDocumentLoader.openDocumentAsync(getContext(), Uri.parse(documentPath)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(imageDocument -> { + PdfView.this.document = imageDocument.getDocument(); + setupFragment(); + }, throwable -> { + PdfView.this.document = null; + setupFragment(); + eventDispatcher.dispatchEvent(new PdfViewDocumentLoadFailedEvent(getId(), throwable.getMessage())); + }); + } else { + documentOpeningDisposable = PdfDocumentLoader.openDocumentAsync(getContext(), Uri.parse(documentPath)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(pdfDocument -> { + PdfView.this.document = pdfDocument; + setupFragment(); + }, throwable -> { + PdfView.this.document = null; + setupFragment(); + eventDispatcher.dispatchEvent(new PdfViewDocumentLoadFailedEvent(getId(), throwable.getMessage())); + }); + } } public void setPageIndex(int pageIndex) { @@ -331,12 +355,14 @@ private void updateAnnotationConfiguration() { updateAnnotationConfigurationDisposable = getPdfFragment() .observeOn(AndroidSchedulers.mainThread()) .subscribe(pdfFragment -> { - pdfFragment.getAnnotationConfiguration().put( - AnnotationTool.FREETEXT,configuration); - pdfFragment.getAnnotationConfiguration().put( - AnnotationType.FREETEXT,configuration); - pdfFragment.getAnnotationConfiguration().put( - AnnotationTool.FREETEXT_CALLOUT,configuration); + if (pdfFragment.getView() != null) { + pdfFragment.getAnnotationConfiguration().put( + AnnotationTool.FREETEXT, configuration); + pdfFragment.getAnnotationConfiguration().put( + AnnotationType.FREETEXT, configuration); + pdfFragment.getAnnotationConfiguration().put( + AnnotationTool.FREETEXT_CALLOUT, configuration); + } }); } @@ -388,9 +414,9 @@ private void setupFragment() { if (pdfFragment == null) { pdfFragment = PdfUiFragmentBuilder.fromDocumentDescriptor(getContext(), DocumentDescriptor.fromDocument(document)) - .configuration(configuration) - .fragmentClass(ReactPdfUiFragment.class) - .build(); + .configuration(configuration) + .fragmentClass(ReactPdfUiFragment.class) + .build(); // We put our internal id so we can track if this fragment belongs to us, used to handle orphaned fragments after hot reloads. pdfFragment.getArguments().putInt(ARG_ROOT_ID, internalId); prepareFragment(pdfFragment, true); @@ -400,7 +426,7 @@ private void setupFragment() { fragmentManager.beginTransaction() .remove(pdfFragment) .commitNow(); - // The document changed create a new PdfFragment. + // The document changed, create a new PdfFragment. pdfFragment = PdfUiFragmentBuilder.fromDocumentDescriptor(getContext(), DocumentDescriptor.fromDocument(document)) .configuration(configuration) .fragmentClass(ReactPdfUiFragment.class) @@ -416,7 +442,9 @@ private void setupFragment() { } if (pdfFragment.getDocument() != null) { - pdfFragment.setPageIndex(pageIndex, true); + if (pageIndex <= document.getPageCount()-1) { + pdfFragment.setPageIndex(pageIndex, true); + } } fragment = pdfFragment; @@ -426,13 +454,39 @@ private void setupFragment() { private void prepareFragment(final PdfUiFragment pdfUiFragment, final boolean attachFragment) { if (attachFragment) { + + getRootView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + // Reattach the fragment if running on API >= 34, there is a compatibility issue with React Native StackScreen fragments. + if (Build.VERSION.SDK_INT >= 34) { + fragmentManager.beginTransaction() + .detach(pdfUiFragment) + .commitNow(); + + fragmentManager.beginTransaction() + .attach(pdfUiFragment) + .commitNow(); + + addView(pdfUiFragment.getView(), LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + attachPdfFragmentListeners(pdfUiFragment); + updateAnnotationConfiguration(); + } + getRootView().getViewTreeObserver().removeOnGlobalLayoutListener(this); + } + }); + fragmentManager.beginTransaction() .add(pdfUiFragment, fragmentTag) .commitNow(); + View fragmentView = pdfUiFragment.getView(); addView(fragmentView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); } + attachPdfFragmentListeners(pdfUiFragment); + } + private void attachPdfFragmentListeners(final PdfUiFragment pdfUiFragment) { pdfUiFragment.setOnContextualToolbarLifecycleListener(pdfViewModeController); pdfUiFragment.getPSPDFKitViews().getFormEditingBarView().addOnFormEditingBarLifecycleListener(pdfViewModeController); ((ReactPdfUiFragment) pdfUiFragment).setReactPdfUiFragmentListener(new ReactPdfUiFragment.ReactPdfUiFragmentListener() { @@ -475,7 +529,9 @@ private void preparePdfFragment(@NonNull PdfFragment pdfFragment) { @Override public void onDocumentLoaded(@NonNull PdfDocument document) { manuallyLayoutChildren(); - pdfFragment.setPageIndex(pageIndex, false); + if (pageIndex <= document.getPageCount()-1) { + pdfFragment.setPageIndex(pageIndex, false); + } updateState(); } }); @@ -484,6 +540,9 @@ public void onDocumentLoaded(@NonNull PdfDocument document) { pdfFragment.addDocumentListener(pdfViewDocumentListener); pdfFragment.addOnAnnotationSelectedListener(pdfViewDocumentListener); pdfFragment.addOnAnnotationUpdatedListener(pdfViewDocumentListener); + if (pdfFragment.getDocument() != null) { + pdfFragment.getDocument().getFormProvider().addOnFormFieldUpdatedListener(pdfViewDocumentListener); + } // Add annotation configurations. if (annotationsConfigurations != null) { @@ -595,6 +654,10 @@ public boolean saveCurrentDocument() throws Exception { } public Single> getAnnotations(final int pageIndex, @Nullable final String type) { + PdfDocument document = fragment.getDocument(); + if (pageIndex > document.getPageCount()-1) { + return Single.just(new ArrayList<>()); + } return getCurrentPdfFragment() .map(PdfFragment::getDocument) .flatMap((Function>) pdfDocument -> diff --git a/android/src/main/java/com/pspdfkit/views/PdfViewDocumentListener.java b/android/src/main/java/com/pspdfkit/views/PdfViewDocumentListener.java index 8893beb7..20d5bb42 100644 --- a/android/src/main/java/com/pspdfkit/views/PdfViewDocumentListener.java +++ b/android/src/main/java/com/pspdfkit/views/PdfViewDocumentListener.java @@ -24,6 +24,9 @@ import com.pspdfkit.annotations.AnnotationProvider; import com.pspdfkit.document.DocumentSaveOptions; import com.pspdfkit.document.PdfDocument; +import com.pspdfkit.forms.FormElement; +import com.pspdfkit.forms.FormField; +import com.pspdfkit.forms.FormListeners; import com.pspdfkit.listeners.DocumentListener; import com.pspdfkit.react.events.PdfViewAnnotationChangedEvent; import com.pspdfkit.react.events.PdfViewAnnotationTappedEvent; @@ -34,7 +37,7 @@ import java.util.List; -class PdfViewDocumentListener implements DocumentListener, AnnotationManager.OnAnnotationSelectedListener, AnnotationProvider.OnAnnotationUpdatedListener { +class PdfViewDocumentListener implements DocumentListener, AnnotationManager.OnAnnotationSelectedListener, AnnotationProvider.OnAnnotationUpdatedListener, FormListeners.OnFormFieldUpdatedListener { @NonNull private final PdfView parent; @@ -50,7 +53,6 @@ class PdfViewDocumentListener implements DocumentListener, AnnotationManager.OnA this.eventDispatcher = eventDispatcher; } - public void setDisableDefaultActionForTappedAnnotations(boolean disableDefaultActionForTappedAnnotations) { this.disableDefaultActionForTappedAnnotations = disableDefaultActionForTappedAnnotations; } @@ -145,4 +147,17 @@ public void onAnnotationRemoved(@NonNull Annotation annotation) { public void onAnnotationZOrderChanged(int i, @NonNull List list, @NonNull List list1) { // Not required. } + + @Override + public void onFormFieldUpdated(@NonNull FormField formField) { + Annotation annotation = formField.getFormElement().getAnnotation(); + if (annotation != null) { + eventDispatcher.dispatchEvent(new PdfViewAnnotationChangedEvent(parent.getId(), PdfViewAnnotationChangedEvent.EVENT_TYPE_CHANGED, annotation)); + } + } + + @Override + public void onFormFieldReset(@NonNull FormField formField, @NonNull FormElement formElement) { + // Not used. + } } diff --git a/documentation/jsdoc-assets/css/components/_code.css b/documentation/jsdoc-assets/css/components/_code.css new file mode 100644 index 00000000..2fc63fcb --- /dev/null +++ b/documentation/jsdoc-assets/css/components/_code.css @@ -0,0 +1,25 @@ +pre, +code { + font: + 12px Menlo, + monospace; + color: #777; + word-break: break-word; + margin: 0; +} + +pre { + margin: 1em 0; + display: table; +} + +pre code { + white-space: pre; +} + +p code, +li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; +} diff --git a/documentation/jsdoc-assets/css/components/_dash.css b/documentation/jsdoc-assets/css/components/_dash.css new file mode 100644 index 00000000..eebb6f00 --- /dev/null +++ b/documentation/jsdoc-assets/css/components/_dash.css @@ -0,0 +1,59 @@ +.dash-link { + float: right; + display: block; + background: #414141; + color: #fff; + padding: 2px 6px; + line-height: 20px; +} + +.dash-link:hover { + color: #fff; +} + +.dash-link img { + width: 20px; + height: 20px; + margin-right: 5px; +} + +html.dash .dash-link { + display: none; +} + +html.dash .container-col-sidebar, +html.dash .nav-sub { + display: none; +} + +html.dash .container-col-content, +html.dash .main-content { + width: 100% !important; + height: 100% !important; + display: block !important; + border: none; +} + +html.dash .height-container { + display: block; +} + +html.dash .item .token { + margin-left: 0; +} + +html.dash .content-wrapper { + width: auto; +} + +html.dash .pointer-container { + display: none; +} + +html.dash .height-container .section { + background: #fff; +} + +html.dash h3 { + margin: 0; +} diff --git a/documentation/jsdoc-assets/css/components/_grid.css b/documentation/jsdoc-assets/css/components/_grid.css new file mode 100644 index 00000000..eca008e0 --- /dev/null +++ b/documentation/jsdoc-assets/css/components/_grid.css @@ -0,0 +1,11 @@ +.col-xs-12 { + padding-left: 0; + padding-right: 0; +} + +@media (min-width: 768px) { + .col-xs-12 { + padding-left: 15px; + padding-right: 15px; + } +} diff --git a/documentation/jsdoc-assets/css/components/_header.css b/documentation/jsdoc-assets/css/components/_header.css new file mode 100644 index 00000000..5685d0e7 --- /dev/null +++ b/documentation/jsdoc-assets/css/components/_header.css @@ -0,0 +1,94 @@ +.header { + background: #fff; +} + +.nav-bar { + font-family: 'Canal Medium', Helvetica, Arial, sans-serif; + background: #fff; + font-weight: 400; + line-height: 29.05px; + color: #495057; + text-align: left; + max-width: 1140px; + margin: 0 auto; + padding: 0 15px; + display: flex; + justify-content: space-around; + height: 62px; +} + +.nav-bar .nav-brand { + padding: 0.4em 0; + margin-right: 2vw; +} + +.nav-bar .nav-block { + display: flex; + list-style: none; + margin: 0; + padding: 0; +} + +.nav-bar .nav-block-first { + width: 60vw; + max-width: 500px; + margin-right: auto; +} + +.nav-bar .nav-block-last { + width: 30vw; + max-width: 300px; + margin-left: auto; + justify-content: flex-end; +} + +.nav-bar .nav-item { + margin: 0 1vw; + border-top: 5px solid transparent; + padding-top: 15.8833px; +} + +.nav-bar .nav-item.active { + border-top-color: #3d73d3; +} + +.nav-bar .nav-item.active > .nav-link { + color: #3d73d3; +} + +.nav-bar .nav-link { + white-space: nowrap; + text-transform: uppercase; + font-size: 14.3px; + color: #495057; + margin: 0; + padding: 0; +} + +.nav-bar .nav-link:hover { + text-decoration: none; + color: #495057; +} + +.nav-bar .nav-form { + margin-top: 10px; +} + +.nav-bar .nav-btn { + margin-top: -6.35px; + padding-bottom: 4.76667px; + padding-left: 12.7px; + padding-right: 12.7px; + padding-top: 6.35px; + border-radius: 4.76667px; + display: block; +} + +.nav-bar .nav-btn { + background: #3d73d3; + color: #fff; +} + +.nav-bar .nav-text { + padding-top: 1.1rem; +} diff --git a/documentation/jsdoc-assets/css/components/_main-content.css b/documentation/jsdoc-assets/css/components/_main-content.css new file mode 100644 index 00000000..4a577a35 --- /dev/null +++ b/documentation/jsdoc-assets/css/components/_main-content.css @@ -0,0 +1,228 @@ +.main-content { + background: #fff; + padding-bottom: 20px; + border-radius: 0.3rem; + overflow-y: auto; + overflow-x: hidden; +} + +@media (min-width: 992px) { + .main-content { + height: calc(100vh - 150px); + border: 1px solid #e2e2e2; + } +} + +.main-content p, +.main-content a, +.main-content code, +.main-content em, +.main-content ul, +.main-content table, +.main-content blockquote { + margin-bottom: 1em; +} + +.main-content p { + line-height: 1.8em; +} + +.main-content section .section:first-child { + margin-top: 0; + padding-top: 20px; +} + +.main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; +} + +.main-content section .task-group ul { + padding-left: 0; +} + +.main-content + section + .task-group-section + .task-group:first-of-type + .section-name { + padding-top: 15px; +} + +.section { + padding: 0 20px; +} + +@media (min-width: 768px) { + .section { + padding: 20px 40px; + } +} + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; +} + +.declaration .highlight { + padding: 0; + background-color: transparent; + border: none; +} + +.section-name { + margin: 0; + margin-left: 18px; +} + +.task-group-section { + border-top: 1px solid #e2e2e2; +} + +.task-group { + padding-top: 0px; +} + +.task-name-container a[name]:before { + content: ''; + display: block; + padding-top: 70px; + margin: -70px 0 0; +} + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; +} + +.item a[name]:before { + content: ''; + display: block; + padding-top: 70px; + margin: -70px 0 0; +} + +.item code { + background-color: transparent; + padding: 0; +} + +.item .token { + padding-left: 3px; + margin-left: 15px; + font-size: 11.9px; +} + +.item .declaration-note { + font-size: 0.85em; + color: gray; + font-style: italic; +} + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + padding-bottom: 13px; +} + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 8%; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; +} + +.height-container { + display: none; + position: relative; + overflow: hidden; + margin-left: -7%; + width: 114%; +} + +.height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + position: relative; + padding: 10px 20px; + padding-left: 7%; +} + +.aside, +.language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; +} + +.aside .aside-title, +.language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; +} + +.aside p:last-child, +.language p:last-child { + margin-bottom: 0; +} + +.language { + border-left: 5px solid #cde9f4; +} + +.language .aside-title { + color: #4b8afb; +} + +.aside-warning { + border-left: 5px solid #ff6666; +} + +.aside-warning .aside-title { + color: #ff0000; +} + +.graybox { + border-collapse: collapse; + width: 100%; +} + +.graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; +} + +.graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; +} + +.graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + white-space: nowrap; + width: 40px; +} + +.slightly-smaller { + font-size: 0.9em; +} diff --git a/documentation/jsdoc-assets/css/components/_nav-sub.css b/documentation/jsdoc-assets/css/components/_nav-sub.css new file mode 100644 index 00000000..7f81ee90 --- /dev/null +++ b/documentation/jsdoc-assets/css/components/_nav-sub.css @@ -0,0 +1,78 @@ +.nav-sub, +.nav-sub * { + box-sizing: border-box; +} + +.nav-sub .container { + max-width: 1140px; + margin: 0 auto; + padding: 0 15px; + width: 100%; +} + +.nav-sub .d-flex { + height: 39px; + margin: 15.88px 0; + display: flex; + align-items: center; +} + +@media (min-width: 768px) { + .nav-sub .ml-lg-auto { + margin-left: auto; + } +} + +.nav-sub .nav-breadcrumb { + padding: 0; + margin: 0; + background: 0; +} + +.nav-sub .nav { + display: flex; + list-style: none; + padding: 0; + margin: 0; +} + +.nav-sub .nav li { + padding-bottom: 0; +} + +.nav-sub .nav a { + padding: 8px 16px; +} + +.nav-sub .nav li:last-child a { + padding-right: 0; +} + +.nav-sub a { + font-family: + Canal Regular, + Helvetica, + Arial, + sans-serif; + font-size: 13.2px; + color: #49505780; +} + +.nav-sub a:hover { + background: none !important; + text-decoration: none; +} + +.nav-sub .nav-link:hover, +.nav-sub .nav-link.active, +.nav-sub .breadcrumb-item:hover { + color: #21b0cc; +} + +.nav-sub .breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + padding-left: 0.5rem; + color: #49505780; + content: '/'; +} diff --git a/documentation/jsdoc-assets/css/components/_scaffolding.css b/documentation/jsdoc-assets/css/components/_scaffolding.css new file mode 100644 index 00000000..a14a33d1 --- /dev/null +++ b/documentation/jsdoc-assets/css/components/_scaffolding.css @@ -0,0 +1,58 @@ +body { + background: #f7fcfc; + font-family: 'Canal Book', Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.7; + word-wrap: break-word; +} + +h1, +h2, +h3 { + font-family: 'Canal Medium'; + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 300; +} + +h1 { + font-size: 2.5em; +} + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; + margin-bottom: 10px; + padding-bottom: 10px; +} + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; +} + +h5 { + font-size: 1.1em; +} + +h6 { + font-size: 1.1em; + color: $code_color; +} + +ul { + padding-left: 15px; +} + +ul > li { + line-height: 1.8; +} + +.section-name { + color: rgba(128, 128, 128, 1); + display: block; + font-size: 22px; + font-weight: 300; + margin-bottom: 15px; +} diff --git a/documentation/jsdoc-assets/css/components/_search.css b/documentation/jsdoc-assets/css/components/_search.css new file mode 100644 index 00000000..dceedbcd --- /dev/null +++ b/documentation/jsdoc-assets/css/components/_search.css @@ -0,0 +1,63 @@ +.form-search .form-group { + position: relative; +} + +/* Typeahead */ + +.tt-input { + width: 300px; + min-height: 40px; + padding-left: 15px; + border-radius: 30px; +} + +.tt-menu { + line-height: 1.4; +} + +.tt-hint { + color: #ccc; +} + +.tt-highlight { + font-weight: 500; +} + +.tt-spinner { + position: absolute; + right: 10px; + top: 10px; + opacity: 0; +} + +.tt-spinner.in { + opacity: 1; +} + +.tt-suggestion span { + display: table-cell; + white-space: nowrap; + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; +} + +.tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 13px; + color: #666; +} + +.tt-suggestion:hover, +.tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #0097cf; + color: #fff; +} + +.tt-suggestion:hover .doc-parent-name, +.tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; +} diff --git a/documentation/jsdoc-assets/css/components/_sidebar.css b/documentation/jsdoc-assets/css/components/_sidebar.css new file mode 100644 index 00000000..15a2d36d --- /dev/null +++ b/documentation/jsdoc-assets/css/components/_sidebar.css @@ -0,0 +1,68 @@ +.sidebar { + overflow-y: auto; + overflow-x: hidden; + word-wrap: normal; + background: #fff; + border-bottom: 1px solid #e2e2e2; + border-radius: 0.3rem; +} + +@media (min-width: 992px) { + .sidebar { + height: calc(100vh - 150px); + border: 1px solid #e2e2e2; + } +} + +.sidebar a { + text-overflow: ellipsis; + max-width: 100%; + overflow: hidden; + display: block; + padding-right: 20px; +} + +.nav-groups { + list-style-type: none; + padding-left: 0; +} + +.nav-groups-select { + background: #f7fcfc; + padding: 15px; +} + +@media (min-width: 768px) { + .nav-groups-select { + background: none; + } +} + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + padding: 15px 0 15px 20px; + color: #333; +} + +.nav-group-tasks { + margin-top: 5px; + padding-left: 0; +} + +.nav-group-name.active .nav-group-tasks { + display: block; +} + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; +} + +.nav-group-task a { + color: #888; +} + +.nav-group-task a.active { + color: black; +} diff --git a/documentation/jsdoc-assets/css/highlight.css b/documentation/jsdoc-assets/css/highlight.css new file mode 100644 index 00000000..43e194e5 --- /dev/null +++ b/documentation/jsdoc-assets/css/highlight.css @@ -0,0 +1,260 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ +} +.highlight .c { + color: #999988; + font-style: italic; +} +.highlight .err { + color: #a61717; + background-color: #e3d2d2; +} +.highlight .k { + color: #000000; + font-weight: bold; +} +.highlight .o { + color: #000000; + font-weight: bold; +} +.highlight .cm { + color: #999988; + font-style: italic; +} +.highlight .cp { + color: #999999; + font-weight: bold; +} +.highlight .c1 { + color: #999988; + font-style: italic; +} +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; +} +.highlight .gd { + color: #000000; + background-color: #ffdddd; +} +.highlight .gd .x { + color: #000000; + background-color: #ffaaaa; +} +.highlight .ge { + color: #000000; + font-style: italic; +} +.highlight .gr { + color: #aa0000; +} +.highlight .gh { + color: #999999; +} +.highlight .gi { + color: #000000; + background-color: #ddffdd; +} +.highlight .gi .x { + color: #000000; + background-color: #aaffaa; +} +.highlight .go { + color: #888888; +} +.highlight .gp { + color: #555555; +} +.highlight .gs { + font-weight: bold; +} +.highlight .gu { + color: #aaaaaa; +} +.highlight .gt { + color: #aa0000; +} +.highlight .kc { + color: #000000; + font-weight: bold; +} +.highlight .kd { + color: #000000; + font-weight: bold; +} +.highlight .kp { + color: #000000; + font-weight: bold; +} +.highlight .kr { + color: #000000; + font-weight: bold; +} +.highlight .kt { + color: #445588; +} +.highlight .m { + color: #009999; +} +.highlight .s { + color: #d14; +} +.highlight .na { + color: #008080; +} +.highlight .nb { + color: #0086b3; +} +.highlight .nc { + color: #445588; + font-weight: bold; +} +.highlight .no { + color: #008080; +} +.highlight .ni { + color: #800080; +} +.highlight .ne { + color: #990000; + font-weight: bold; +} +.highlight .nf { + color: #990000; +} +.highlight .nn { + color: #555555; +} +.highlight .nt { + color: #000080; +} +.highlight .nv { + color: #008080; +} +.highlight .ow { + color: #000000; + font-weight: bold; +} +.highlight .w { + color: #bbbbbb; +} +.highlight .mf { + color: #009999; +} +.highlight .mh { + color: #009999; +} +.highlight .mi { + color: #009999; +} +.highlight .mo { + color: #009999; +} +.highlight .sb { + color: #d14; +} +.highlight .sc { + color: #d14; +} +.highlight .sd { + color: #d14; +} +.highlight .s2 { + color: #d14; +} +.highlight .se { + color: #d14; +} +.highlight .sh { + color: #d14; +} +.highlight .si { + color: #d14; +} +.highlight .sx { + color: #d14; +} +.highlight .sr { + color: #009926; +} +.highlight .s1 { + color: #d14; +} +.highlight .ss { + color: #990073; +} +.highlight .bp { + color: #999999; +} +.highlight .vc { + color: #008080; +} +.highlight .vg { + color: #008080; +} +.highlight .vi { + color: #008080; +} +.highlight .il { + color: #009999; +} diff --git a/documentation/jsdoc-assets/css/jsdoc-stock.css b/documentation/jsdoc-assets/css/jsdoc-stock.css new file mode 100644 index 00000000..570bbc3d --- /dev/null +++ b/documentation/jsdoc-assets/css/jsdoc-stock.css @@ -0,0 +1,350 @@ +@font-face { + font-family: 'Open Sans'; + font-weight: normal; + font-style: normal; + src: url('../fonts/OpenSans-Regular-webfont.eot'); + src: + local('Open Sans'), + local('OpenSans'), + url('../fonts/OpenSans-Regular-webfont.eot?#iefix') + format('embedded-opentype'), + url('../fonts/OpenSans-Regular-webfont.woff') format('woff'), + url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg'); +} + +@font-face { + font-family: 'Open Sans Light'; + font-weight: normal; + font-style: normal; + src: url('../fonts/OpenSans-Light-webfont.eot'); + src: + local('Open Sans Light'), + local('OpenSans Light'), + url('../fonts/OpenSans-Light-webfont.eot?#iefix') + format('embedded-opentype'), + url('../fonts/OpenSans-Light-webfont.woff') format('woff'), + url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg'); +} + +/* html +{ + overflow: auto; + background-color: #fff; + font-size: 14px; +} */ + +body { + font-family: 'Open Sans', sans-serif; + line-height: 1.5; + color: #4d4e53; + /* background-color: white; */ +} + +a, +a:visited, +a:active { + color: #0095dd; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +header { + display: block; + padding: 0px 4px; +} + +tt, +code, +kbd, +samp { + font-family: Consolas, Monaco, 'Andale Mono', monospace; +} + +.class-description { + font-size: 130%; + line-height: 140%; + margin-bottom: 1em; + margin-top: 1em; +} + +.class-description:empty { + margin: 0; +} + +/* #main { + float: left; + width: 70%; +} */ + +article dl { + margin-bottom: 40px; +} + +article img { + max-width: 100%; +} + +/* section +{ + display: block; + background-color: #fff; + padding: 12px 24px; + border-bottom: 1px solid #ccc; + margin-right: 30px; +} */ + +.variation { + display: none; +} + +.signature-attributes { + font-size: 60%; + color: #aaa; + font-style: italic; + font-weight: lighter; +} + +/* nav +{ + display: block; + float: right; + margin-top: 28px; + width: 30%; + box-sizing: border-box; + border-left: 1px solid #ccc; + padding-left: 16px; +} */ + +/* nav ul { + font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; + font-size: 100%; + line-height: 17px; + padding: 0; + margin: 0; + list-style-type: none; +} + +nav ul a, nav ul a:visited, nav ul a:active { + font-family: Consolas, Monaco, 'Andale Mono', monospace; + line-height: 18px; + color: #4D4E53; +} + +nav h3 { + margin-top: 12px; +} + +nav li { + margin-top: 6px; +} */ + +footer { + text-align: center; + padding: 6px; + margin-top: 12px; + font-style: italic; + font-size: 90%; +} + +h4 { + font-size: 18px; + letter-spacing: -0.33px; + margin-bottom: 12px; + color: #4d4e53; +} + +h5, +.container-overview .subsection-title { + font-size: 120%; + font-weight: bold; + letter-spacing: -0.01em; + margin: 8px 0 3px 0; +} + +h6 { + font-size: 100%; + letter-spacing: -0.01em; + margin: 6px 0 3px 0; + font-style: italic; +} + +table { + border-spacing: 0; + border: 0; + border-collapse: collapse; +} + +td, +th { + border: 1px solid #ddd; + margin: 0px; + text-align: left; + vertical-align: top; + padding: 4px 6px; + display: table-cell; + min-width: 140px; +} + +thead tr { + background-color: #ddd; + font-weight: bold; +} + +th { + border-right: 1px solid #aaa; +} +tr > th:last-child { + border-right: 1px solid #ddd; +} + +.ancestors, +.attribs { + color: #999; +} +.ancestors a, +.attribs a { + color: #999 !important; + text-decoration: none; +} + +.clear { + clear: both; +} + +.important { + font-weight: bold; + color: #950b02; +} + +.yes-def { + text-indent: -1000px; +} + +.type-signature { + color: #aaa; +} + +.name, +.signature { + font-family: Consolas, Monaco, 'Andale Mono', monospace; +} + +.details { + margin-top: 14px; + border-left: 2px solid #ddd; +} +.details dt { + width: 120px; + float: left; + padding-left: 10px; + padding-top: 6px; +} +.details dd { + margin-left: 70px; +} +.details ul { + margin: 0; +} +.details ul { + list-style-type: none; +} +.details li { + margin-left: 30px; + padding-top: 6px; +} +.details pre.prettyprint { + margin: 0; +} +.details .object-value { + padding-top: 0; +} + +.description { + margin-bottom: 1em; + margin-top: 1em; +} + +.code-caption { + font-style: italic; + font-size: 107%; + margin: 0; +} + +.source { + border: 1px solid #ddd; + width: 80%; + overflow: auto; +} + +.prettyprint.source { + width: inherit; +} + +.source code { + font-size: 100%; + line-height: 18px; + display: block; + padding: 4px 12px; + margin: 0; + background-color: #fff; + color: #4d4e53; +} + +.prettyprint code span.line { + display: inline-block; +} + +.prettyprint.linenums { + padding-left: 70px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.prettyprint.linenums ol { + padding-left: 0; +} + +.prettyprint.linenums li { + border-left: 3px #ddd solid; +} + +.prettyprint.linenums li.selected, +.prettyprint.linenums li.selected * { + background-color: lightyellow; +} + +.prettyprint.linenums li * { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.params .name, +.props .name, +.name code { + color: #4d4e53; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 100%; +} + +.params td.description > p:first-child, +.props td.description > p:first-child { + margin-top: 0; + padding-top: 0; +} + +.params td.description > p:last-child, +.props td.description > p:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +.disabled { + color: #454545; +} diff --git a/documentation/jsdoc-assets/img/dash.png b/documentation/jsdoc-assets/img/dash.png new file mode 100644 index 0000000000000000000000000000000000000000..71aa1f2bf9ca8d435425f1ff319811ba3093a2d7 GIT binary patch literal 416 zcmV;R0bl-!P)0k_w*8l}U7K-ZHK=VXsH3y*qS}sC#cf!-LGAZTvf<8Mv9nF`9KU^^apsC% zudfHk7e%Mj9e`)b{&O{7m+d=as*oN`JbqmUQlo!j7uyR z*a6X^Vgi4DprPUj5(acdml(QnN0sFhs6mL-K}3l8msdF0000< KMNUMnLSTYS4T9r@Lsf+_yssh%gy&uF48dM| zf7V|3=RpMTQF)%=5y8t5aLzrR*?L}6*Y1e5r4tqjUQ?Y(fk^=Oc(zDzgutSpTzk<; z^VIIb-pfxL?Ym~7S$ok3lWqO$QMI{HFweGC`!!2Gu&D3qkB{zq<4H3yw8iZD`M1+? zluk6NYeWki;`Ky$f6tmF$FJV{z<-&U=_$i8H9BlI-}z5w?UEC!bk(-6`;%tNz5i~? zH-3iut7$7(EPRt2Z~cOq9Nuo*^Jn;_2Suks&-8!qt7d%LS|cLnz|IZA@!82W7yQ{` zwMVzYcarJ9>#JtZ>c=b|>TF*6&lU!HZa0&AcU5p3@wxSf|83OX^-;)YN&H@Pk}2Qt zcV_QvkDL9QUl+V)#x|}t<6GY{lY4erJR@tKF&nP?YxLmyw<@Q2K}X2C@6D&o$l714 z?x#%ew@x=3zI~S2aQ)w!-fy02WfR}DkNEfcTXOe)^EBIb=(&5K6V|sSIz7?Rqb)j! z+snl#o55e*X?3;hi5tT{OSdQ5(g&{!LY(Te{_lOwOz+=o^)V>q5VW-LC>&7Y;u%7-}U%+tSwE;OjsfO>+yV)&KC&I7u+p)I0DYO$200!UHLfD z&Rso~M+!bISS}b4Obh4(AGpUe>QI+9nRMJUmB$J06^sddeD%($OB>qO&~W!uen2*} z!ulV4kne|z(OMDWsM7FoA19kwvF_4S%(fpdF@sOvWqsPZOBRUln4Q*>gJ;mF$PwXx zr^#sP&@j-u_9pT5m9ut1kckL(5fq{)N{9FvLSe6l2POv_5 z==poi`1W=3^J~n`<=tl8C7q&k;$y<=?0c8aEsnvbmsaA9BQ!D8FCY6iRT(*b-)e{7pbv;S(-Zq`o0;iJv+bda#zE#>Hq#>v*(qcn&|^$W_10FX7_J? zX!gDFOEbQs*UU^!ICQZR-?;tZ%bcu?^JRi6es?Zeh)3|e*Wq)1 zFwK9tIu^&4d%kX_#`Y-oJ}3KQOy}?v+KltDp?#*c5pRsIiNVdbANQ_aZpTvr{LVhZ z@s)}jJNlSxd_~1ZM%VvFHu@Ju_;=$AAHi6z^~ciZuE(#p`Gg}to=9F}b)Lpkc+d9_ z;3qcVzdgRfv4%bR2jg?&EnRuOJL%t`fltM^hBU-G;}pN*ACr4_nDTc%U622me7XKLJ}&6U;J_8zkFFM=imm1#plOhcTZ(CJ|e@FXWH>gZng8#YwUG2 zHa%V1zRQe{j*drz{vc*A7p{TOSGjRy$33_kitmmFrANp4Z|4Ua&QE57CBb-bY%m-g z9h8H4K~HdaP*TPO6g^yh+JXaI-~=~$ScjlfP|3qI0W6Y-sY&dJz z;Mxc{=N`|fL){pTW-h=Xc!%I*!8L-Ff+4{Hfo~_AbB|}#xkf-6+BQs@HiE+h?-$%5 z7!)MwW6+^0E!rpJj6j-52hb_z+Gj7c^o#a4n#Zz9@iKv*n(DvvGfF-=NLk zcKqa9QT%C%2XI3pW)HfC{+|eXi9efe|B}`%`hE9q$eDNi?5ZsNHgX?(fR@z(r2w5^ zt2TxYJ@Q9a^>@R6>7&V1WK5#_xUo2}iP~ zv~j3*{_W9~42mz{Vf}=4gWWIwNU`RM(2n#hq-AMB`)~pNBEoT^=IFQ9&~-N^c5k)o zDVceKh;!JQSKA77#aT{kinOy3*!5zibA6d9&sbFWLD7xF&XQF zpB~$5w%+$2AH4=Oz7_4@}^zWqhxJT>!vnG#BXDVtbuO2?Od}# zd8u8u3df#L3;K2R@5%4zt0X@i{M8+1Ofn(k@QQ~bo3dj&)D^U%z6;CfnTIE$oo;{e zdOpwA-q8WHr}yu(^WA7n#p-3-m6Z#dhc;s%KK|;^#tznBb*6meFRaNO*tOBlMI)cm z2z@vH;{GRxHe-@?4-EoKpT1vz#YaM&*K1q*44((>g#S(NbJeqP#IB`I9Al{BiO3PAg+7jwmkT*OLc6 zUAYN9IJ9g`9k)KQOFwpZ|JN66GkL4d8{aF4L!zI~x z&%%0A+QFJSz9-fuRgX5etI5AS9>__^eaRK8_~?7ZAwQlwKH$mv^nCqi=AY2#5KZ7H z0X*0|RHgV}P2sd~%*SHPjLnsLFF!qR{DBLc;0}pp{N=fzcK#v1(|7GB6pL?BtnD!) ziaGQ<_i}ts;rWMSDdGWpc)tK!4gF&jKh|A#is{uFobK17O&i*RBbIMFI(enqIbEEr zbNt0h!I1hxzPl!#v~B*GG!+Y4<*xeaq<-i3^BU#nbm*v>6R);+J>_ZxrROwc6=Z9bYCU?+J8`w;AY zf_C)*`FNC*i=T=vBi`T*3jAc*tKTHTNldYUk^sKc5C-+sPEEn)!dV< zY+H7*-D^@0FEY>%UVC_jXU9Lec=;bNC%)I{T?W2t_Y3za zri|vHt2}341n*BgzXZ>2&c~dn%5(BuGN3Q^TC&E;p0b&#^!^y_dnsJgPU496+p;%l zth}0RS&QeLM`h1S4QB;z$hX=3$-J+u@&eEBex`uAw*Rbw zbIEh@2bDwok78Z8mvBb=@b;|yiT0~KuRY$|%x>)$WS=+hm$**Lr81>Z8}@PA^|&~X z@C@%Q@{inMpE5q&-uCeQ%QCZHd+_M{A?@eE$Mb$}^U|-Fo!V!GjEn{L>X8fb?#hDR zov=S|Y{N>kLoqFdcl6sv{v#O_i+GQ~-Zl0PqHErHvpBl%oS6lA;hV6rJujr_J?E(9avX;k0+a#{~*KYh4^q&Q3iGSYn z<1bx4gDq{i&fBkBpRc$+vg_jW;hh*jEGXKpem(iujW>T@HuHMLrC8tBF8ozI@C@(u z^M`8v`g~JQy!Ul~!oL4@%+m+NTz%(|-@XxAVa@~ZD{vU2T|H=HhcK%XS@6?lz-u}pC zne%++HEp(^$D~&~e_;})b09u{EX=>g>n-P`euv=tfN#vAZw!jsN4(z_)qFw=2m5!rZaoysSPC@CdJV{_FAY)=#Q)`1*J>7tx*demy)0i7|1JBV)b%UZ5#pP1 z5L-XYlm&mO{qB5sSLEQ^lNR}}yME~PL45r-t1rYq-&Ph`Ut#@%+_DA!3$5RJGO$+7 znsv06m|{;>{~y;J<+)t-Gxsjv@EJR2%k0lAJ%v2L3p_bfsasM{kn;W_A&30_p!O=r z`DDwWeHFyD@EeodoH#kg@Ffkszi@&@GSq*6q&{HY!JfOUgKw1VcgU(MoQ(iBgWel{ zf0U4cep@7{yc5uQjE{}_zG?X7hc(YyZzgwdvvWw+L)o)PE}E=g;2K)cENnB5=VU1y z*b-wJzl8rvi4R&g)*36{Q?vfoul=s9U0a)By&@rRoojGI16t5bveWc6xCFdAI7dJX ztbKotjVPwsIMtZF%-Z{FUtsa<`hxgPzC<2HF34Q25j|6vHnar?xWL&~o%_7|=c0og z068GJH@P_Lk<5w80(fJ7?F09CMjh(XhPL3a_oS6Xb@yyNn zYI2xncs8bVnBAx}69h}xJj7-q%Ca^VQI@oSh!W)bqiU)c1lnt)-9~}Fi_&qdzEP*t zcj~Szb3ISryi@8M_GDS&zIHz)OK#8RQ381i-5&0z@LA@*#Gi;+)2H_%bbh}(OD=!?@1mG_BA{$oK0I0{?Z{R zcT(@A+0cRHJ{UeODO=I&rR~(gZ<*{)M{UtTp3U3eRpWO^4n2PWPc4lFwa3@h$cD_U z&rOf-i!E>QZrlDQOG=wGJacrfDW53bh;cQ39@&$>6gA5&w`UACD zm6V}~>`oVlm=0DoBERHboRppGa824tm|xo84?1+lLZLiSa?TfEGcntu?~~&_PXmmT zB%XtKjZE|N>_Bx=<2>(qnmO1=H?2YhHXY6$)bs*Zy^5{3~1JMgMnTNmL z^G0QNeUU+TS&ICbw(s-RiXZgxG;)p|GlrTuuz?g>u`!_MohfzF+Sz;fvu2L1_v^QG zGU7|tecB*HD@VrI>vT3C+NCV|S@-FaB6~!9zVTaG_>%XrcWk#EM@IZ9dGhCu{Um?x znmELmDB_oj!~yyWxm)dXUvC-mSA2kE>2dP3QqpJS3H5Y=-SAr+*baKbCOB`@mVEj0 z&NJd*kJtZ&?XswT=*KiYASYvbu8w*(H=FW1J*CA9?Azs&*m<7Kw4$qwzPJ577xJSA zC#x?9W77FI`UpSb#yobz7-{7IS6;lCEBVnuTFgW*PEKTI%s6{+_QO4=t0F!EJk-Y* zIUHH#T*?m*PFC0N$m;tEY@Zrhdmi(uv{+$ijPLKXD9*VYa zQ$0WbX*&OHh8H*9efgX5U(L|=+W7fz!}A{xPec9Y$9Z4=X7RPq&Y%Buwt%Ow{P^~) zoOmwiCunrK@lUB|h1Ne3I9iq+8z2rei?_*kvGtEg{#o?_F8A?m-kl!=`72}J*?{!e z)ub+S`z~z`wYi!@?Ky|xQ>gV=vRvY}C%XRW} zKwQYe)8_l#PTpiGIvwq#RpdQ|(+l}tnPkToHZ>0N;(eA*n$>qsJ7lQq^U~z!p4u(U!JTRY&B)JqX@*vT zHVd=lD{^1>8}ji$;hn8X&|8K*=|G43(lqGv<|K|;7{O=o%IV*cCxhg;Ix*Xo0mn@x}u5@~EdU2&yclgs8 qVA9WNP)M&ml diff --git a/documentation/jsdoc-assets/js/jazzy.js b/documentation/jsdoc-assets/js/jazzy.js new file mode 100755 index 00000000..5c5d119c --- /dev/null +++ b/documentation/jsdoc-assets/js/jazzy.js @@ -0,0 +1,103 @@ +window.jazzy = { docset: false }; +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash'; + window.jazzy.docset = true; +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode'; + window.jazzy.docset = true; +} + +if (window.jazzy.docset) { + // Dash customization here + $(document).ready(function () { + $('nav').remove(); + }); +} else { + // On doc load, toggle the URL hash discussion if present + $(document).ready(function () { + var linkToHash = $('a[href="' + window.location.hash + '"]'); + linkToHash.trigger('click'); + }); + + // When navigating away, store sidebar scroll position, + // and restore it on next load + if (window.localStorage) { + window.onbeforeunload = function (event) { + localStorage.setItem('sidebar.scroll', $('nav.sidebar').scrollTop()); + }; + $(document).ready(function () { + var s = localStorage.getItem('sidebar.scroll'); + if (s) { + $('nav.sidebar').scrollTop(parseInt(s)); + } + }); + } + + // On token click, toggle its discussion + $('.token, .hidden-token').click(function (event) { + if (window.jazzy.docset) { + return; + } + var link = $(this); + var animationDuration = 300; + $content = link.parent().parent().next(); + $content.slideToggle(animationDuration); + + // Keeps the document from jumping to the hash. + var href = $(this).attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); + }); + + // Highlight active sidebar link + $(document).on('ready', function (e) { + var path = window.location.pathname; + $('.sidebar') + .find('a[href$="' + path + '"]') + .addClass('active'); + }); + + // Jump to page from select menu (mobile) + $(document).on('change', '.nav-groups-select select', function (e) { + var value = e.target.value; + if (value) { + window.location = value; + } + }); + + // Hide empty categories + $(document).on('ready', function (e) { + $('.sidebar .nav-group-tasks').each(function (idx, item) { + var $item = $(item); + if ($item.children('.nav-group-task').length === 0) { + $item.parents('.nav-group-name').remove(); + } + }); + }); + + // Workaround for https://github.com/PSPDFKit/PSPDFKit/issues/5393 + if ( + navigator.userAgent.indexOf('Safari') != -1 && + navigator.userAgent.indexOf('Chrome') == -1 + ) { + window.onpageshow = function (event) { + if (event.persisted) { + $('.main-content, .sidebar').css({ overflow: 'auto' }); + setTimeout(function () { + $('.main-content, .sidebar').css({ overflow: 'scroll' }); + }, 200); + } + }; + } + + // Activate the current platform in the platform switcher + $(document).on('ready', function (e) { + var platform = $('meta[name=pspdf-platform]').attr('content'); + $('.navbar .btn[href*="' + platform + '"]').addClass('active'); + }); +} // if !dash diff --git a/documentation/jsdoc-assets/js/jquery.min.js b/documentation/jsdoc-assets/js/jquery.min.js new file mode 100755 index 00000000..fc25789c --- /dev/null +++ b/documentation/jsdoc-assets/js/jquery.min.js @@ -0,0 +1,5789 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!(function (a, b) { + 'object' == typeof module && 'object' == typeof module.exports + ? (module.exports = a.document + ? b(a, !0) + : function (a) { + if (!a.document) + throw new Error('jQuery requires a window with a document'); + return b(a); + }) + : b(a); +})('undefined' != typeof window ? window : this, function (a, b) { + var c = [], + d = c.slice, + e = c.concat, + f = c.push, + g = c.indexOf, + h = {}, + i = h.toString, + j = h.hasOwnProperty, + k = {}, + l = '1.11.1', + m = function (a, b) { + return new m.fn.init(a, b); + }, + n = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + o = /^-ms-/, + p = /-([\da-z])/gi, + q = function (a, b) { + return b.toUpperCase(); + }; + (m.fn = m.prototype = + { + jquery: l, + constructor: m, + selector: '', + length: 0, + toArray: function () { + return d.call(this); + }, + get: function (a) { + return null != a + ? 0 > a + ? this[a + this.length] + : this[a] + : d.call(this); + }, + pushStack: function (a) { + var b = m.merge(this.constructor(), a); + return (b.prevObject = this), (b.context = this.context), b; + }, + each: function (a, b) { + return m.each(this, a, b); + }, + map: function (a) { + return this.pushStack( + m.map(this, function (b, c) { + return a.call(b, c, b); + }), + ); + }, + slice: function () { + return this.pushStack(d.apply(this, arguments)); + }, + first: function () { + return this.eq(0); + }, + last: function () { + return this.eq(-1); + }, + eq: function (a) { + var b = this.length, + c = +a + (0 > a ? b : 0); + return this.pushStack(c >= 0 && b > c ? [this[c]] : []); + }, + end: function () { + return this.prevObject || this.constructor(null); + }, + push: f, + sort: c.sort, + splice: c.splice, + }), + (m.extend = m.fn.extend = + function () { + var a, + b, + c, + d, + e, + f, + g = arguments[0] || {}, + h = 1, + i = arguments.length, + j = !1; + for ( + 'boolean' == typeof g && ((j = g), (g = arguments[h] || {}), h++), + 'object' == typeof g || m.isFunction(g) || (g = {}), + h === i && ((g = this), h--); + i > h; + h++ + ) + if (null != (e = arguments[h])) + for (d in e) + (a = g[d]), + (c = e[d]), + g !== c && + (j && c && (m.isPlainObject(c) || (b = m.isArray(c))) + ? (b + ? ((b = !1), (f = a && m.isArray(a) ? a : [])) + : (f = a && m.isPlainObject(a) ? a : {}), + (g[d] = m.extend(j, f, c))) + : void 0 !== c && (g[d] = c)); + return g; + }), + m.extend({ + expando: 'jQuery' + (l + Math.random()).replace(/\D/g, ''), + isReady: !0, + error: function (a) { + throw new Error(a); + }, + noop: function () {}, + isFunction: function (a) { + return 'function' === m.type(a); + }, + isArray: + Array.isArray || + function (a) { + return 'array' === m.type(a); + }, + isWindow: function (a) { + return null != a && a == a.window; + }, + isNumeric: function (a) { + return !m.isArray(a) && a - parseFloat(a) >= 0; + }, + isEmptyObject: function (a) { + var b; + for (b in a) return !1; + return !0; + }, + isPlainObject: function (a) { + var b; + if (!a || 'object' !== m.type(a) || a.nodeType || m.isWindow(a)) + return !1; + try { + if ( + a.constructor && + !j.call(a, 'constructor') && + !j.call(a.constructor.prototype, 'isPrototypeOf') + ) + return !1; + } catch (c) { + return !1; + } + if (k.ownLast) for (b in a) return j.call(a, b); + for (b in a); + return void 0 === b || j.call(a, b); + }, + type: function (a) { + return null == a + ? a + '' + : 'object' == typeof a || 'function' == typeof a + ? h[i.call(a)] || 'object' + : typeof a; + }, + globalEval: function (b) { + b && + m.trim(b) && + ( + a.execScript || + function (b) { + a.eval.call(a, b); + } + )(b); + }, + camelCase: function (a) { + return a.replace(o, 'ms-').replace(p, q); + }, + nodeName: function (a, b) { + return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase(); + }, + each: function (a, b, c) { + var d, + e = 0, + f = a.length, + g = r(a); + if (c) { + if (g) { + for (; f > e; e++) if (((d = b.apply(a[e], c)), d === !1)) break; + } else for (e in a) if (((d = b.apply(a[e], c)), d === !1)) break; + } else if (g) { + for (; f > e; e++) if (((d = b.call(a[e], e, a[e])), d === !1)) break; + } else for (e in a) if (((d = b.call(a[e], e, a[e])), d === !1)) break; + return a; + }, + trim: function (a) { + return null == a ? '' : (a + '').replace(n, ''); + }, + makeArray: function (a, b) { + var c = b || []; + return ( + null != a && + (r(Object(a)) + ? m.merge(c, 'string' == typeof a ? [a] : a) + : f.call(c, a)), + c + ); + }, + inArray: function (a, b, c) { + var d; + if (b) { + if (g) return g.call(b, a, c); + for ( + d = b.length, c = c ? (0 > c ? Math.max(0, d + c) : c) : 0; + d > c; + c++ + ) + if (c in b && b[c] === a) return c; + } + return -1; + }, + merge: function (a, b) { + var c = +b.length, + d = 0, + e = a.length; + while (c > d) a[e++] = b[d++]; + if (c !== c) while (void 0 !== b[d]) a[e++] = b[d++]; + return (a.length = e), a; + }, + grep: function (a, b, c) { + for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++) + (d = !b(a[f], f)), d !== h && e.push(a[f]); + return e; + }, + map: function (a, b, c) { + var d, + f = 0, + g = a.length, + h = r(a), + i = []; + if (h) for (; g > f; f++) (d = b(a[f], f, c)), null != d && i.push(d); + else for (f in a) (d = b(a[f], f, c)), null != d && i.push(d); + return e.apply([], i); + }, + guid: 1, + proxy: function (a, b) { + var c, e, f; + return ( + 'string' == typeof b && ((f = a[b]), (b = a), (a = f)), + m.isFunction(a) + ? ((c = d.call(arguments, 2)), + (e = function () { + return a.apply(b || this, c.concat(d.call(arguments))); + }), + (e.guid = a.guid = a.guid || m.guid++), + e) + : void 0 + ); + }, + now: function () { + return +new Date(); + }, + support: k, + }), + m.each( + 'Boolean Number String Function Array Date RegExp Object Error'.split( + ' ', + ), + function (a, b) { + h['[object ' + b + ']'] = b.toLowerCase(); + }, + ); + function r(a) { + var b = a.length, + c = m.type(a); + return 'function' === c || m.isWindow(a) + ? !1 + : 1 === a.nodeType && b + ? !0 + : 'array' === c || + 0 === b || + ('number' == typeof b && b > 0 && b - 1 in a); + } + var s = (function (a) { + var b, + c, + d, + e, + f, + g, + h, + i, + j, + k, + l, + m, + n, + o, + p, + q, + r, + s, + t, + u = 'sizzle' + -new Date(), + v = a.document, + w = 0, + x = 0, + y = gb(), + z = gb(), + A = gb(), + B = function (a, b) { + return a === b && (l = !0), 0; + }, + C = 'undefined', + D = 1 << 31, + E = {}.hasOwnProperty, + F = [], + G = F.pop, + H = F.push, + I = F.push, + J = F.slice, + K = + F.indexOf || + function (a) { + for (var b = 0, c = this.length; c > b; b++) + if (this[b] === a) return b; + return -1; + }, + L = + 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', + M = '[\\x20\\t\\r\\n\\f]', + N = '(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+', + O = N.replace('w', 'w#'), + P = + '\\[' + + M + + '*(' + + N + + ')(?:' + + M + + '*([*^$|!~]?=)' + + M + + '*(?:\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)"|(' + + O + + '))|)' + + M + + '*\\]', + Q = + ':(' + + N + + ')(?:\\(((\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|' + + P + + ')*)|.*)\\)|)', + R = new RegExp('^' + M + '+|((?:^|[^\\\\])(?:\\\\.)*)' + M + '+$', 'g'), + S = new RegExp('^' + M + '*,' + M + '*'), + T = new RegExp('^' + M + '*([>+~]|' + M + ')' + M + '*'), + U = new RegExp('=' + M + '*([^\\]\'"]*?)' + M + '*\\]', 'g'), + V = new RegExp(Q), + W = new RegExp('^' + O + '$'), + X = { + ID: new RegExp('^#(' + N + ')'), + CLASS: new RegExp('^\\.(' + N + ')'), + TAG: new RegExp('^(' + N.replace('w', 'w*') + ')'), + ATTR: new RegExp('^' + P), + PSEUDO: new RegExp('^' + Q), + CHILD: new RegExp( + '^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(' + + M + + '*(even|odd|(([+-]|)(\\d*)n|)' + + M + + '*(?:([+-]|)' + + M + + '*(\\d+)|))' + + M + + '*\\)|)', + 'i', + ), + bool: new RegExp('^(?:' + L + ')$', 'i'), + needsContext: new RegExp( + '^' + + M + + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(' + + M + + '*((?:-\\d)?\\d*)' + + M + + '*\\)|)(?=[^-]|$)', + 'i', + ), + }, + Y = /^(?:input|select|textarea|button)$/i, + Z = /^h\d$/i, + $ = /^[^{]+\{\s*\[native \w/, + _ = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + ab = /[+~]/, + bb = /'|\\/g, + cb = new RegExp('\\\\([\\da-f]{1,6}' + M + '?|(' + M + ')|.)', 'ig'), + db = function (a, b, c) { + var d = '0x' + b - 65536; + return d !== d || c + ? b + : 0 > d + ? String.fromCharCode(d + 65536) + : String.fromCharCode((d >> 10) | 55296, (1023 & d) | 56320); + }; + try { + I.apply((F = J.call(v.childNodes)), v.childNodes), + F[v.childNodes.length].nodeType; + } catch (eb) { + I = { + apply: F.length + ? function (a, b) { + H.apply(a, J.call(b)); + } + : function (a, b) { + var c = a.length, + d = 0; + while ((a[c++] = b[d++])); + a.length = c - 1; + }, + }; + } + function fb(a, b, d, e) { + var f, h, j, k, l, o, r, s, w, x; + if ( + ((b ? b.ownerDocument || b : v) !== n && m(b), + (b = b || n), + (d = d || []), + !a || 'string' != typeof a) + ) + return d; + if (1 !== (k = b.nodeType) && 9 !== k) return []; + if (p && !e) { + if ((f = _.exec(a))) + if ((j = f[1])) { + if (9 === k) { + if (((h = b.getElementById(j)), !h || !h.parentNode)) return d; + if (h.id === j) return d.push(h), d; + } else if ( + b.ownerDocument && + (h = b.ownerDocument.getElementById(j)) && + t(b, h) && + h.id === j + ) + return d.push(h), d; + } else { + if (f[2]) return I.apply(d, b.getElementsByTagName(a)), d; + if ( + (j = f[3]) && + c.getElementsByClassName && + b.getElementsByClassName + ) + return I.apply(d, b.getElementsByClassName(j)), d; + } + if (c.qsa && (!q || !q.test(a))) { + if ( + ((s = r = u), + (w = b), + (x = 9 === k && a), + 1 === k && 'object' !== b.nodeName.toLowerCase()) + ) { + (o = g(a)), + (r = b.getAttribute('id')) + ? (s = r.replace(bb, '\\$&')) + : b.setAttribute('id', s), + (s = "[id='" + s + "'] "), + (l = o.length); + while (l--) o[l] = s + qb(o[l]); + (w = (ab.test(a) && ob(b.parentNode)) || b), (x = o.join(',')); + } + if (x) + try { + return I.apply(d, w.querySelectorAll(x)), d; + } catch (y) { + } finally { + r || b.removeAttribute('id'); + } + } + } + return i(a.replace(R, '$1'), b, d, e); + } + function gb() { + var a = []; + function b(c, e) { + return ( + a.push(c + ' ') > d.cacheLength && delete b[a.shift()], + (b[c + ' '] = e) + ); + } + return b; + } + function hb(a) { + return (a[u] = !0), a; + } + function ib(a) { + var b = n.createElement('div'); + try { + return !!a(b); + } catch (c) { + return !1; + } finally { + b.parentNode && b.parentNode.removeChild(b), (b = null); + } + } + function jb(a, b) { + var c = a.split('|'), + e = a.length; + while (e--) d.attrHandle[c[e]] = b; + } + function kb(a, b) { + var c = b && a, + d = + c && + 1 === a.nodeType && + 1 === b.nodeType && + (~b.sourceIndex || D) - (~a.sourceIndex || D); + if (d) return d; + if (c) while ((c = c.nextSibling)) if (c === b) return -1; + return a ? 1 : -1; + } + function lb(a) { + return function (b) { + var c = b.nodeName.toLowerCase(); + return 'input' === c && b.type === a; + }; + } + function mb(a) { + return function (b) { + var c = b.nodeName.toLowerCase(); + return ('input' === c || 'button' === c) && b.type === a; + }; + } + function nb(a) { + return hb(function (b) { + return ( + (b = +b), + hb(function (c, d) { + var e, + f = a([], c.length, b), + g = f.length; + while (g--) c[(e = f[g])] && (c[e] = !(d[e] = c[e])); + }) + ); + }); + } + function ob(a) { + return a && typeof a.getElementsByTagName !== C && a; + } + (c = fb.support = {}), + (f = fb.isXML = + function (a) { + var b = a && (a.ownerDocument || a).documentElement; + return b ? 'HTML' !== b.nodeName : !1; + }), + (m = fb.setDocument = + function (a) { + var b, + e = a ? a.ownerDocument || a : v, + g = e.defaultView; + return e !== n && 9 === e.nodeType && e.documentElement + ? ((n = e), + (o = e.documentElement), + (p = !f(e)), + g && + g !== g.top && + (g.addEventListener + ? g.addEventListener( + 'unload', + function () { + m(); + }, + !1, + ) + : g.attachEvent && + g.attachEvent('onunload', function () { + m(); + })), + (c.attributes = ib(function (a) { + return (a.className = 'i'), !a.getAttribute('className'); + })), + (c.getElementsByTagName = ib(function (a) { + return ( + a.appendChild(e.createComment('')), + !a.getElementsByTagName('*').length + ); + })), + (c.getElementsByClassName = + $.test(e.getElementsByClassName) && + ib(function (a) { + return ( + (a.innerHTML = + "
"), + (a.firstChild.className = 'i'), + 2 === a.getElementsByClassName('i').length + ); + })), + (c.getById = ib(function (a) { + return ( + (o.appendChild(a).id = u), + !e.getElementsByName || !e.getElementsByName(u).length + ); + })), + c.getById + ? ((d.find.ID = function (a, b) { + if (typeof b.getElementById !== C && p) { + var c = b.getElementById(a); + return c && c.parentNode ? [c] : []; + } + }), + (d.filter.ID = function (a) { + var b = a.replace(cb, db); + return function (a) { + return a.getAttribute('id') === b; + }; + })) + : (delete d.find.ID, + (d.filter.ID = function (a) { + var b = a.replace(cb, db); + return function (a) { + var c = + typeof a.getAttributeNode !== C && + a.getAttributeNode('id'); + return c && c.value === b; + }; + })), + (d.find.TAG = c.getElementsByTagName + ? function (a, b) { + return typeof b.getElementsByTagName !== C + ? b.getElementsByTagName(a) + : void 0; + } + : function (a, b) { + var c, + d = [], + e = 0, + f = b.getElementsByTagName(a); + if ('*' === a) { + while ((c = f[e++])) 1 === c.nodeType && d.push(c); + return d; + } + return f; + }), + (d.find.CLASS = + c.getElementsByClassName && + function (a, b) { + return typeof b.getElementsByClassName !== C && p + ? b.getElementsByClassName(a) + : void 0; + }), + (r = []), + (q = []), + (c.qsa = $.test(e.querySelectorAll)) && + (ib(function (a) { + (a.innerHTML = + ""), + a.querySelectorAll("[msallowclip^='']").length && + q.push('[*^$]=' + M + '*(?:\'\'|"")'), + a.querySelectorAll('[selected]').length || + q.push('\\[' + M + '*(?:value|' + L + ')'), + a.querySelectorAll(':checked').length || q.push(':checked'); + }), + ib(function (a) { + var b = e.createElement('input'); + b.setAttribute('type', 'hidden'), + a.appendChild(b).setAttribute('name', 'D'), + a.querySelectorAll('[name=d]').length && + q.push('name' + M + '*[*^$|!~]?='), + a.querySelectorAll(':enabled').length || + q.push(':enabled', ':disabled'), + a.querySelectorAll('*,:x'), + q.push(',.*:'); + })), + (c.matchesSelector = $.test( + (s = + o.matches || + o.webkitMatchesSelector || + o.mozMatchesSelector || + o.oMatchesSelector || + o.msMatchesSelector), + )) && + ib(function (a) { + (c.disconnectedMatch = s.call(a, 'div')), + s.call(a, "[s!='']:x"), + r.push('!=', Q); + }), + (q = q.length && new RegExp(q.join('|'))), + (r = r.length && new RegExp(r.join('|'))), + (b = $.test(o.compareDocumentPosition)), + (t = + b || $.test(o.contains) + ? function (a, b) { + var c = 9 === a.nodeType ? a.documentElement : a, + d = b && b.parentNode; + return ( + a === d || + !( + !d || + 1 !== d.nodeType || + !(c.contains + ? c.contains(d) + : a.compareDocumentPosition && + 16 & a.compareDocumentPosition(d)) + ) + ); + } + : function (a, b) { + if (b) while ((b = b.parentNode)) if (b === a) return !0; + return !1; + }), + (B = b + ? function (a, b) { + if (a === b) return (l = !0), 0; + var d = + !a.compareDocumentPosition - !b.compareDocumentPosition; + return d + ? d + : ((d = + (a.ownerDocument || a) === (b.ownerDocument || b) + ? a.compareDocumentPosition(b) + : 1), + 1 & d || + (!c.sortDetached && b.compareDocumentPosition(a) === d) + ? a === e || (a.ownerDocument === v && t(v, a)) + ? -1 + : b === e || (b.ownerDocument === v && t(v, b)) + ? 1 + : k + ? K.call(k, a) - K.call(k, b) + : 0 + : 4 & d + ? -1 + : 1); + } + : function (a, b) { + if (a === b) return (l = !0), 0; + var c, + d = 0, + f = a.parentNode, + g = b.parentNode, + h = [a], + i = [b]; + if (!f || !g) + return a === e + ? -1 + : b === e + ? 1 + : f + ? -1 + : g + ? 1 + : k + ? K.call(k, a) - K.call(k, b) + : 0; + if (f === g) return kb(a, b); + c = a; + while ((c = c.parentNode)) h.unshift(c); + c = b; + while ((c = c.parentNode)) i.unshift(c); + while (h[d] === i[d]) d++; + return d + ? kb(h[d], i[d]) + : h[d] === v + ? -1 + : i[d] === v + ? 1 + : 0; + }), + e) + : n; + }), + (fb.matches = function (a, b) { + return fb(a, null, null, b); + }), + (fb.matchesSelector = function (a, b) { + if ( + ((a.ownerDocument || a) !== n && m(a), + (b = b.replace(U, "='$1']")), + !(!c.matchesSelector || !p || (r && r.test(b)) || (q && q.test(b)))) + ) + try { + var d = s.call(a, b); + if ( + d || + c.disconnectedMatch || + (a.document && 11 !== a.document.nodeType) + ) + return d; + } catch (e) {} + return fb(b, n, null, [a]).length > 0; + }), + (fb.contains = function (a, b) { + return (a.ownerDocument || a) !== n && m(a), t(a, b); + }), + (fb.attr = function (a, b) { + (a.ownerDocument || a) !== n && m(a); + var e = d.attrHandle[b.toLowerCase()], + f = e && E.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !p) : void 0; + return void 0 !== f + ? f + : c.attributes || !p + ? a.getAttribute(b) + : (f = a.getAttributeNode(b)) && f.specified + ? f.value + : null; + }), + (fb.error = function (a) { + throw new Error('Syntax error, unrecognized expression: ' + a); + }), + (fb.uniqueSort = function (a) { + var b, + d = [], + e = 0, + f = 0; + if ( + ((l = !c.detectDuplicates), + (k = !c.sortStable && a.slice(0)), + a.sort(B), + l) + ) { + while ((b = a[f++])) b === a[f] && (e = d.push(f)); + while (e--) a.splice(d[e], 1); + } + return (k = null), a; + }), + (e = fb.getText = + function (a) { + var b, + c = '', + d = 0, + f = a.nodeType; + if (f) { + if (1 === f || 9 === f || 11 === f) { + if ('string' == typeof a.textContent) return a.textContent; + for (a = a.firstChild; a; a = a.nextSibling) c += e(a); + } else if (3 === f || 4 === f) return a.nodeValue; + } else while ((b = a[d++])) c += e(b); + return c; + }), + (d = fb.selectors = + { + cacheLength: 50, + createPseudo: hb, + match: X, + attrHandle: {}, + find: {}, + relative: { + '>': { dir: 'parentNode', first: !0 }, + ' ': { dir: 'parentNode' }, + '+': { dir: 'previousSibling', first: !0 }, + '~': { dir: 'previousSibling' }, + }, + preFilter: { + ATTR: function (a) { + return ( + (a[1] = a[1].replace(cb, db)), + (a[3] = (a[3] || a[4] || a[5] || '').replace(cb, db)), + '~=' === a[2] && (a[3] = ' ' + a[3] + ' '), + a.slice(0, 4) + ); + }, + CHILD: function (a) { + return ( + (a[1] = a[1].toLowerCase()), + 'nth' === a[1].slice(0, 3) + ? (a[3] || fb.error(a[0]), + (a[4] = +(a[4] + ? a[5] + (a[6] || 1) + : 2 * ('even' === a[3] || 'odd' === a[3]))), + (a[5] = +(a[7] + a[8] || 'odd' === a[3]))) + : a[3] && fb.error(a[0]), + a + ); + }, + PSEUDO: function (a) { + var b, + c = !a[6] && a[2]; + return X.CHILD.test(a[0]) + ? null + : (a[3] + ? (a[2] = a[4] || a[5] || '') + : c && + V.test(c) && + (b = g(c, !0)) && + (b = c.indexOf(')', c.length - b) - c.length) && + ((a[0] = a[0].slice(0, b)), (a[2] = c.slice(0, b))), + a.slice(0, 3)); + }, + }, + filter: { + TAG: function (a) { + var b = a.replace(cb, db).toLowerCase(); + return '*' === a + ? function () { + return !0; + } + : function (a) { + return a.nodeName && a.nodeName.toLowerCase() === b; + }; + }, + CLASS: function (a) { + var b = y[a + ' ']; + return ( + b || + ((b = new RegExp('(^|' + M + ')' + a + '(' + M + '|$)')) && + y(a, function (a) { + return b.test( + ('string' == typeof a.className && a.className) || + (typeof a.getAttribute !== C && + a.getAttribute('class')) || + '', + ); + })) + ); + }, + ATTR: function (a, b, c) { + return function (d) { + var e = fb.attr(d, a); + return null == e + ? '!=' === b + : b + ? ((e += ''), + '=' === b + ? e === c + : '!=' === b + ? e !== c + : '^=' === b + ? c && 0 === e.indexOf(c) + : '*=' === b + ? c && e.indexOf(c) > -1 + : '$=' === b + ? c && e.slice(-c.length) === c + : '~=' === b + ? (' ' + e + ' ').indexOf(c) > -1 + : '|=' === b + ? e === c || + e.slice(0, c.length + 1) === c + '-' + : !1) + : !0; + }; + }, + CHILD: function (a, b, c, d, e) { + var f = 'nth' !== a.slice(0, 3), + g = 'last' !== a.slice(-4), + h = 'of-type' === b; + return 1 === d && 0 === e + ? function (a) { + return !!a.parentNode; + } + : function (b, c, i) { + var j, + k, + l, + m, + n, + o, + p = f !== g ? 'nextSibling' : 'previousSibling', + q = b.parentNode, + r = h && b.nodeName.toLowerCase(), + s = !i && !h; + if (q) { + if (f) { + while (p) { + l = b; + while ((l = l[p])) + if ( + h + ? l.nodeName.toLowerCase() === r + : 1 === l.nodeType + ) + return !1; + o = p = 'only' === a && !o && 'nextSibling'; + } + return !0; + } + if (((o = [g ? q.firstChild : q.lastChild]), g && s)) { + (k = q[u] || (q[u] = {})), + (j = k[a] || []), + (n = j[0] === w && j[1]), + (m = j[0] === w && j[2]), + (l = n && q.childNodes[n]); + while ( + (l = (++n && l && l[p]) || (m = n = 0) || o.pop()) + ) + if (1 === l.nodeType && ++m && l === b) { + k[a] = [w, n, m]; + break; + } + } else if ( + s && + (j = (b[u] || (b[u] = {}))[a]) && + j[0] === w + ) + m = j[1]; + else + while ( + (l = (++n && l && l[p]) || (m = n = 0) || o.pop()) + ) + if ( + (h + ? l.nodeName.toLowerCase() === r + : 1 === l.nodeType) && + ++m && + (s && ((l[u] || (l[u] = {}))[a] = [w, m]), l === b) + ) + break; + return (m -= e), m === d || (m % d === 0 && m / d >= 0); + } + }; + }, + PSEUDO: function (a, b) { + var c, + e = + d.pseudos[a] || + d.setFilters[a.toLowerCase()] || + fb.error('unsupported pseudo: ' + a); + return e[u] + ? e(b) + : e.length > 1 + ? ((c = [a, a, '', b]), + d.setFilters.hasOwnProperty(a.toLowerCase()) + ? hb(function (a, c) { + var d, + f = e(a, b), + g = f.length; + while (g--) + (d = K.call(a, f[g])), (a[d] = !(c[d] = f[g])); + }) + : function (a) { + return e(a, 0, c); + }) + : e; + }, + }, + pseudos: { + not: hb(function (a) { + var b = [], + c = [], + d = h(a.replace(R, '$1')); + return d[u] + ? hb(function (a, b, c, e) { + var f, + g = d(a, null, e, []), + h = a.length; + while (h--) (f = g[h]) && (a[h] = !(b[h] = f)); + }) + : function (a, e, f) { + return (b[0] = a), d(b, null, f, c), !c.pop(); + }; + }), + has: hb(function (a) { + return function (b) { + return fb(a, b).length > 0; + }; + }), + contains: hb(function (a) { + return function (b) { + return (b.textContent || b.innerText || e(b)).indexOf(a) > -1; + }; + }), + lang: hb(function (a) { + return ( + W.test(a || '') || fb.error('unsupported lang: ' + a), + (a = a.replace(cb, db).toLowerCase()), + function (b) { + var c; + do + if ( + (c = p + ? b.lang + : b.getAttribute('xml:lang') || b.getAttribute('lang')) + ) + return ( + (c = c.toLowerCase()), + c === a || 0 === c.indexOf(a + '-') + ); + while ((b = b.parentNode) && 1 === b.nodeType); + return !1; + } + ); + }), + target: function (b) { + var c = a.location && a.location.hash; + return c && c.slice(1) === b.id; + }, + root: function (a) { + return a === o; + }, + focus: function (a) { + return ( + a === n.activeElement && + (!n.hasFocus || n.hasFocus()) && + !!(a.type || a.href || ~a.tabIndex) + ); + }, + enabled: function (a) { + return a.disabled === !1; + }, + disabled: function (a) { + return a.disabled === !0; + }, + checked: function (a) { + var b = a.nodeName.toLowerCase(); + return ( + ('input' === b && !!a.checked) || + ('option' === b && !!a.selected) + ); + }, + selected: function (a) { + return ( + a.parentNode && a.parentNode.selectedIndex, a.selected === !0 + ); + }, + empty: function (a) { + for (a = a.firstChild; a; a = a.nextSibling) + if (a.nodeType < 6) return !1; + return !0; + }, + parent: function (a) { + return !d.pseudos.empty(a); + }, + header: function (a) { + return Z.test(a.nodeName); + }, + input: function (a) { + return Y.test(a.nodeName); + }, + button: function (a) { + var b = a.nodeName.toLowerCase(); + return ('input' === b && 'button' === a.type) || 'button' === b; + }, + text: function (a) { + var b; + return ( + 'input' === a.nodeName.toLowerCase() && + 'text' === a.type && + (null == (b = a.getAttribute('type')) || + 'text' === b.toLowerCase()) + ); + }, + first: nb(function () { + return [0]; + }), + last: nb(function (a, b) { + return [b - 1]; + }), + eq: nb(function (a, b, c) { + return [0 > c ? c + b : c]; + }), + even: nb(function (a, b) { + for (var c = 0; b > c; c += 2) a.push(c); + return a; + }), + odd: nb(function (a, b) { + for (var c = 1; b > c; c += 2) a.push(c); + return a; + }), + lt: nb(function (a, b, c) { + for (var d = 0 > c ? c + b : c; --d >= 0; ) a.push(d); + return a; + }), + gt: nb(function (a, b, c) { + for (var d = 0 > c ? c + b : c; ++d < b; ) a.push(d); + return a; + }), + }, + }), + (d.pseudos.nth = d.pseudos.eq); + for (b in { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) + d.pseudos[b] = lb(b); + for (b in { submit: !0, reset: !0 }) d.pseudos[b] = mb(b); + function pb() {} + (pb.prototype = d.filters = d.pseudos), + (d.setFilters = new pb()), + (g = fb.tokenize = + function (a, b) { + var c, + e, + f, + g, + h, + i, + j, + k = z[a + ' ']; + if (k) return b ? 0 : k.slice(0); + (h = a), (i = []), (j = d.preFilter); + while (h) { + (!c || (e = S.exec(h))) && + (e && (h = h.slice(e[0].length) || h), i.push((f = []))), + (c = !1), + (e = T.exec(h)) && + ((c = e.shift()), + f.push({ value: c, type: e[0].replace(R, ' ') }), + (h = h.slice(c.length))); + for (g in d.filter) + !(e = X[g].exec(h)) || + (j[g] && !(e = j[g](e))) || + ((c = e.shift()), + f.push({ value: c, type: g, matches: e }), + (h = h.slice(c.length))); + if (!c) break; + } + return b ? h.length : h ? fb.error(a) : z(a, i).slice(0); + }); + function qb(a) { + for (var b = 0, c = a.length, d = ''; c > b; b++) d += a[b].value; + return d; + } + function rb(a, b, c) { + var d = b.dir, + e = c && 'parentNode' === d, + f = x++; + return b.first + ? function (b, c, f) { + while ((b = b[d])) if (1 === b.nodeType || e) return a(b, c, f); + } + : function (b, c, g) { + var h, + i, + j = [w, f]; + if (g) { + while ((b = b[d])) + if ((1 === b.nodeType || e) && a(b, c, g)) return !0; + } else + while ((b = b[d])) + if (1 === b.nodeType || e) { + if ( + ((i = b[u] || (b[u] = {})), + (h = i[d]) && h[0] === w && h[1] === f) + ) + return (j[2] = h[2]); + if (((i[d] = j), (j[2] = a(b, c, g)))) return !0; + } + }; + } + function sb(a) { + return a.length > 1 + ? function (b, c, d) { + var e = a.length; + while (e--) if (!a[e](b, c, d)) return !1; + return !0; + } + : a[0]; + } + function tb(a, b, c) { + for (var d = 0, e = b.length; e > d; d++) fb(a, b[d], c); + return c; + } + function ub(a, b, c, d, e) { + for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++) + (f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h)); + return g; + } + function vb(a, b, c, d, e, f) { + return ( + d && !d[u] && (d = vb(d)), + e && !e[u] && (e = vb(e, f)), + hb(function (f, g, h, i) { + var j, + k, + l, + m = [], + n = [], + o = g.length, + p = f || tb(b || '*', h.nodeType ? [h] : h, []), + q = !a || (!f && b) ? p : ub(p, m, a, h, i), + r = c ? (e || (f ? a : o || d) ? [] : g) : q; + if ((c && c(q, r, h, i), d)) { + (j = ub(r, n)), d(j, [], h, i), (k = j.length); + while (k--) (l = j[k]) && (r[n[k]] = !(q[n[k]] = l)); + } + if (f) { + if (e || a) { + if (e) { + (j = []), (k = r.length); + while (k--) (l = r[k]) && j.push((q[k] = l)); + e(null, (r = []), j, i); + } + k = r.length; + while (k--) + (l = r[k]) && + (j = e ? K.call(f, l) : m[k]) > -1 && + (f[j] = !(g[j] = l)); + } + } else + (r = ub(r === g ? r.splice(o, r.length) : r)), + e ? e(null, g, r, i) : I.apply(g, r); + }) + ); + } + function wb(a) { + for ( + var b, + c, + e, + f = a.length, + g = d.relative[a[0].type], + h = g || d.relative[' '], + i = g ? 1 : 0, + k = rb( + function (a) { + return a === b; + }, + h, + !0, + ), + l = rb( + function (a) { + return K.call(b, a) > -1; + }, + h, + !0, + ), + m = [ + function (a, c, d) { + return ( + (!g && (d || c !== j)) || + ((b = c).nodeType ? k(a, c, d) : l(a, c, d)) + ); + }, + ]; + f > i; + i++ + ) + if ((c = d.relative[a[i].type])) m = [rb(sb(m), c)]; + else { + if (((c = d.filter[a[i].type].apply(null, a[i].matches)), c[u])) { + for (e = ++i; f > e; e++) if (d.relative[a[e].type]) break; + return vb( + i > 1 && sb(m), + i > 1 && + qb( + a + .slice(0, i - 1) + .concat({ value: ' ' === a[i - 2].type ? '*' : '' }), + ).replace(R, '$1'), + c, + e > i && wb(a.slice(i, e)), + f > e && wb((a = a.slice(e))), + f > e && qb(a), + ); + } + m.push(c); + } + return sb(m); + } + function xb(a, b) { + var c = b.length > 0, + e = a.length > 0, + f = function (f, g, h, i, k) { + var l, + m, + o, + p = 0, + q = '0', + r = f && [], + s = [], + t = j, + u = f || (e && d.find.TAG('*', k)), + v = (w += null == t ? 1 : Math.random() || 0.1), + x = u.length; + for (k && (j = g !== n && g); q !== x && null != (l = u[q]); q++) { + if (e && l) { + m = 0; + while ((o = a[m++])) + if (o(l, g, h)) { + i.push(l); + break; + } + k && (w = v); + } + c && ((l = !o && l) && p--, f && r.push(l)); + } + if (((p += q), c && q !== p)) { + m = 0; + while ((o = b[m++])) o(r, s, g, h); + if (f) { + if (p > 0) while (q--) r[q] || s[q] || (s[q] = G.call(i)); + s = ub(s); + } + I.apply(i, s), + k && !f && s.length > 0 && p + b.length > 1 && fb.uniqueSort(i); + } + return k && ((w = v), (j = t)), r; + }; + return c ? hb(f) : f; + } + return ( + (h = fb.compile = + function (a, b) { + var c, + d = [], + e = [], + f = A[a + ' ']; + if (!f) { + b || (b = g(a)), (c = b.length); + while (c--) (f = wb(b[c])), f[u] ? d.push(f) : e.push(f); + (f = A(a, xb(e, d))), (f.selector = a); + } + return f; + }), + (i = fb.select = + function (a, b, e, f) { + var i, + j, + k, + l, + m, + n = 'function' == typeof a && a, + o = !f && g((a = n.selector || a)); + if (((e = e || []), 1 === o.length)) { + if ( + ((j = o[0] = o[0].slice(0)), + j.length > 2 && + 'ID' === (k = j[0]).type && + c.getById && + 9 === b.nodeType && + p && + d.relative[j[1].type]) + ) { + if ( + ((b = (d.find.ID(k.matches[0].replace(cb, db), b) || [])[0]), + !b) + ) + return e; + n && (b = b.parentNode), (a = a.slice(j.shift().value.length)); + } + i = X.needsContext.test(a) ? 0 : j.length; + while (i--) { + if (((k = j[i]), d.relative[(l = k.type)])) break; + if ( + (m = d.find[l]) && + (f = m( + k.matches[0].replace(cb, db), + (ab.test(j[0].type) && ob(b.parentNode)) || b, + )) + ) { + if ((j.splice(i, 1), (a = f.length && qb(j)), !a)) + return I.apply(e, f), e; + break; + } + } + } + return ( + (n || h(a, o))(f, b, !p, e, (ab.test(a) && ob(b.parentNode)) || b), + e + ); + }), + (c.sortStable = u.split('').sort(B).join('') === u), + (c.detectDuplicates = !!l), + m(), + (c.sortDetached = ib(function (a) { + return 1 & a.compareDocumentPosition(n.createElement('div')); + })), + ib(function (a) { + return ( + (a.innerHTML = ""), + '#' === a.firstChild.getAttribute('href') + ); + }) || + jb('type|href|height|width', function (a, b, c) { + return c + ? void 0 + : a.getAttribute(b, 'type' === b.toLowerCase() ? 1 : 2); + }), + (c.attributes && + ib(function (a) { + return ( + (a.innerHTML = ''), + a.firstChild.setAttribute('value', ''), + '' === a.firstChild.getAttribute('value') + ); + })) || + jb('value', function (a, b, c) { + return c || 'input' !== a.nodeName.toLowerCase() + ? void 0 + : a.defaultValue; + }), + ib(function (a) { + return null == a.getAttribute('disabled'); + }) || + jb(L, function (a, b, c) { + var d; + return c + ? void 0 + : a[b] === !0 + ? b.toLowerCase() + : (d = a.getAttributeNode(b)) && d.specified + ? d.value + : null; + }), + fb + ); + })(a); + (m.find = s), + (m.expr = s.selectors), + (m.expr[':'] = m.expr.pseudos), + (m.unique = s.uniqueSort), + (m.text = s.getText), + (m.isXMLDoc = s.isXML), + (m.contains = s.contains); + var t = m.expr.match.needsContext, + u = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + v = /^.[^:#\[\.,]*$/; + function w(a, b, c) { + if (m.isFunction(b)) + return m.grep(a, function (a, d) { + return !!b.call(a, d, a) !== c; + }); + if (b.nodeType) + return m.grep(a, function (a) { + return (a === b) !== c; + }); + if ('string' == typeof b) { + if (v.test(b)) return m.filter(b, a, c); + b = m.filter(b, a); + } + return m.grep(a, function (a) { + return m.inArray(a, b) >= 0 !== c; + }); + } + (m.filter = function (a, b, c) { + var d = b[0]; + return ( + c && (a = ':not(' + a + ')'), + 1 === b.length && 1 === d.nodeType + ? m.find.matchesSelector(d, a) + ? [d] + : [] + : m.find.matches( + a, + m.grep(b, function (a) { + return 1 === a.nodeType; + }), + ) + ); + }), + m.fn.extend({ + find: function (a) { + var b, + c = [], + d = this, + e = d.length; + if ('string' != typeof a) + return this.pushStack( + m(a).filter(function () { + for (b = 0; e > b; b++) if (m.contains(d[b], this)) return !0; + }), + ); + for (b = 0; e > b; b++) m.find(a, d[b], c); + return ( + (c = this.pushStack(e > 1 ? m.unique(c) : c)), + (c.selector = this.selector ? this.selector + ' ' + a : a), + c + ); + }, + filter: function (a) { + return this.pushStack(w(this, a || [], !1)); + }, + not: function (a) { + return this.pushStack(w(this, a || [], !0)); + }, + is: function (a) { + return !!w(this, 'string' == typeof a && t.test(a) ? m(a) : a || [], !1) + .length; + }, + }); + var x, + y = a.document, + z = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + A = (m.fn.init = function (a, b) { + var c, d; + if (!a) return this; + if ('string' == typeof a) { + if ( + ((c = + '<' === a.charAt(0) && + '>' === a.charAt(a.length - 1) && + a.length >= 3 + ? [null, a, null] + : z.exec(a)), + !c || (!c[1] && b)) + ) + return !b || b.jquery + ? (b || x).find(a) + : this.constructor(b).find(a); + if (c[1]) { + if ( + ((b = b instanceof m ? b[0] : b), + m.merge( + this, + m.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : y, !0), + ), + u.test(c[1]) && m.isPlainObject(b)) + ) + for (c in b) + m.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]); + return this; + } + if (((d = y.getElementById(c[2])), d && d.parentNode)) { + if (d.id !== c[2]) return x.find(a); + (this.length = 1), (this[0] = d); + } + return (this.context = y), (this.selector = a), this; + } + return a.nodeType + ? ((this.context = this[0] = a), (this.length = 1), this) + : m.isFunction(a) + ? 'undefined' != typeof x.ready + ? x.ready(a) + : a(m) + : (void 0 !== a.selector && + ((this.selector = a.selector), (this.context = a.context)), + m.makeArray(a, this)); + }); + (A.prototype = m.fn), (x = m(y)); + var B = /^(?:parents|prev(?:Until|All))/, + C = { children: !0, contents: !0, next: !0, prev: !0 }; + m.extend({ + dir: function (a, b, c) { + var d = [], + e = a[b]; + while ( + e && + 9 !== e.nodeType && + (void 0 === c || 1 !== e.nodeType || !m(e).is(c)) + ) + 1 === e.nodeType && d.push(e), (e = e[b]); + return d; + }, + sibling: function (a, b) { + for (var c = []; a; a = a.nextSibling) + 1 === a.nodeType && a !== b && c.push(a); + return c; + }, + }), + m.fn.extend({ + has: function (a) { + var b, + c = m(a, this), + d = c.length; + return this.filter(function () { + for (b = 0; d > b; b++) if (m.contains(this, c[b])) return !0; + }); + }, + closest: function (a, b) { + for ( + var c, + d = 0, + e = this.length, + f = [], + g = t.test(a) || 'string' != typeof a ? m(a, b || this.context) : 0; + e > d; + d++ + ) + for (c = this[d]; c && c !== b; c = c.parentNode) + if ( + c.nodeType < 11 && + (g + ? g.index(c) > -1 + : 1 === c.nodeType && m.find.matchesSelector(c, a)) + ) { + f.push(c); + break; + } + return this.pushStack(f.length > 1 ? m.unique(f) : f); + }, + index: function (a) { + return a + ? 'string' == typeof a + ? m.inArray(this[0], m(a)) + : m.inArray(a.jquery ? a[0] : a, this) + : this[0] && this[0].parentNode + ? this.first().prevAll().length + : -1; + }, + add: function (a, b) { + return this.pushStack(m.unique(m.merge(this.get(), m(a, b)))); + }, + addBack: function (a) { + return this.add( + null == a ? this.prevObject : this.prevObject.filter(a), + ); + }, + }); + function D(a, b) { + do a = a[b]; + while (a && 1 !== a.nodeType); + return a; + } + m.each( + { + parent: function (a) { + var b = a.parentNode; + return b && 11 !== b.nodeType ? b : null; + }, + parents: function (a) { + return m.dir(a, 'parentNode'); + }, + parentsUntil: function (a, b, c) { + return m.dir(a, 'parentNode', c); + }, + next: function (a) { + return D(a, 'nextSibling'); + }, + prev: function (a) { + return D(a, 'previousSibling'); + }, + nextAll: function (a) { + return m.dir(a, 'nextSibling'); + }, + prevAll: function (a) { + return m.dir(a, 'previousSibling'); + }, + nextUntil: function (a, b, c) { + return m.dir(a, 'nextSibling', c); + }, + prevUntil: function (a, b, c) { + return m.dir(a, 'previousSibling', c); + }, + siblings: function (a) { + return m.sibling((a.parentNode || {}).firstChild, a); + }, + children: function (a) { + return m.sibling(a.firstChild); + }, + contents: function (a) { + return m.nodeName(a, 'iframe') + ? a.contentDocument || a.contentWindow.document + : m.merge([], a.childNodes); + }, + }, + function (a, b) { + m.fn[a] = function (c, d) { + var e = m.map(this, b, c); + return ( + 'Until' !== a.slice(-5) && (d = c), + d && 'string' == typeof d && (e = m.filter(d, e)), + this.length > 1 && + (C[a] || (e = m.unique(e)), B.test(a) && (e = e.reverse())), + this.pushStack(e) + ); + }; + }, + ); + var E = /\S+/g, + F = {}; + function G(a) { + var b = (F[a] = {}); + return ( + m.each(a.match(E) || [], function (a, c) { + b[c] = !0; + }), + b + ); + } + (m.Callbacks = function (a) { + a = 'string' == typeof a ? F[a] || G(a) : m.extend({}, a); + var b, + c, + d, + e, + f, + g, + h = [], + i = !a.once && [], + j = function (l) { + for ( + c = a.memory && l, d = !0, f = g || 0, g = 0, e = h.length, b = !0; + h && e > f; + f++ + ) + if (h[f].apply(l[0], l[1]) === !1 && a.stopOnFalse) { + c = !1; + break; + } + (b = !1), + h && (i ? i.length && j(i.shift()) : c ? (h = []) : k.disable()); + }, + k = { + add: function () { + if (h) { + var d = h.length; + !(function f(b) { + m.each(b, function (b, c) { + var d = m.type(c); + 'function' === d + ? (a.unique && k.has(c)) || h.push(c) + : c && c.length && 'string' !== d && f(c); + }); + })(arguments), + b ? (e = h.length) : c && ((g = d), j(c)); + } + return this; + }, + remove: function () { + return ( + h && + m.each(arguments, function (a, c) { + var d; + while ((d = m.inArray(c, h, d)) > -1) + h.splice(d, 1), b && (e >= d && e--, f >= d && f--); + }), + this + ); + }, + has: function (a) { + return a ? m.inArray(a, h) > -1 : !(!h || !h.length); + }, + empty: function () { + return (h = []), (e = 0), this; + }, + disable: function () { + return (h = i = c = void 0), this; + }, + disabled: function () { + return !h; + }, + lock: function () { + return (i = void 0), c || k.disable(), this; + }, + locked: function () { + return !i; + }, + fireWith: function (a, c) { + return ( + !h || + (d && !i) || + ((c = c || []), + (c = [a, c.slice ? c.slice() : c]), + b ? i.push(c) : j(c)), + this + ); + }, + fire: function () { + return k.fireWith(this, arguments), this; + }, + fired: function () { + return !!d; + }, + }; + return k; + }), + m.extend({ + Deferred: function (a) { + var b = [ + ['resolve', 'done', m.Callbacks('once memory'), 'resolved'], + ['reject', 'fail', m.Callbacks('once memory'), 'rejected'], + ['notify', 'progress', m.Callbacks('memory')], + ], + c = 'pending', + d = { + state: function () { + return c; + }, + always: function () { + return e.done(arguments).fail(arguments), this; + }, + then: function () { + var a = arguments; + return m + .Deferred(function (c) { + m.each(b, function (b, f) { + var g = m.isFunction(a[b]) && a[b]; + e[f[1]](function () { + var a = g && g.apply(this, arguments); + a && m.isFunction(a.promise) + ? a + .promise() + .done(c.resolve) + .fail(c.reject) + .progress(c.notify) + : c[f[0] + 'With']( + this === d ? c.promise() : this, + g ? [a] : arguments, + ); + }); + }), + (a = null); + }) + .promise(); + }, + promise: function (a) { + return null != a ? m.extend(a, d) : d; + }, + }, + e = {}; + return ( + (d.pipe = d.then), + m.each(b, function (a, f) { + var g = f[2], + h = f[3]; + (d[f[1]] = g.add), + h && + g.add( + function () { + c = h; + }, + b[1 ^ a][2].disable, + b[2][2].lock, + ), + (e[f[0]] = function () { + return e[f[0] + 'With'](this === e ? d : this, arguments), this; + }), + (e[f[0] + 'With'] = g.fireWith); + }), + d.promise(e), + a && a.call(e, e), + e + ); + }, + when: function (a) { + var b = 0, + c = d.call(arguments), + e = c.length, + f = 1 !== e || (a && m.isFunction(a.promise)) ? e : 0, + g = 1 === f ? a : m.Deferred(), + h = function (a, b, c) { + return function (e) { + (b[a] = this), + (c[a] = arguments.length > 1 ? d.call(arguments) : e), + c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c); + }; + }, + i, + j, + k; + if (e > 1) + for (i = new Array(e), j = new Array(e), k = new Array(e); e > b; b++) + c[b] && m.isFunction(c[b].promise) + ? c[b] + .promise() + .done(h(b, k, c)) + .fail(g.reject) + .progress(h(b, j, i)) + : --f; + return f || g.resolveWith(k, c), g.promise(); + }, + }); + var H; + (m.fn.ready = function (a) { + return m.ready.promise().done(a), this; + }), + m.extend({ + isReady: !1, + readyWait: 1, + holdReady: function (a) { + a ? m.readyWait++ : m.ready(!0); + }, + ready: function (a) { + if (a === !0 ? !--m.readyWait : !m.isReady) { + if (!y.body) return setTimeout(m.ready); + (m.isReady = !0), + (a !== !0 && --m.readyWait > 0) || + (H.resolveWith(y, [m]), + m.fn.triggerHandler && + (m(y).triggerHandler('ready'), m(y).off('ready'))); + } + }, + }); + function I() { + y.addEventListener + ? (y.removeEventListener('DOMContentLoaded', J, !1), + a.removeEventListener('load', J, !1)) + : (y.detachEvent('onreadystatechange', J), a.detachEvent('onload', J)); + } + function J() { + (y.addEventListener || + 'load' === event.type || + 'complete' === y.readyState) && + (I(), m.ready()); + } + m.ready.promise = function (b) { + if (!H) + if (((H = m.Deferred()), 'complete' === y.readyState)) + setTimeout(m.ready); + else if (y.addEventListener) + y.addEventListener('DOMContentLoaded', J, !1), + a.addEventListener('load', J, !1); + else { + y.attachEvent('onreadystatechange', J), a.attachEvent('onload', J); + var c = !1; + try { + c = null == a.frameElement && y.documentElement; + } catch (d) {} + c && + c.doScroll && + !(function e() { + if (!m.isReady) { + try { + c.doScroll('left'); + } catch (a) { + return setTimeout(e, 50); + } + I(), m.ready(); + } + })(); + } + return H.promise(b); + }; + var K = 'undefined', + L; + for (L in m(k)) break; + (k.ownLast = '0' !== L), + (k.inlineBlockNeedsLayout = !1), + m(function () { + var a, b, c, d; + (c = y.getElementsByTagName('body')[0]), + c && + c.style && + ((b = y.createElement('div')), + (d = y.createElement('div')), + (d.style.cssText = + 'position:absolute;border:0;width:0;height:0;top:0;left:-9999px'), + c.appendChild(d).appendChild(b), + typeof b.style.zoom !== K && + ((b.style.cssText = + 'display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1'), + (k.inlineBlockNeedsLayout = a = 3 === b.offsetWidth), + a && (c.style.zoom = 1)), + c.removeChild(d)); + }), + (function () { + var a = y.createElement('div'); + if (null == k.deleteExpando) { + k.deleteExpando = !0; + try { + delete a.test; + } catch (b) { + k.deleteExpando = !1; + } + } + a = null; + })(), + (m.acceptData = function (a) { + var b = m.noData[(a.nodeName + ' ').toLowerCase()], + c = +a.nodeType || 1; + return 1 !== c && 9 !== c + ? !1 + : !b || (b !== !0 && a.getAttribute('classid') === b); + }); + var M = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + N = /([A-Z])/g; + function O(a, b, c) { + if (void 0 === c && 1 === a.nodeType) { + var d = 'data-' + b.replace(N, '-$1').toLowerCase(); + if (((c = a.getAttribute(d)), 'string' == typeof c)) { + try { + c = + 'true' === c + ? !0 + : 'false' === c + ? !1 + : 'null' === c + ? null + : +c + '' === c + ? +c + : M.test(c) + ? m.parseJSON(c) + : c; + } catch (e) {} + m.data(a, b, c); + } else c = void 0; + } + return c; + } + function P(a) { + var b; + for (b in a) + if (('data' !== b || !m.isEmptyObject(a[b])) && 'toJSON' !== b) return !1; + return !0; + } + function Q(a, b, d, e) { + if (m.acceptData(a)) { + var f, + g, + h = m.expando, + i = a.nodeType, + j = i ? m.cache : a, + k = i ? a[h] : a[h] && h; + if ( + (k && j[k] && (e || j[k].data)) || + void 0 !== d || + 'string' != typeof b + ) + return ( + k || (k = i ? (a[h] = c.pop() || m.guid++) : h), + j[k] || (j[k] = i ? {} : { toJSON: m.noop }), + ('object' == typeof b || 'function' == typeof b) && + (e + ? (j[k] = m.extend(j[k], b)) + : (j[k].data = m.extend(j[k].data, b))), + (g = j[k]), + e || (g.data || (g.data = {}), (g = g.data)), + void 0 !== d && (g[m.camelCase(b)] = d), + 'string' == typeof b + ? ((f = g[b]), null == f && (f = g[m.camelCase(b)])) + : (f = g), + f + ); + } + } + function R(a, b, c) { + if (m.acceptData(a)) { + var d, + e, + f = a.nodeType, + g = f ? m.cache : a, + h = f ? a[m.expando] : m.expando; + if (g[h]) { + if (b && (d = c ? g[h] : g[h].data)) { + m.isArray(b) + ? (b = b.concat(m.map(b, m.camelCase))) + : b in d + ? (b = [b]) + : ((b = m.camelCase(b)), (b = b in d ? [b] : b.split(' '))), + (e = b.length); + while (e--) delete d[b[e]]; + if (c ? !P(d) : !m.isEmptyObject(d)) return; + } + (c || (delete g[h].data, P(g[h]))) && + (f + ? m.cleanData([a], !0) + : k.deleteExpando || g != g.window + ? delete g[h] + : (g[h] = null)); + } + } + } + m.extend({ + cache: {}, + noData: { + 'applet ': !0, + 'embed ': !0, + 'object ': 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000', + }, + hasData: function (a) { + return ( + (a = a.nodeType ? m.cache[a[m.expando]] : a[m.expando]), !!a && !P(a) + ); + }, + data: function (a, b, c) { + return Q(a, b, c); + }, + removeData: function (a, b) { + return R(a, b); + }, + _data: function (a, b, c) { + return Q(a, b, c, !0); + }, + _removeData: function (a, b) { + return R(a, b, !0); + }, + }), + m.fn.extend({ + data: function (a, b) { + var c, + d, + e, + f = this[0], + g = f && f.attributes; + if (void 0 === a) { + if ( + this.length && + ((e = m.data(f)), 1 === f.nodeType && !m._data(f, 'parsedAttrs')) + ) { + c = g.length; + while (c--) + g[c] && + ((d = g[c].name), + 0 === d.indexOf('data-') && + ((d = m.camelCase(d.slice(5))), O(f, d, e[d]))); + m._data(f, 'parsedAttrs', !0); + } + return e; + } + return 'object' == typeof a + ? this.each(function () { + m.data(this, a); + }) + : arguments.length > 1 + ? this.each(function () { + m.data(this, a, b); + }) + : f + ? O(f, a, m.data(f, a)) + : void 0; + }, + removeData: function (a) { + return this.each(function () { + m.removeData(this, a); + }); + }, + }), + m.extend({ + queue: function (a, b, c) { + var d; + return a + ? ((b = (b || 'fx') + 'queue'), + (d = m._data(a, b)), + c && + (!d || m.isArray(c) + ? (d = m._data(a, b, m.makeArray(c))) + : d.push(c)), + d || []) + : void 0; + }, + dequeue: function (a, b) { + b = b || 'fx'; + var c = m.queue(a, b), + d = c.length, + e = c.shift(), + f = m._queueHooks(a, b), + g = function () { + m.dequeue(a, b); + }; + 'inprogress' === e && ((e = c.shift()), d--), + e && + ('fx' === b && c.unshift('inprogress'), + delete f.stop, + e.call(a, g, f)), + !d && f && f.empty.fire(); + }, + _queueHooks: function (a, b) { + var c = b + 'queueHooks'; + return ( + m._data(a, c) || + m._data(a, c, { + empty: m.Callbacks('once memory').add(function () { + m._removeData(a, b + 'queue'), m._removeData(a, c); + }), + }) + ); + }, + }), + m.fn.extend({ + queue: function (a, b) { + var c = 2; + return ( + 'string' != typeof a && ((b = a), (a = 'fx'), c--), + arguments.length < c + ? m.queue(this[0], a) + : void 0 === b + ? this + : this.each(function () { + var c = m.queue(this, a, b); + m._queueHooks(this, a), + 'fx' === a && 'inprogress' !== c[0] && m.dequeue(this, a); + }) + ); + }, + dequeue: function (a) { + return this.each(function () { + m.dequeue(this, a); + }); + }, + clearQueue: function (a) { + return this.queue(a || 'fx', []); + }, + promise: function (a, b) { + var c, + d = 1, + e = m.Deferred(), + f = this, + g = this.length, + h = function () { + --d || e.resolveWith(f, [f]); + }; + 'string' != typeof a && ((b = a), (a = void 0)), (a = a || 'fx'); + while (g--) + (c = m._data(f[g], a + 'queueHooks')), + c && c.empty && (d++, c.empty.add(h)); + return h(), e.promise(b); + }, + }); + var S = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + T = ['Top', 'Right', 'Bottom', 'Left'], + U = function (a, b) { + return ( + (a = b || a), + 'none' === m.css(a, 'display') || !m.contains(a.ownerDocument, a) + ); + }, + V = (m.access = function (a, b, c, d, e, f, g) { + var h = 0, + i = a.length, + j = null == c; + if ('object' === m.type(c)) { + e = !0; + for (h in c) m.access(a, b, h, c[h], !0, f, g); + } else if ( + void 0 !== d && + ((e = !0), + m.isFunction(d) || (g = !0), + j && + (g + ? (b.call(a, d), (b = null)) + : ((j = b), + (b = function (a, b, c) { + return j.call(m(a), c); + }))), + b) + ) + for (; i > h; h++) b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c))); + return e ? a : j ? b.call(a) : i ? b(a[0], c) : f; + }), + W = /^(?:checkbox|radio)$/i; + !(function () { + var a = y.createElement('input'), + b = y.createElement('div'), + c = y.createDocumentFragment(); + if ( + ((b.innerHTML = + "
a"), + (k.leadingWhitespace = 3 === b.firstChild.nodeType), + (k.tbody = !b.getElementsByTagName('tbody').length), + (k.htmlSerialize = !!b.getElementsByTagName('link').length), + (k.html5Clone = + '<:nav>' !== y.createElement('nav').cloneNode(!0).outerHTML), + (a.type = 'checkbox'), + (a.checked = !0), + c.appendChild(a), + (k.appendChecked = a.checked), + (b.innerHTML = ''), + (k.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue), + c.appendChild(b), + (b.innerHTML = ""), + (k.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked), + (k.noCloneEvent = !0), + b.attachEvent && + (b.attachEvent('onclick', function () { + k.noCloneEvent = !1; + }), + b.cloneNode(!0).click()), + null == k.deleteExpando) + ) { + k.deleteExpando = !0; + try { + delete b.test; + } catch (d) { + k.deleteExpando = !1; + } + } + })(), + (function () { + var b, + c, + d = y.createElement('div'); + for (b in { submit: !0, change: !0, focusin: !0 }) + (c = 'on' + b), + (k[b + 'Bubbles'] = c in a) || + (d.setAttribute(c, 't'), + (k[b + 'Bubbles'] = d.attributes[c].expando === !1)); + d = null; + })(); + var X = /^(?:input|select|textarea)$/i, + Y = /^key/, + Z = /^(?:mouse|pointer|contextmenu)|click/, + $ = /^(?:focusinfocus|focusoutblur)$/, + _ = /^([^.]*)(?:\.(.+)|)$/; + function ab() { + return !0; + } + function bb() { + return !1; + } + function cb() { + try { + return y.activeElement; + } catch (a) {} + } + (m.event = { + global: {}, + add: function (a, b, c, d, e) { + var f, + g, + h, + i, + j, + k, + l, + n, + o, + p, + q, + r = m._data(a); + if (r) { + c.handler && ((i = c), (c = i.handler), (e = i.selector)), + c.guid || (c.guid = m.guid++), + (g = r.events) || (g = r.events = {}), + (k = r.handle) || + ((k = r.handle = + function (a) { + return typeof m === K || (a && m.event.triggered === a.type) + ? void 0 + : m.event.dispatch.apply(k.elem, arguments); + }), + (k.elem = a)), + (b = (b || '').match(E) || ['']), + (h = b.length); + while (h--) + (f = _.exec(b[h]) || []), + (o = q = f[1]), + (p = (f[2] || '').split('.').sort()), + o && + ((j = m.event.special[o] || {}), + (o = (e ? j.delegateType : j.bindType) || o), + (j = m.event.special[o] || {}), + (l = m.extend( + { + type: o, + origType: q, + data: d, + handler: c, + guid: c.guid, + selector: e, + needsContext: e && m.expr.match.needsContext.test(e), + namespace: p.join('.'), + }, + i, + )), + (n = g[o]) || + ((n = g[o] = []), + (n.delegateCount = 0), + (j.setup && j.setup.call(a, d, p, k) !== !1) || + (a.addEventListener + ? a.addEventListener(o, k, !1) + : a.attachEvent && a.attachEvent('on' + o, k))), + j.add && + (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), + e ? n.splice(n.delegateCount++, 0, l) : n.push(l), + (m.event.global[o] = !0)); + a = null; + } + }, + remove: function (a, b, c, d, e) { + var f, + g, + h, + i, + j, + k, + l, + n, + o, + p, + q, + r = m.hasData(a) && m._data(a); + if (r && (k = r.events)) { + (b = (b || '').match(E) || ['']), (j = b.length); + while (j--) + if ( + ((h = _.exec(b[j]) || []), + (o = q = h[1]), + (p = (h[2] || '').split('.').sort()), + o) + ) { + (l = m.event.special[o] || {}), + (o = (d ? l.delegateType : l.bindType) || o), + (n = k[o] || []), + (h = + h[2] && + new RegExp('(^|\\.)' + p.join('\\.(?:.*\\.|)') + '(\\.|$)')), + (i = f = n.length); + while (f--) + (g = n[f]), + (!e && q !== g.origType) || + (c && c.guid !== g.guid) || + (h && !h.test(g.namespace)) || + (d && d !== g.selector && ('**' !== d || !g.selector)) || + (n.splice(f, 1), + g.selector && n.delegateCount--, + l.remove && l.remove.call(a, g)); + i && + !n.length && + ((l.teardown && l.teardown.call(a, p, r.handle) !== !1) || + m.removeEvent(a, o, r.handle), + delete k[o]); + } else for (o in k) m.event.remove(a, o + b[j], c, d, !0); + m.isEmptyObject(k) && (delete r.handle, m._removeData(a, 'events')); + } + }, + trigger: function (b, c, d, e) { + var f, + g, + h, + i, + k, + l, + n, + o = [d || y], + p = j.call(b, 'type') ? b.type : b, + q = j.call(b, 'namespace') ? b.namespace.split('.') : []; + if ( + ((h = l = d = d || y), + 3 !== d.nodeType && + 8 !== d.nodeType && + !$.test(p + m.event.triggered) && + (p.indexOf('.') >= 0 && + ((q = p.split('.')), (p = q.shift()), q.sort()), + (g = p.indexOf(':') < 0 && 'on' + p), + (b = b[m.expando] ? b : new m.Event(p, 'object' == typeof b && b)), + (b.isTrigger = e ? 2 : 3), + (b.namespace = q.join('.')), + (b.namespace_re = b.namespace + ? new RegExp('(^|\\.)' + q.join('\\.(?:.*\\.|)') + '(\\.|$)') + : null), + (b.result = void 0), + b.target || (b.target = d), + (c = null == c ? [b] : m.makeArray(c, [b])), + (k = m.event.special[p] || {}), + e || !k.trigger || k.trigger.apply(d, c) !== !1)) + ) { + if (!e && !k.noBubble && !m.isWindow(d)) { + for ( + i = k.delegateType || p, $.test(i + p) || (h = h.parentNode); + h; + h = h.parentNode + ) + o.push(h), (l = h); + l === (d.ownerDocument || y) && + o.push(l.defaultView || l.parentWindow || a); + } + n = 0; + while ((h = o[n++]) && !b.isPropagationStopped()) + (b.type = n > 1 ? i : k.bindType || p), + (f = (m._data(h, 'events') || {})[b.type] && m._data(h, 'handle')), + f && f.apply(h, c), + (f = g && h[g]), + f && + f.apply && + m.acceptData(h) && + ((b.result = f.apply(h, c)), + b.result === !1 && b.preventDefault()); + if ( + ((b.type = p), + !e && + !b.isDefaultPrevented() && + (!k._default || k._default.apply(o.pop(), c) === !1) && + m.acceptData(d) && + g && + d[p] && + !m.isWindow(d)) + ) { + (l = d[g]), l && (d[g] = null), (m.event.triggered = p); + try { + d[p](); + } catch (r) {} + (m.event.triggered = void 0), l && (d[g] = l); + } + return b.result; + } + }, + dispatch: function (a) { + a = m.event.fix(a); + var b, + c, + e, + f, + g, + h = [], + i = d.call(arguments), + j = (m._data(this, 'events') || {})[a.type] || [], + k = m.event.special[a.type] || {}; + if ( + ((i[0] = a), + (a.delegateTarget = this), + !k.preDispatch || k.preDispatch.call(this, a) !== !1) + ) { + (h = m.event.handlers.call(this, a, j)), (b = 0); + while ((f = h[b++]) && !a.isPropagationStopped()) { + (a.currentTarget = f.elem), (g = 0); + while ((e = f.handlers[g++]) && !a.isImmediatePropagationStopped()) + (!a.namespace_re || a.namespace_re.test(e.namespace)) && + ((a.handleObj = e), + (a.data = e.data), + (c = ( + (m.event.special[e.origType] || {}).handle || e.handler + ).apply(f.elem, i)), + void 0 !== c && + (a.result = c) === !1 && + (a.preventDefault(), a.stopPropagation())); + } + return k.postDispatch && k.postDispatch.call(this, a), a.result; + } + }, + handlers: function (a, b) { + var c, + d, + e, + f, + g = [], + h = b.delegateCount, + i = a.target; + if (h && i.nodeType && (!a.button || 'click' !== a.type)) + for (; i != this; i = i.parentNode || this) + if (1 === i.nodeType && (i.disabled !== !0 || 'click' !== a.type)) { + for (e = [], f = 0; h > f; f++) + (d = b[f]), + (c = d.selector + ' '), + void 0 === e[c] && + (e[c] = d.needsContext + ? m(c, this).index(i) >= 0 + : m.find(c, this, null, [i]).length), + e[c] && e.push(d); + e.length && g.push({ elem: i, handlers: e }); + } + return h < b.length && g.push({ elem: this, handlers: b.slice(h) }), g; + }, + fix: function (a) { + if (a[m.expando]) return a; + var b, + c, + d, + e = a.type, + f = a, + g = this.fixHooks[e]; + g || + (this.fixHooks[e] = g = + Z.test(e) ? this.mouseHooks : Y.test(e) ? this.keyHooks : {}), + (d = g.props ? this.props.concat(g.props) : this.props), + (a = new m.Event(f)), + (b = d.length); + while (b--) (c = d[b]), (a[c] = f[c]); + return ( + a.target || (a.target = f.srcElement || y), + 3 === a.target.nodeType && (a.target = a.target.parentNode), + (a.metaKey = !!a.metaKey), + g.filter ? g.filter(a, f) : a + ); + }, + props: + 'altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which'.split( + ' ', + ), + fixHooks: {}, + keyHooks: { + props: 'char charCode key keyCode'.split(' '), + filter: function (a, b) { + return ( + null == a.which && + (a.which = null != b.charCode ? b.charCode : b.keyCode), + a + ); + }, + }, + mouseHooks: { + props: + 'button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement'.split( + ' ', + ), + filter: function (a, b) { + var c, + d, + e, + f = b.button, + g = b.fromElement; + return ( + null == a.pageX && + null != b.clientX && + ((d = a.target.ownerDocument || y), + (e = d.documentElement), + (c = d.body), + (a.pageX = + b.clientX + + ((e && e.scrollLeft) || (c && c.scrollLeft) || 0) - + ((e && e.clientLeft) || (c && c.clientLeft) || 0)), + (a.pageY = + b.clientY + + ((e && e.scrollTop) || (c && c.scrollTop) || 0) - + ((e && e.clientTop) || (c && c.clientTop) || 0))), + !a.relatedTarget && + g && + (a.relatedTarget = g === a.target ? b.toElement : g), + a.which || + void 0 === f || + (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), + a + ); + }, + }, + special: { + load: { noBubble: !0 }, + focus: { + trigger: function () { + if (this !== cb() && this.focus) + try { + return this.focus(), !1; + } catch (a) {} + }, + delegateType: 'focusin', + }, + blur: { + trigger: function () { + return this === cb() && this.blur ? (this.blur(), !1) : void 0; + }, + delegateType: 'focusout', + }, + click: { + trigger: function () { + return m.nodeName(this, 'input') && + 'checkbox' === this.type && + this.click + ? (this.click(), !1) + : void 0; + }, + _default: function (a) { + return m.nodeName(a.target, 'a'); + }, + }, + beforeunload: { + postDispatch: function (a) { + void 0 !== a.result && + a.originalEvent && + (a.originalEvent.returnValue = a.result); + }, + }, + }, + simulate: function (a, b, c, d) { + var e = m.extend(new m.Event(), c, { + type: a, + isSimulated: !0, + originalEvent: {}, + }); + d ? m.event.trigger(e, null, b) : m.event.dispatch.call(b, e), + e.isDefaultPrevented() && c.preventDefault(); + }, + }), + (m.removeEvent = y.removeEventListener + ? function (a, b, c) { + a.removeEventListener && a.removeEventListener(b, c, !1); + } + : function (a, b, c) { + var d = 'on' + b; + a.detachEvent && + (typeof a[d] === K && (a[d] = null), a.detachEvent(d, c)); + }), + (m.Event = function (a, b) { + return this instanceof m.Event + ? (a && a.type + ? ((this.originalEvent = a), + (this.type = a.type), + (this.isDefaultPrevented = + a.defaultPrevented || + (void 0 === a.defaultPrevented && a.returnValue === !1) + ? ab + : bb)) + : (this.type = a), + b && m.extend(this, b), + (this.timeStamp = (a && a.timeStamp) || m.now()), + void (this[m.expando] = !0)) + : new m.Event(a, b); + }), + (m.Event.prototype = { + isDefaultPrevented: bb, + isPropagationStopped: bb, + isImmediatePropagationStopped: bb, + preventDefault: function () { + var a = this.originalEvent; + (this.isDefaultPrevented = ab), + a && (a.preventDefault ? a.preventDefault() : (a.returnValue = !1)); + }, + stopPropagation: function () { + var a = this.originalEvent; + (this.isPropagationStopped = ab), + a && + (a.stopPropagation && a.stopPropagation(), (a.cancelBubble = !0)); + }, + stopImmediatePropagation: function () { + var a = this.originalEvent; + (this.isImmediatePropagationStopped = ab), + a && a.stopImmediatePropagation && a.stopImmediatePropagation(), + this.stopPropagation(); + }, + }), + m.each( + { + mouseenter: 'mouseover', + mouseleave: 'mouseout', + pointerenter: 'pointerover', + pointerleave: 'pointerout', + }, + function (a, b) { + m.event.special[a] = { + delegateType: b, + bindType: b, + handle: function (a) { + var c, + d = this, + e = a.relatedTarget, + f = a.handleObj; + return ( + (!e || (e !== d && !m.contains(d, e))) && + ((a.type = f.origType), + (c = f.handler.apply(this, arguments)), + (a.type = b)), + c + ); + }, + }; + }, + ), + k.submitBubbles || + (m.event.special.submit = { + setup: function () { + return m.nodeName(this, 'form') + ? !1 + : void m.event.add( + this, + 'click._submit keypress._submit', + function (a) { + var b = a.target, + c = + m.nodeName(b, 'input') || m.nodeName(b, 'button') + ? b.form + : void 0; + c && + !m._data(c, 'submitBubbles') && + (m.event.add(c, 'submit._submit', function (a) { + a._submit_bubble = !0; + }), + m._data(c, 'submitBubbles', !0)); + }, + ); + }, + postDispatch: function (a) { + a._submit_bubble && + (delete a._submit_bubble, + this.parentNode && + !a.isTrigger && + m.event.simulate('submit', this.parentNode, a, !0)); + }, + teardown: function () { + return m.nodeName(this, 'form') + ? !1 + : void m.event.remove(this, '._submit'); + }, + }), + k.changeBubbles || + (m.event.special.change = { + setup: function () { + return X.test(this.nodeName) + ? (('checkbox' === this.type || 'radio' === this.type) && + (m.event.add(this, 'propertychange._change', function (a) { + 'checked' === a.originalEvent.propertyName && + (this._just_changed = !0); + }), + m.event.add(this, 'click._change', function (a) { + this._just_changed && + !a.isTrigger && + (this._just_changed = !1), + m.event.simulate('change', this, a, !0); + })), + !1) + : void m.event.add(this, 'beforeactivate._change', function (a) { + var b = a.target; + X.test(b.nodeName) && + !m._data(b, 'changeBubbles') && + (m.event.add(b, 'change._change', function (a) { + !this.parentNode || + a.isSimulated || + a.isTrigger || + m.event.simulate('change', this.parentNode, a, !0); + }), + m._data(b, 'changeBubbles', !0)); + }); + }, + handle: function (a) { + var b = a.target; + return this !== b || + a.isSimulated || + a.isTrigger || + ('radio' !== b.type && 'checkbox' !== b.type) + ? a.handleObj.handler.apply(this, arguments) + : void 0; + }, + teardown: function () { + return m.event.remove(this, '._change'), !X.test(this.nodeName); + }, + }), + k.focusinBubbles || + m.each({ focus: 'focusin', blur: 'focusout' }, function (a, b) { + var c = function (a) { + m.event.simulate(b, a.target, m.event.fix(a), !0); + }; + m.event.special[b] = { + setup: function () { + var d = this.ownerDocument || this, + e = m._data(d, b); + e || d.addEventListener(a, c, !0), m._data(d, b, (e || 0) + 1); + }, + teardown: function () { + var d = this.ownerDocument || this, + e = m._data(d, b) - 1; + e + ? m._data(d, b, e) + : (d.removeEventListener(a, c, !0), m._removeData(d, b)); + }, + }; + }), + m.fn.extend({ + on: function (a, b, c, d, e) { + var f, g; + if ('object' == typeof a) { + 'string' != typeof b && ((c = c || b), (b = void 0)); + for (f in a) this.on(f, b, c, a[f], e); + return this; + } + if ( + (null == c && null == d + ? ((d = b), (c = b = void 0)) + : null == d && + ('string' == typeof b + ? ((d = c), (c = void 0)) + : ((d = c), (c = b), (b = void 0))), + d === !1) + ) + d = bb; + else if (!d) return this; + return ( + 1 === e && + ((g = d), + (d = function (a) { + return m().off(a), g.apply(this, arguments); + }), + (d.guid = g.guid || (g.guid = m.guid++))), + this.each(function () { + m.event.add(this, a, d, c, b); + }) + ); + }, + one: function (a, b, c, d) { + return this.on(a, b, c, d, 1); + }, + off: function (a, b, c) { + var d, e; + if (a && a.preventDefault && a.handleObj) + return ( + (d = a.handleObj), + m(a.delegateTarget).off( + d.namespace ? d.origType + '.' + d.namespace : d.origType, + d.selector, + d.handler, + ), + this + ); + if ('object' == typeof a) { + for (e in a) this.off(e, b, a[e]); + return this; + } + return ( + (b === !1 || 'function' == typeof b) && ((c = b), (b = void 0)), + c === !1 && (c = bb), + this.each(function () { + m.event.remove(this, a, c, b); + }) + ); + }, + trigger: function (a, b) { + return this.each(function () { + m.event.trigger(a, b, this); + }); + }, + triggerHandler: function (a, b) { + var c = this[0]; + return c ? m.event.trigger(a, b, c, !0) : void 0; + }, + }); + function db(a) { + var b = eb.split('|'), + c = a.createDocumentFragment(); + if (c.createElement) while (b.length) c.createElement(b.pop()); + return c; + } + var eb = + 'abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video', + fb = / jQuery\d+="(?:null|\d+)"/g, + gb = new RegExp('<(?:' + eb + ')[\\s/>]', 'i'), + hb = /^\s+/, + ib = + /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + jb = /<([\w:]+)/, + kb = /\s*$/g, + rb = { + option: [1, "'], + legend: [1, '
', '
'], + area: [1, '', ''], + param: [1, '', ''], + thead: [1, '', '
'], + tr: [2, '', '
'], + col: [2, '', '
'], + td: [3, '', '
'], + _default: k.htmlSerialize ? [0, '', ''] : [1, 'X
', '
'], + }, + sb = db(y), + tb = sb.appendChild(y.createElement('div')); + (rb.optgroup = rb.option), + (rb.tbody = rb.tfoot = rb.colgroup = rb.caption = rb.thead), + (rb.th = rb.td); + function ub(a, b) { + var c, + d, + e = 0, + f = + typeof a.getElementsByTagName !== K + ? a.getElementsByTagName(b || '*') + : typeof a.querySelectorAll !== K + ? a.querySelectorAll(b || '*') + : void 0; + if (!f) + for (f = [], c = a.childNodes || a; null != (d = c[e]); e++) + !b || m.nodeName(d, b) ? f.push(d) : m.merge(f, ub(d, b)); + return void 0 === b || (b && m.nodeName(a, b)) ? m.merge([a], f) : f; + } + function vb(a) { + W.test(a.type) && (a.defaultChecked = a.checked); + } + function wb(a, b) { + return m.nodeName(a, 'table') && + m.nodeName(11 !== b.nodeType ? b : b.firstChild, 'tr') + ? a.getElementsByTagName('tbody')[0] || + a.appendChild(a.ownerDocument.createElement('tbody')) + : a; + } + function xb(a) { + return (a.type = (null !== m.find.attr(a, 'type')) + '/' + a.type), a; + } + function yb(a) { + var b = pb.exec(a.type); + return b ? (a.type = b[1]) : a.removeAttribute('type'), a; + } + function zb(a, b) { + for (var c, d = 0; null != (c = a[d]); d++) + m._data(c, 'globalEval', !b || m._data(b[d], 'globalEval')); + } + function Ab(a, b) { + if (1 === b.nodeType && m.hasData(a)) { + var c, + d, + e, + f = m._data(a), + g = m._data(b, f), + h = f.events; + if (h) { + delete g.handle, (g.events = {}); + for (c in h) + for (d = 0, e = h[c].length; e > d; d++) m.event.add(b, c, h[c][d]); + } + g.data && (g.data = m.extend({}, g.data)); + } + } + function Bb(a, b) { + var c, d, e; + if (1 === b.nodeType) { + if (((c = b.nodeName.toLowerCase()), !k.noCloneEvent && b[m.expando])) { + e = m._data(b); + for (d in e.events) m.removeEvent(b, d, e.handle); + b.removeAttribute(m.expando); + } + 'script' === c && b.text !== a.text + ? ((xb(b).text = a.text), yb(b)) + : 'object' === c + ? (b.parentNode && (b.outerHTML = a.outerHTML), + k.html5Clone && + a.innerHTML && + !m.trim(b.innerHTML) && + (b.innerHTML = a.innerHTML)) + : 'input' === c && W.test(a.type) + ? ((b.defaultChecked = b.checked = a.checked), + b.value !== a.value && (b.value = a.value)) + : 'option' === c + ? (b.defaultSelected = b.selected = a.defaultSelected) + : ('input' === c || 'textarea' === c) && + (b.defaultValue = a.defaultValue); + } + } + m.extend({ + clone: function (a, b, c) { + var d, + e, + f, + g, + h, + i = m.contains(a.ownerDocument, a); + if ( + (k.html5Clone || m.isXMLDoc(a) || !gb.test('<' + a.nodeName + '>') + ? (f = a.cloneNode(!0)) + : ((tb.innerHTML = a.outerHTML), tb.removeChild((f = tb.firstChild))), + !( + (k.noCloneEvent && k.noCloneChecked) || + (1 !== a.nodeType && 11 !== a.nodeType) || + m.isXMLDoc(a) + )) + ) + for (d = ub(f), h = ub(a), g = 0; null != (e = h[g]); ++g) + d[g] && Bb(e, d[g]); + if (b) + if (c) + for (h = h || ub(a), d = d || ub(f), g = 0; null != (e = h[g]); g++) + Ab(e, d[g]); + else Ab(a, f); + return ( + (d = ub(f, 'script')), + d.length > 0 && zb(d, !i && ub(a, 'script')), + (d = h = e = null), + f + ); + }, + buildFragment: function (a, b, c, d) { + for ( + var e, f, g, h, i, j, l, n = a.length, o = db(b), p = [], q = 0; + n > q; + q++ + ) + if (((f = a[q]), f || 0 === f)) + if ('object' === m.type(f)) m.merge(p, f.nodeType ? [f] : f); + else if (lb.test(f)) { + (h = h || o.appendChild(b.createElement('div'))), + (i = (jb.exec(f) || ['', ''])[1].toLowerCase()), + (l = rb[i] || rb._default), + (h.innerHTML = l[1] + f.replace(ib, '<$1>') + l[2]), + (e = l[0]); + while (e--) h = h.lastChild; + if ( + (!k.leadingWhitespace && + hb.test(f) && + p.push(b.createTextNode(hb.exec(f)[0])), + !k.tbody) + ) { + (f = + 'table' !== i || kb.test(f) + ? '' !== l[1] || kb.test(f) + ? 0 + : h + : h.firstChild), + (e = f && f.childNodes.length); + while (e--) + m.nodeName((j = f.childNodes[e]), 'tbody') && + !j.childNodes.length && + f.removeChild(j); + } + m.merge(p, h.childNodes), (h.textContent = ''); + while (h.firstChild) h.removeChild(h.firstChild); + h = o.lastChild; + } else p.push(b.createTextNode(f)); + h && o.removeChild(h), + k.appendChecked || m.grep(ub(p, 'input'), vb), + (q = 0); + while ((f = p[q++])) + if ( + (!d || -1 === m.inArray(f, d)) && + ((g = m.contains(f.ownerDocument, f)), + (h = ub(o.appendChild(f), 'script')), + g && zb(h), + c) + ) { + e = 0; + while ((f = h[e++])) ob.test(f.type || '') && c.push(f); + } + return (h = null), o; + }, + cleanData: function (a, b) { + for ( + var d, + e, + f, + g, + h = 0, + i = m.expando, + j = m.cache, + l = k.deleteExpando, + n = m.event.special; + null != (d = a[h]); + h++ + ) + if ((b || m.acceptData(d)) && ((f = d[i]), (g = f && j[f]))) { + if (g.events) + for (e in g.events) + n[e] ? m.event.remove(d, e) : m.removeEvent(d, e, g.handle); + j[f] && + (delete j[f], + l + ? delete d[i] + : typeof d.removeAttribute !== K + ? d.removeAttribute(i) + : (d[i] = null), + c.push(f)); + } + }, + }), + m.fn.extend({ + text: function (a) { + return V( + this, + function (a) { + return void 0 === a + ? m.text(this) + : this.empty().append( + ((this[0] && this[0].ownerDocument) || y).createTextNode(a), + ); + }, + null, + a, + arguments.length, + ); + }, + append: function () { + return this.domManip(arguments, function (a) { + if ( + 1 === this.nodeType || + 11 === this.nodeType || + 9 === this.nodeType + ) { + var b = wb(this, a); + b.appendChild(a); + } + }); + }, + prepend: function () { + return this.domManip(arguments, function (a) { + if ( + 1 === this.nodeType || + 11 === this.nodeType || + 9 === this.nodeType + ) { + var b = wb(this, a); + b.insertBefore(a, b.firstChild); + } + }); + }, + before: function () { + return this.domManip(arguments, function (a) { + this.parentNode && this.parentNode.insertBefore(a, this); + }); + }, + after: function () { + return this.domManip(arguments, function (a) { + this.parentNode && this.parentNode.insertBefore(a, this.nextSibling); + }); + }, + remove: function (a, b) { + for ( + var c, d = a ? m.filter(a, this) : this, e = 0; + null != (c = d[e]); + e++ + ) + b || 1 !== c.nodeType || m.cleanData(ub(c)), + c.parentNode && + (b && m.contains(c.ownerDocument, c) && zb(ub(c, 'script')), + c.parentNode.removeChild(c)); + return this; + }, + empty: function () { + for (var a, b = 0; null != (a = this[b]); b++) { + 1 === a.nodeType && m.cleanData(ub(a, !1)); + while (a.firstChild) a.removeChild(a.firstChild); + a.options && m.nodeName(a, 'select') && (a.options.length = 0); + } + return this; + }, + clone: function (a, b) { + return ( + (a = null == a ? !1 : a), + (b = null == b ? a : b), + this.map(function () { + return m.clone(this, a, b); + }) + ); + }, + html: function (a) { + return V( + this, + function (a) { + var b = this[0] || {}, + c = 0, + d = this.length; + if (void 0 === a) + return 1 === b.nodeType ? b.innerHTML.replace(fb, '') : void 0; + if ( + !( + 'string' != typeof a || + mb.test(a) || + (!k.htmlSerialize && gb.test(a)) || + (!k.leadingWhitespace && hb.test(a)) || + rb[(jb.exec(a) || ['', ''])[1].toLowerCase()] + ) + ) { + a = a.replace(ib, '<$1>'); + try { + for (; d > c; c++) + (b = this[c] || {}), + 1 === b.nodeType && + (m.cleanData(ub(b, !1)), (b.innerHTML = a)); + b = 0; + } catch (e) {} + } + b && this.empty().append(a); + }, + null, + a, + arguments.length, + ); + }, + replaceWith: function () { + var a = arguments[0]; + return ( + this.domManip(arguments, function (b) { + (a = this.parentNode), + m.cleanData(ub(this)), + a && a.replaceChild(b, this); + }), + a && (a.length || a.nodeType) ? this : this.remove() + ); + }, + detach: function (a) { + return this.remove(a, !0); + }, + domManip: function (a, b) { + a = e.apply([], a); + var c, + d, + f, + g, + h, + i, + j = 0, + l = this.length, + n = this, + o = l - 1, + p = a[0], + q = m.isFunction(p); + if (q || (l > 1 && 'string' == typeof p && !k.checkClone && nb.test(p))) + return this.each(function (c) { + var d = n.eq(c); + q && (a[0] = p.call(this, c, d.html())), d.domManip(a, b); + }); + if ( + l && + ((i = m.buildFragment(a, this[0].ownerDocument, !1, this)), + (c = i.firstChild), + 1 === i.childNodes.length && (i = c), + c) + ) { + for (g = m.map(ub(i, 'script'), xb), f = g.length; l > j; j++) + (d = i), + j !== o && + ((d = m.clone(d, !0, !0)), f && m.merge(g, ub(d, 'script'))), + b.call(this[j], d, j); + if (f) + for ( + h = g[g.length - 1].ownerDocument, m.map(g, yb), j = 0; + f > j; + j++ + ) + (d = g[j]), + ob.test(d.type || '') && + !m._data(d, 'globalEval') && + m.contains(h, d) && + (d.src + ? m._evalUrl && m._evalUrl(d.src) + : m.globalEval( + (d.text || d.textContent || d.innerHTML || '').replace( + qb, + '', + ), + )); + i = c = null; + } + return this; + }, + }), + m.each( + { + appendTo: 'append', + prependTo: 'prepend', + insertBefore: 'before', + insertAfter: 'after', + replaceAll: 'replaceWith', + }, + function (a, b) { + m.fn[a] = function (a) { + for (var c, d = 0, e = [], g = m(a), h = g.length - 1; h >= d; d++) + (c = d === h ? this : this.clone(!0)), + m(g[d])[b](c), + f.apply(e, c.get()); + return this.pushStack(e); + }; + }, + ); + var Cb, + Db = {}; + function Eb(b, c) { + var d, + e = m(c.createElement(b)).appendTo(c.body), + f = + a.getDefaultComputedStyle && (d = a.getDefaultComputedStyle(e[0])) + ? d.display + : m.css(e[0], 'display'); + return e.detach(), f; + } + function Fb(a) { + var b = y, + c = Db[a]; + return ( + c || + ((c = Eb(a, b)), + ('none' !== c && c) || + ((Cb = ( + Cb || m("