From e7e765781f13be6f3fb41e0a45475dd1971d5184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20S=C3=B6semann?= Date: Thu, 3 Sep 2020 16:02:45 +0200 Subject: [PATCH] Refactored to Groundrules --- .forceignore | 21 +- .github/workflows/verifyPullRequest.yml | 25 + .gitignore | 32 +- config/project-scratch-def.json | 34 +- .../applications/PlantUML.app-meta.xml | 0 .../default}/classes/ApexClassForTests.cls | 0 .../classes/ApexClassForTests.cls-meta.xml | 0 .../main/default}/classes/ApexParser.cls | 0 .../default}/classes/ApexParser.cls-meta.xml | 0 .../classes/ClassDiagramCreatorCtrl.cls | 0 .../ClassDiagramCreatorCtrl.cls-meta.xml | 0 .../main/default}/classes/CodeMetrics.cls | 0 .../default}/classes/CodeMetrics.cls-meta.xml | 0 .../main/default}/classes/ERDCreatorCtrl.cls | 0 .../classes/ERDCreatorCtrl.cls-meta.xml | 0 .../classes/MultiselectController.cls | 0 .../MultiselectController.cls-meta.xml | 0 .../classes/MultiselectControllerTest.cls | 0 .../MultiselectControllerTest.cls-meta.xml | 0 .../default}/classes/PlantUMLClassDiagram.cls | 0 .../classes/PlantUMLClassDiagram.cls-meta.xml | 0 .../default}/classes/PlantUMLERDiagram.cls | 0 .../classes/PlantUMLERDiagram.cls-meta.xml | 0 .../default}/classes/SelectOptionSorter.cls | 0 .../classes/SelectOptionSorter.cls-meta.xml | 0 .../components/MultiselectPicklist.component | 0 .../MultiselectPicklist.component-meta.xml | 0 .../default}/contentassets/plantuml.asset | Bin .../contentassets/plantuml.asset-meta.xml | 0 .../default}/contentassets/plantuml1.asset | Bin .../contentassets/plantuml1.asset-meta.xml | 0 .../PlantUML_UtilityBar.flexipage-meta.xml | 0 .../Plant_UML_UtilityBar.flexipage-meta.xml | 0 .../default}/pages/classDiagramCreator.page | 0 .../pages/classDiagramCreator.page-meta.xml | 0 .../main/default}/pages/erdCreator.page | 0 .../default}/pages/erdCreator.page-meta.xml | 0 .../PlantUml.permissionset-meta.xml | 0 .../default/staticresources/jquery_min_js.js | 0 .../jquery_min_js.resource-meta.xml | 0 .../default/staticresources/rawdeflate_js.js | 0 .../rawdeflate_js.resource-meta.xml | 0 .../tabs/ClassDiagramCreator.tab-meta.xml | 1 - .../main/default/tabs/ErdCreator.tab-meta.xml | 1 - mdapi-source/applications/PlantUML.app | 19 - .../flexipages/PlantUML_UtilityBar.flexipage | 16 - .../flexipages/Plant_UML_UtilityBar.flexipage | 16 - mdapi-source/package.xml | 55 - .../permissionsets/PlantUml.permissionset | 37 - .../staticresources/jquery_min_js.resource | 2 - .../staticresources/rawdeflate_js.resource | 1679 ----------------- mdapi-source/tabs/ClassDiagramCreator.tab | 7 - mdapi-source/tabs/ErdCreator.tab | 7 - ruleset.xml | 25 + scripts/config.sh | 5 + scripts/createScratchOrg.sh | 50 + scripts/deployMetadata.sh | 10 + scripts/local-config.sh | 6 - scripts/orgInit.sh | 14 - scripts/packagingDeployment.sh | 24 - sfdx-project.json | 6 +- .../default/classes/ApexClassForTests.cls | 95 - .../classes/ApexClassForTests.cls-meta.xml | 5 - .../main/default/classes/ApexParser.cls | 240 --- .../default/classes/ApexParser.cls-meta.xml | 5 - .../classes/ClassDiagramCreatorCtrl.cls | 118 -- .../ClassDiagramCreatorCtrl.cls-meta.xml | 5 - .../main/default/classes/CodeMetrics.cls | 64 - .../default/classes/CodeMetrics.cls-meta.xml | 5 - .../main/default/classes/ERDCreatorCtrl.cls | 136 -- .../classes/ERDCreatorCtrl.cls-meta.xml | 5 - .../default/classes/MultiselectController.cls | 36 - .../MultiselectController.cls-meta.xml | 5 - .../classes/MultiselectControllerTest.cls | 36 - .../MultiselectControllerTest.cls-meta.xml | 5 - .../default/classes/PlantUMLClassDiagram.cls | 90 - .../classes/PlantUMLClassDiagram.cls-meta.xml | 5 - .../default/classes/PlantUMLERDiagram.cls | 238 --- .../classes/PlantUMLERDiagram.cls-meta.xml | 5 - .../default/classes/SelectOptionSorter.cls | 138 -- .../classes/SelectOptionSorter.cls-meta.xml | 5 - .../components/MultiselectPicklist.component | 142 -- .../MultiselectPicklist.component-meta.xml | 5 - .../main/default/contentassets/plantuml.asset | Bin 33343 -> 0 bytes .../contentassets/plantuml.asset-meta.xml | 17 - .../default/contentassets/plantuml1.asset | Bin 33343 -> 0 bytes .../contentassets/plantuml1.asset-meta.xml | 17 - .../default/pages/classDiagramCreator.page | 159 -- .../pages/classDiagramCreator.page-meta.xml | 7 - .../main/default/pages/erdCreator.page | 169 -- .../default/pages/erdCreator.page-meta.xml | 7 - .../jquery_min_js.resource-meta.xml | 5 - .../rawdeflate_js.resource-meta.xml | 5 - 93 files changed, 184 insertions(+), 3682 deletions(-) create mode 100644 .github/workflows/verifyPullRequest.yml mode change 100755 => 100644 config/project-scratch-def.json rename {sfdx-source => force-app}/main/default/applications/PlantUML.app-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/ApexClassForTests.cls (100%) rename {mdapi-source => force-app/main/default}/classes/ApexClassForTests.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/ApexParser.cls (100%) rename {mdapi-source => force-app/main/default}/classes/ApexParser.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/ClassDiagramCreatorCtrl.cls (100%) rename {mdapi-source => force-app/main/default}/classes/ClassDiagramCreatorCtrl.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/CodeMetrics.cls (100%) rename {mdapi-source => force-app/main/default}/classes/CodeMetrics.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/ERDCreatorCtrl.cls (100%) rename {mdapi-source => force-app/main/default}/classes/ERDCreatorCtrl.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/MultiselectController.cls (100%) rename {mdapi-source => force-app/main/default}/classes/MultiselectController.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/MultiselectControllerTest.cls (100%) rename {mdapi-source => force-app/main/default}/classes/MultiselectControllerTest.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/PlantUMLClassDiagram.cls (100%) rename {mdapi-source => force-app/main/default}/classes/PlantUMLClassDiagram.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/PlantUMLERDiagram.cls (100%) rename {mdapi-source => force-app/main/default}/classes/PlantUMLERDiagram.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/classes/SelectOptionSorter.cls (100%) rename {mdapi-source => force-app/main/default}/classes/SelectOptionSorter.cls-meta.xml (100%) rename {mdapi-source => force-app/main/default}/components/MultiselectPicklist.component (100%) rename {mdapi-source => force-app/main/default}/components/MultiselectPicklist.component-meta.xml (100%) rename {mdapi-source => force-app/main/default}/contentassets/plantuml.asset (100%) rename {mdapi-source => force-app/main/default}/contentassets/plantuml.asset-meta.xml (100%) rename {mdapi-source => force-app/main/default}/contentassets/plantuml1.asset (100%) rename {mdapi-source => force-app/main/default}/contentassets/plantuml1.asset-meta.xml (100%) rename {sfdx-source => force-app}/main/default/flexipages/PlantUML_UtilityBar.flexipage-meta.xml (100%) rename {sfdx-source => force-app}/main/default/flexipages/Plant_UML_UtilityBar.flexipage-meta.xml (100%) rename {mdapi-source => force-app/main/default}/pages/classDiagramCreator.page (100%) rename {mdapi-source => force-app/main/default}/pages/classDiagramCreator.page-meta.xml (100%) rename {mdapi-source => force-app/main/default}/pages/erdCreator.page (100%) rename {mdapi-source => force-app/main/default}/pages/erdCreator.page-meta.xml (100%) rename {sfdx-source => force-app}/main/default/permissionsets/PlantUml.permissionset-meta.xml (100%) rename {sfdx-source => force-app}/main/default/staticresources/jquery_min_js.js (100%) rename {mdapi-source => force-app/main/default}/staticresources/jquery_min_js.resource-meta.xml (100%) rename {sfdx-source => force-app}/main/default/staticresources/rawdeflate_js.js (100%) rename {mdapi-source => force-app/main/default}/staticresources/rawdeflate_js.resource-meta.xml (100%) rename {sfdx-source => force-app}/main/default/tabs/ClassDiagramCreator.tab-meta.xml (86%) rename {sfdx-source => force-app}/main/default/tabs/ErdCreator.tab-meta.xml (84%) delete mode 100644 mdapi-source/applications/PlantUML.app delete mode 100644 mdapi-source/flexipages/PlantUML_UtilityBar.flexipage delete mode 100644 mdapi-source/flexipages/Plant_UML_UtilityBar.flexipage delete mode 100644 mdapi-source/package.xml delete mode 100644 mdapi-source/permissionsets/PlantUml.permissionset delete mode 100644 mdapi-source/staticresources/jquery_min_js.resource delete mode 100644 mdapi-source/staticresources/rawdeflate_js.resource delete mode 100644 mdapi-source/tabs/ClassDiagramCreator.tab delete mode 100644 mdapi-source/tabs/ErdCreator.tab create mode 100644 ruleset.xml create mode 100644 scripts/config.sh create mode 100755 scripts/createScratchOrg.sh create mode 100644 scripts/deployMetadata.sh delete mode 100755 scripts/local-config.sh delete mode 100755 scripts/orgInit.sh delete mode 100755 scripts/packagingDeployment.sh delete mode 100644 sfdx-source/main/default/classes/ApexClassForTests.cls delete mode 100644 sfdx-source/main/default/classes/ApexClassForTests.cls-meta.xml delete mode 100644 sfdx-source/main/default/classes/ApexParser.cls delete mode 100644 sfdx-source/main/default/classes/ApexParser.cls-meta.xml delete mode 100644 sfdx-source/main/default/classes/ClassDiagramCreatorCtrl.cls delete mode 100644 sfdx-source/main/default/classes/ClassDiagramCreatorCtrl.cls-meta.xml delete mode 100644 sfdx-source/main/default/classes/CodeMetrics.cls delete mode 100644 sfdx-source/main/default/classes/CodeMetrics.cls-meta.xml delete mode 100644 sfdx-source/main/default/classes/ERDCreatorCtrl.cls delete mode 100644 sfdx-source/main/default/classes/ERDCreatorCtrl.cls-meta.xml delete mode 100644 sfdx-source/main/default/classes/MultiselectController.cls delete mode 100644 sfdx-source/main/default/classes/MultiselectController.cls-meta.xml delete mode 100644 sfdx-source/main/default/classes/MultiselectControllerTest.cls delete mode 100644 sfdx-source/main/default/classes/MultiselectControllerTest.cls-meta.xml delete mode 100644 sfdx-source/main/default/classes/PlantUMLClassDiagram.cls delete mode 100644 sfdx-source/main/default/classes/PlantUMLClassDiagram.cls-meta.xml delete mode 100644 sfdx-source/main/default/classes/PlantUMLERDiagram.cls delete mode 100644 sfdx-source/main/default/classes/PlantUMLERDiagram.cls-meta.xml delete mode 100644 sfdx-source/main/default/classes/SelectOptionSorter.cls delete mode 100644 sfdx-source/main/default/classes/SelectOptionSorter.cls-meta.xml delete mode 100644 sfdx-source/main/default/components/MultiselectPicklist.component delete mode 100644 sfdx-source/main/default/components/MultiselectPicklist.component-meta.xml delete mode 100644 sfdx-source/main/default/contentassets/plantuml.asset delete mode 100644 sfdx-source/main/default/contentassets/plantuml.asset-meta.xml delete mode 100644 sfdx-source/main/default/contentassets/plantuml1.asset delete mode 100644 sfdx-source/main/default/contentassets/plantuml1.asset-meta.xml delete mode 100644 sfdx-source/main/default/pages/classDiagramCreator.page delete mode 100644 sfdx-source/main/default/pages/classDiagramCreator.page-meta.xml delete mode 100644 sfdx-source/main/default/pages/erdCreator.page delete mode 100644 sfdx-source/main/default/pages/erdCreator.page-meta.xml delete mode 100644 sfdx-source/main/default/staticresources/jquery_min_js.resource-meta.xml delete mode 100644 sfdx-source/main/default/staticresources/rawdeflate_js.resource-meta.xml diff --git a/.forceignore b/.forceignore index d88e9c1..d121da2 100644 --- a/.forceignore +++ b/.forceignore @@ -1 +1,20 @@ -AppSwitcher.appMenu \ No newline at end of file +# List files or directories below to ignore them when running force:source:push, force:source:pull, and force:source:status +# More information: https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_exclude_source.htm + +package.xml +**appMenu +**appSwitcher +**profiles +**settings +**emailservices +**namedCredential +*crt + +# LWC configuration files +**/jsconfig.json +**/.eslintrc.json + +# LWC Jest +**/__tests__/** + +**profile \ No newline at end of file diff --git a/.github/workflows/verifyPullRequest.yml b/.github/workflows/verifyPullRequest.yml new file mode 100644 index 0000000..b698a42 --- /dev/null +++ b/.github/workflows/verifyPullRequest.yml @@ -0,0 +1,25 @@ +name: Verify Pull Request + +on: + pull_request: + branches: + - trunk + +jobs: + build: + + runs-on: ubuntu-latest + container: + image: docker://salesforce/salesforcedx:latest-full + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Authorise Dev Hub + run: | + echo ${{ secrets.DEV_HUB_URL }} > devHubURLFile + sfdx force:auth:sfdxurl:store -d -f devHubURLFile + rm devHubURLFile + - name: trigger build + run: | + chmod +x ./scripts/createScratchOrg.sh + ./scripts/createScratchOrg.sh -p diff --git a/.gitignore b/.gitignore index 47dbfec..3e28471 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,30 @@ -/salesforce.schema -.settings/ -.idea/ +# This file is used for Git repositories to specify intentionally untracked files that Git should ignore. +# If you are not using git, you can delete this file. For more information see: https://git-scm.com/docs/gitignore +# For useful gitignore templates see: https://github.com/github/gitignore + +# Salesforce cache .sfdx/ +.vscode/ + +# Project temps +mdapi/ +metadata + + +# MacOS system files +.DS_Store + +# VS Code project settings +.vscode/ + +# IDEA IlluminatedCloud/ -projectFilesBackup/ \ No newline at end of file +projectFilesBackup/ +.idea/ +/out/production/ + +node_modules/ + +Canvases/ +package-lock.json +/salesforce-plantuml.iml diff --git a/config/project-scratch-def.json b/config/project-scratch-def.json old mode 100755 new mode 100644 index 26f1fe8..bc38ffd --- a/config/project-scratch-def.json +++ b/config/project-scratch-def.json @@ -1,19 +1,21 @@ { - "orgName":"plantuml_dev", - "edition":"Developer", - "features":[ - "CascadeDelete", - "DebugApex", - "AuthorApex", - "Communities" - ], - "settings":{ - - "orgPreferenceSettings":{ - "networksEnabled":true, - "s1DesktopEnabled":true, - "chatterEnabled":true, - "translation": true - } + "orgName": "TEMPLATE_DEV", + "country": "US", + "edition": "Partner Developer", + "language": "en_US", + "hasSampleData": true, + "settings": { + "lightningExperienceSettings": { + "enableS1DesktopEnabled": true + }, + "mobileSettings": { + "enableS1EncryptedStoragePref2": true + }, + "chatterSettings": { + "enableChatter": true + }, + "languageSettings": { + "enableTranslationWorkbench": true } + } } \ No newline at end of file diff --git a/sfdx-source/main/default/applications/PlantUML.app-meta.xml b/force-app/main/default/applications/PlantUML.app-meta.xml similarity index 100% rename from sfdx-source/main/default/applications/PlantUML.app-meta.xml rename to force-app/main/default/applications/PlantUML.app-meta.xml diff --git a/mdapi-source/classes/ApexClassForTests.cls b/force-app/main/default/classes/ApexClassForTests.cls similarity index 100% rename from mdapi-source/classes/ApexClassForTests.cls rename to force-app/main/default/classes/ApexClassForTests.cls diff --git a/mdapi-source/classes/ApexClassForTests.cls-meta.xml b/force-app/main/default/classes/ApexClassForTests.cls-meta.xml similarity index 100% rename from mdapi-source/classes/ApexClassForTests.cls-meta.xml rename to force-app/main/default/classes/ApexClassForTests.cls-meta.xml diff --git a/mdapi-source/classes/ApexParser.cls b/force-app/main/default/classes/ApexParser.cls similarity index 100% rename from mdapi-source/classes/ApexParser.cls rename to force-app/main/default/classes/ApexParser.cls diff --git a/mdapi-source/classes/ApexParser.cls-meta.xml b/force-app/main/default/classes/ApexParser.cls-meta.xml similarity index 100% rename from mdapi-source/classes/ApexParser.cls-meta.xml rename to force-app/main/default/classes/ApexParser.cls-meta.xml diff --git a/mdapi-source/classes/ClassDiagramCreatorCtrl.cls b/force-app/main/default/classes/ClassDiagramCreatorCtrl.cls similarity index 100% rename from mdapi-source/classes/ClassDiagramCreatorCtrl.cls rename to force-app/main/default/classes/ClassDiagramCreatorCtrl.cls diff --git a/mdapi-source/classes/ClassDiagramCreatorCtrl.cls-meta.xml b/force-app/main/default/classes/ClassDiagramCreatorCtrl.cls-meta.xml similarity index 100% rename from mdapi-source/classes/ClassDiagramCreatorCtrl.cls-meta.xml rename to force-app/main/default/classes/ClassDiagramCreatorCtrl.cls-meta.xml diff --git a/mdapi-source/classes/CodeMetrics.cls b/force-app/main/default/classes/CodeMetrics.cls similarity index 100% rename from mdapi-source/classes/CodeMetrics.cls rename to force-app/main/default/classes/CodeMetrics.cls diff --git a/mdapi-source/classes/CodeMetrics.cls-meta.xml b/force-app/main/default/classes/CodeMetrics.cls-meta.xml similarity index 100% rename from mdapi-source/classes/CodeMetrics.cls-meta.xml rename to force-app/main/default/classes/CodeMetrics.cls-meta.xml diff --git a/mdapi-source/classes/ERDCreatorCtrl.cls b/force-app/main/default/classes/ERDCreatorCtrl.cls similarity index 100% rename from mdapi-source/classes/ERDCreatorCtrl.cls rename to force-app/main/default/classes/ERDCreatorCtrl.cls diff --git a/mdapi-source/classes/ERDCreatorCtrl.cls-meta.xml b/force-app/main/default/classes/ERDCreatorCtrl.cls-meta.xml similarity index 100% rename from mdapi-source/classes/ERDCreatorCtrl.cls-meta.xml rename to force-app/main/default/classes/ERDCreatorCtrl.cls-meta.xml diff --git a/mdapi-source/classes/MultiselectController.cls b/force-app/main/default/classes/MultiselectController.cls similarity index 100% rename from mdapi-source/classes/MultiselectController.cls rename to force-app/main/default/classes/MultiselectController.cls diff --git a/mdapi-source/classes/MultiselectController.cls-meta.xml b/force-app/main/default/classes/MultiselectController.cls-meta.xml similarity index 100% rename from mdapi-source/classes/MultiselectController.cls-meta.xml rename to force-app/main/default/classes/MultiselectController.cls-meta.xml diff --git a/mdapi-source/classes/MultiselectControllerTest.cls b/force-app/main/default/classes/MultiselectControllerTest.cls similarity index 100% rename from mdapi-source/classes/MultiselectControllerTest.cls rename to force-app/main/default/classes/MultiselectControllerTest.cls diff --git a/mdapi-source/classes/MultiselectControllerTest.cls-meta.xml b/force-app/main/default/classes/MultiselectControllerTest.cls-meta.xml similarity index 100% rename from mdapi-source/classes/MultiselectControllerTest.cls-meta.xml rename to force-app/main/default/classes/MultiselectControllerTest.cls-meta.xml diff --git a/mdapi-source/classes/PlantUMLClassDiagram.cls b/force-app/main/default/classes/PlantUMLClassDiagram.cls similarity index 100% rename from mdapi-source/classes/PlantUMLClassDiagram.cls rename to force-app/main/default/classes/PlantUMLClassDiagram.cls diff --git a/mdapi-source/classes/PlantUMLClassDiagram.cls-meta.xml b/force-app/main/default/classes/PlantUMLClassDiagram.cls-meta.xml similarity index 100% rename from mdapi-source/classes/PlantUMLClassDiagram.cls-meta.xml rename to force-app/main/default/classes/PlantUMLClassDiagram.cls-meta.xml diff --git a/mdapi-source/classes/PlantUMLERDiagram.cls b/force-app/main/default/classes/PlantUMLERDiagram.cls similarity index 100% rename from mdapi-source/classes/PlantUMLERDiagram.cls rename to force-app/main/default/classes/PlantUMLERDiagram.cls diff --git a/mdapi-source/classes/PlantUMLERDiagram.cls-meta.xml b/force-app/main/default/classes/PlantUMLERDiagram.cls-meta.xml similarity index 100% rename from mdapi-source/classes/PlantUMLERDiagram.cls-meta.xml rename to force-app/main/default/classes/PlantUMLERDiagram.cls-meta.xml diff --git a/mdapi-source/classes/SelectOptionSorter.cls b/force-app/main/default/classes/SelectOptionSorter.cls similarity index 100% rename from mdapi-source/classes/SelectOptionSorter.cls rename to force-app/main/default/classes/SelectOptionSorter.cls diff --git a/mdapi-source/classes/SelectOptionSorter.cls-meta.xml b/force-app/main/default/classes/SelectOptionSorter.cls-meta.xml similarity index 100% rename from mdapi-source/classes/SelectOptionSorter.cls-meta.xml rename to force-app/main/default/classes/SelectOptionSorter.cls-meta.xml diff --git a/mdapi-source/components/MultiselectPicklist.component b/force-app/main/default/components/MultiselectPicklist.component similarity index 100% rename from mdapi-source/components/MultiselectPicklist.component rename to force-app/main/default/components/MultiselectPicklist.component diff --git a/mdapi-source/components/MultiselectPicklist.component-meta.xml b/force-app/main/default/components/MultiselectPicklist.component-meta.xml similarity index 100% rename from mdapi-source/components/MultiselectPicklist.component-meta.xml rename to force-app/main/default/components/MultiselectPicklist.component-meta.xml diff --git a/mdapi-source/contentassets/plantuml.asset b/force-app/main/default/contentassets/plantuml.asset similarity index 100% rename from mdapi-source/contentassets/plantuml.asset rename to force-app/main/default/contentassets/plantuml.asset diff --git a/mdapi-source/contentassets/plantuml.asset-meta.xml b/force-app/main/default/contentassets/plantuml.asset-meta.xml similarity index 100% rename from mdapi-source/contentassets/plantuml.asset-meta.xml rename to force-app/main/default/contentassets/plantuml.asset-meta.xml diff --git a/mdapi-source/contentassets/plantuml1.asset b/force-app/main/default/contentassets/plantuml1.asset similarity index 100% rename from mdapi-source/contentassets/plantuml1.asset rename to force-app/main/default/contentassets/plantuml1.asset diff --git a/mdapi-source/contentassets/plantuml1.asset-meta.xml b/force-app/main/default/contentassets/plantuml1.asset-meta.xml similarity index 100% rename from mdapi-source/contentassets/plantuml1.asset-meta.xml rename to force-app/main/default/contentassets/plantuml1.asset-meta.xml diff --git a/sfdx-source/main/default/flexipages/PlantUML_UtilityBar.flexipage-meta.xml b/force-app/main/default/flexipages/PlantUML_UtilityBar.flexipage-meta.xml similarity index 100% rename from sfdx-source/main/default/flexipages/PlantUML_UtilityBar.flexipage-meta.xml rename to force-app/main/default/flexipages/PlantUML_UtilityBar.flexipage-meta.xml diff --git a/sfdx-source/main/default/flexipages/Plant_UML_UtilityBar.flexipage-meta.xml b/force-app/main/default/flexipages/Plant_UML_UtilityBar.flexipage-meta.xml similarity index 100% rename from sfdx-source/main/default/flexipages/Plant_UML_UtilityBar.flexipage-meta.xml rename to force-app/main/default/flexipages/Plant_UML_UtilityBar.flexipage-meta.xml diff --git a/mdapi-source/pages/classDiagramCreator.page b/force-app/main/default/pages/classDiagramCreator.page similarity index 100% rename from mdapi-source/pages/classDiagramCreator.page rename to force-app/main/default/pages/classDiagramCreator.page diff --git a/mdapi-source/pages/classDiagramCreator.page-meta.xml b/force-app/main/default/pages/classDiagramCreator.page-meta.xml similarity index 100% rename from mdapi-source/pages/classDiagramCreator.page-meta.xml rename to force-app/main/default/pages/classDiagramCreator.page-meta.xml diff --git a/mdapi-source/pages/erdCreator.page b/force-app/main/default/pages/erdCreator.page similarity index 100% rename from mdapi-source/pages/erdCreator.page rename to force-app/main/default/pages/erdCreator.page diff --git a/mdapi-source/pages/erdCreator.page-meta.xml b/force-app/main/default/pages/erdCreator.page-meta.xml similarity index 100% rename from mdapi-source/pages/erdCreator.page-meta.xml rename to force-app/main/default/pages/erdCreator.page-meta.xml diff --git a/sfdx-source/main/default/permissionsets/PlantUml.permissionset-meta.xml b/force-app/main/default/permissionsets/PlantUml.permissionset-meta.xml similarity index 100% rename from sfdx-source/main/default/permissionsets/PlantUml.permissionset-meta.xml rename to force-app/main/default/permissionsets/PlantUml.permissionset-meta.xml diff --git a/sfdx-source/main/default/staticresources/jquery_min_js.js b/force-app/main/default/staticresources/jquery_min_js.js similarity index 100% rename from sfdx-source/main/default/staticresources/jquery_min_js.js rename to force-app/main/default/staticresources/jquery_min_js.js diff --git a/mdapi-source/staticresources/jquery_min_js.resource-meta.xml b/force-app/main/default/staticresources/jquery_min_js.resource-meta.xml similarity index 100% rename from mdapi-source/staticresources/jquery_min_js.resource-meta.xml rename to force-app/main/default/staticresources/jquery_min_js.resource-meta.xml diff --git a/sfdx-source/main/default/staticresources/rawdeflate_js.js b/force-app/main/default/staticresources/rawdeflate_js.js similarity index 100% rename from sfdx-source/main/default/staticresources/rawdeflate_js.js rename to force-app/main/default/staticresources/rawdeflate_js.js diff --git a/mdapi-source/staticresources/rawdeflate_js.resource-meta.xml b/force-app/main/default/staticresources/rawdeflate_js.resource-meta.xml similarity index 100% rename from mdapi-source/staticresources/rawdeflate_js.resource-meta.xml rename to force-app/main/default/staticresources/rawdeflate_js.resource-meta.xml diff --git a/sfdx-source/main/default/tabs/ClassDiagramCreator.tab-meta.xml b/force-app/main/default/tabs/ClassDiagramCreator.tab-meta.xml similarity index 86% rename from sfdx-source/main/default/tabs/ClassDiagramCreator.tab-meta.xml rename to force-app/main/default/tabs/ClassDiagramCreator.tab-meta.xml index 515798f..a54aebf 100644 --- a/sfdx-source/main/default/tabs/ClassDiagramCreator.tab-meta.xml +++ b/force-app/main/default/tabs/ClassDiagramCreator.tab-meta.xml @@ -1,7 +1,6 @@ - false Custom62: Chalkboard classDiagramCreator diff --git a/sfdx-source/main/default/tabs/ErdCreator.tab-meta.xml b/force-app/main/default/tabs/ErdCreator.tab-meta.xml similarity index 84% rename from sfdx-source/main/default/tabs/ErdCreator.tab-meta.xml rename to force-app/main/default/tabs/ErdCreator.tab-meta.xml index e46d8b6..4047935 100644 --- a/sfdx-source/main/default/tabs/ErdCreator.tab-meta.xml +++ b/force-app/main/default/tabs/ErdCreator.tab-meta.xml @@ -1,7 +1,6 @@ - false Custom59: Can erdCreator diff --git a/mdapi-source/applications/PlantUML.app b/mdapi-source/applications/PlantUML.app deleted file mode 100644 index 96ffb69..0000000 --- a/mdapi-source/applications/PlantUML.app +++ /dev/null @@ -1,19 +0,0 @@ - - - - #0070D2 - plantuml1 - 1 - false - - Renders UML diagrams for Apex Classes and SObjects - Large - false - false - - Standard - ClassDiagramCreator - ErdCreator - Lightning - PlantUML_UtilityBar - diff --git a/mdapi-source/flexipages/PlantUML_UtilityBar.flexipage b/mdapi-source/flexipages/PlantUML_UtilityBar.flexipage deleted file mode 100644 index 45f7bdd..0000000 --- a/mdapi-source/flexipages/PlantUML_UtilityBar.flexipage +++ /dev/null @@ -1,16 +0,0 @@ - - - - utilityItems - Region - - - backgroundComponents - Background - - PlantUML UtilityBar - - UtilityBar - diff --git a/mdapi-source/flexipages/Plant_UML_UtilityBar.flexipage b/mdapi-source/flexipages/Plant_UML_UtilityBar.flexipage deleted file mode 100644 index d65fcb7..0000000 --- a/mdapi-source/flexipages/Plant_UML_UtilityBar.flexipage +++ /dev/null @@ -1,16 +0,0 @@ - - - - utilityItems - Region - - - backgroundComponents - Background - - Plant UML UtilityBar - - UtilityBar - diff --git a/mdapi-source/package.xml b/mdapi-source/package.xml deleted file mode 100644 index d6ded33..0000000 --- a/mdapi-source/package.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - CustomApplication - PlantUML - - - ApexClass - ApexClassForTests - ApexParser - ClassDiagramCreatorCtrl - CodeMetrics - ERDCreatorCtrl - MultiselectController - MultiselectControllerTest - PlantUMLClassDiagram - PlantUMLERDiagram - SelectOptionSorter - - - ApexComponent - MultiselectPicklist - - - ContentAsset - plantuml - plantuml1 - - - FlexiPage - PlantUML_UtilityBar - Plant_UML_UtilityBar - - - ApexPage - classDiagramCreator - erdCreator - - - PermissionSet - PlantUml - - - StaticResource - jquery_min_js - rawdeflate_js - - - CustomTab - ClassDiagramCreator - ErdCreator - - 45.0 - salesforce-plantuml - \ No newline at end of file diff --git a/mdapi-source/permissionsets/PlantUml.permissionset b/mdapi-source/permissionsets/PlantUml.permissionset deleted file mode 100644 index f140ef6..0000000 --- a/mdapi-source/permissionsets/PlantUml.permissionset +++ /dev/null @@ -1,37 +0,0 @@ - - - - PlantUML - true - - - ClassDiagramCreatorCtrl - true - - - ERDCreatorCtrl - true - - - MultiselectController - true - - false - - - classDiagramCreator - true - - - erdCreator - true - - - ClassDiagramCreator - Visible - - - ErdCreator - Visible - - diff --git a/mdapi-source/staticresources/jquery_min_js.resource b/mdapi-source/staticresources/jquery_min_js.resource deleted file mode 100644 index bc3fbc8..0000000 --- a/mdapi-source/staticresources/jquery_min_js.resource +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v1.8.2 jquery.com | jquery.org/license */ -(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
t
",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&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 p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(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 bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(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 bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X
","
"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/mdapi-source/staticresources/rawdeflate_js.resource b/mdapi-source/staticresources/rawdeflate_js.resource deleted file mode 100644 index 8b6f83b..0000000 --- a/mdapi-source/staticresources/rawdeflate_js.resource +++ /dev/null @@ -1,1679 +0,0 @@ -/* - * $Id: rawdeflate.js,v 0.3 2009/03/01 19:05:05 dankogai Exp dankogai $ - * - * Original: - * http://www.onicos.com/staff/iz/amuse/javascript/expert/deflate.txt - */ - -// if run as a web worker, respond to messages by deflating them -var deflate = (function() { - -/* Copyright (C) 1999 Masanao Izumo - * Version: 1.0.1 - * LastModified: Dec 25 1999 - */ - -/* Interface: - * data = deflate(src); - */ - -/* constant parameters */ -var zip_WSIZE = 32768; // Sliding Window size -var zip_STORED_BLOCK = 0; -var zip_STATIC_TREES = 1; -var zip_DYN_TREES = 2; - -/* for deflate */ -var zip_DEFAULT_LEVEL = 6; -var zip_FULL_SEARCH = true; -var zip_INBUFSIZ = 32768; // Input buffer size -var zip_INBUF_EXTRA = 64; // Extra buffer -var zip_OUTBUFSIZ = 1024 * 8; -var zip_window_size = 2 * zip_WSIZE; -var zip_MIN_MATCH = 3; -var zip_MAX_MATCH = 258; -var zip_BITS = 16; -// for SMALL_MEM -var zip_LIT_BUFSIZE = 0x2000; -var zip_HASH_BITS = 13; -// for MEDIUM_MEM -// var zip_LIT_BUFSIZE = 0x4000; -// var zip_HASH_BITS = 14; -// for BIG_MEM -// var zip_LIT_BUFSIZE = 0x8000; -// var zip_HASH_BITS = 15; -//if(zip_LIT_BUFSIZE > zip_INBUFSIZ) -// alert("error: zip_INBUFSIZ is too small"); -//if((zip_WSIZE<<1) > (1< zip_BITS-1) -// alert("error: zip_HASH_BITS is too large"); -//if(zip_HASH_BITS < 8 || zip_MAX_MATCH != 258) -// alert("error: Code too clever"); -var zip_DIST_BUFSIZE = zip_LIT_BUFSIZE; -var zip_HASH_SIZE = 1 << zip_HASH_BITS; -var zip_HASH_MASK = zip_HASH_SIZE - 1; -var zip_WMASK = zip_WSIZE - 1; -var zip_NIL = 0; // Tail of hash chains -var zip_TOO_FAR = 4096; -var zip_MIN_LOOKAHEAD = zip_MAX_MATCH + zip_MIN_MATCH + 1; -var zip_MAX_DIST = zip_WSIZE - zip_MIN_LOOKAHEAD; -var zip_SMALLEST = 1; -var zip_MAX_BITS = 15; -var zip_MAX_BL_BITS = 7; -var zip_LENGTH_CODES = 29; -var zip_LITERALS =256; -var zip_END_BLOCK = 256; -var zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES; -var zip_D_CODES = 30; -var zip_BL_CODES = 19; -var zip_REP_3_6 = 16; -var zip_REPZ_3_10 = 17; -var zip_REPZ_11_138 = 18; -var zip_HEAP_SIZE = 2 * zip_L_CODES + 1; -var zip_H_SHIFT = parseInt((zip_HASH_BITS + zip_MIN_MATCH - 1) / - zip_MIN_MATCH); - -/* variables */ -var zip_free_queue; -var zip_qhead, zip_qtail; -var zip_initflag; -var zip_outbuf = null; -var zip_outcnt, zip_outoff; -var zip_complete; -var zip_window; -var zip_d_buf; -var zip_l_buf; -var zip_prev; -var zip_bi_buf; -var zip_bi_valid; -var zip_block_start; -var zip_ins_h; -var zip_hash_head; -var zip_prev_match; -var zip_match_available; -var zip_match_length; -var zip_prev_length; -var zip_strstart; -var zip_match_start; -var zip_eofile; -var zip_lookahead; -var zip_max_chain_length; -var zip_max_lazy_match; -var zip_compr_level; -var zip_good_match; -var zip_nice_match; -var zip_dyn_ltree; -var zip_dyn_dtree; -var zip_static_ltree; -var zip_static_dtree; -var zip_bl_tree; -var zip_l_desc; -var zip_d_desc; -var zip_bl_desc; -var zip_bl_count; -var zip_heap; -var zip_heap_len; -var zip_heap_max; -var zip_depth; -var zip_length_code; -var zip_dist_code; -var zip_base_length; -var zip_base_dist; -var zip_flag_buf; -var zip_last_lit; -var zip_last_dist; -var zip_last_flags; -var zip_flags; -var zip_flag_bit; -var zip_opt_len; -var zip_static_len; -var zip_deflate_data; -var zip_deflate_pos; - -/* objects (deflate) */ - -function zip_DeflateCT() { - this.fc = 0; // frequency count or bit string - this.dl = 0; // father node in Huffman tree or length of bit string -} - -function zip_DeflateTreeDesc() { - this.dyn_tree = null; // the dynamic tree - this.static_tree = null; // corresponding static tree or NULL - this.extra_bits = null; // extra bits for each code or NULL - this.extra_base = 0; // base index for extra_bits - this.elems = 0; // max number of elements in the tree - this.max_length = 0; // max bit length for the codes - this.max_code = 0; // largest code with non zero frequency -} - -/* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ -function zip_DeflateConfiguration(a, b, c, d) { - this.good_length = a; // reduce lazy search above this match length - this.max_lazy = b; // do not perform lazy search above this match length - this.nice_length = c; // quit search above this match length - this.max_chain = d; -} - -function zip_DeflateBuffer() { - this.next = null; - this.len = 0; - this.ptr = new Array(zip_OUTBUFSIZ); - this.off = 0; -} - -/* constant tables */ -var zip_extra_lbits = [ - 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; -var zip_extra_dbits = [ - 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; -var zip_extra_blbits = [ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; -var zip_bl_order = [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; -var zip_configuration_table = [ - new zip_DeflateConfiguration(0, 0, 0, 0), - new zip_DeflateConfiguration(4, 4, 8, 4), - new zip_DeflateConfiguration(4, 5, 16, 8), - new zip_DeflateConfiguration(4, 6, 32, 32), - new zip_DeflateConfiguration(4, 4, 16, 16), - new zip_DeflateConfiguration(8, 16, 32, 32), - new zip_DeflateConfiguration(8, 16, 128, 128), - new zip_DeflateConfiguration(8, 32, 128, 256), - new zip_DeflateConfiguration(32, 128, 258, 1024), - new zip_DeflateConfiguration(32, 258, 258, 4096)]; - - -/* routines (deflate) */ - -function zip_deflate_start(level) { - var i; - - if(!level) - level = zip_DEFAULT_LEVEL; - else if(level < 1) - level = 1; - else if(level > 9) - level = 9; - - zip_compr_level = level; - zip_initflag = false; - zip_eofile = false; - if(zip_outbuf != null) - return; - - zip_free_queue = zip_qhead = zip_qtail = null; - zip_outbuf = new Array(zip_OUTBUFSIZ); - zip_window = new Array(zip_window_size); - zip_d_buf = new Array(zip_DIST_BUFSIZE); - zip_l_buf = new Array(zip_INBUFSIZ + zip_INBUF_EXTRA); - zip_prev = new Array(1 << zip_BITS); - zip_dyn_ltree = new Array(zip_HEAP_SIZE); - for(i = 0; i < zip_HEAP_SIZE; i++) - zip_dyn_ltree[i] = new zip_DeflateCT(); - zip_dyn_dtree = new Array(2*zip_D_CODES+1); - for(i = 0; i < 2*zip_D_CODES+1; i++) - zip_dyn_dtree[i] = new zip_DeflateCT(); - zip_static_ltree = new Array(zip_L_CODES+2); - for(i = 0; i < zip_L_CODES+2; i++) - zip_static_ltree[i] = new zip_DeflateCT(); - zip_static_dtree = new Array(zip_D_CODES); - for(i = 0; i < zip_D_CODES; i++) - zip_static_dtree[i] = new zip_DeflateCT(); - zip_bl_tree = new Array(2*zip_BL_CODES+1); - for(i = 0; i < 2*zip_BL_CODES+1; i++) - zip_bl_tree[i] = new zip_DeflateCT(); - zip_l_desc = new zip_DeflateTreeDesc(); - zip_d_desc = new zip_DeflateTreeDesc(); - zip_bl_desc = new zip_DeflateTreeDesc(); - zip_bl_count = new Array(zip_MAX_BITS+1); - zip_heap = new Array(2*zip_L_CODES+1); - zip_depth = new Array(2*zip_L_CODES+1); - zip_length_code = new Array(zip_MAX_MATCH-zip_MIN_MATCH+1); - zip_dist_code = new Array(512); - zip_base_length = new Array(zip_LENGTH_CODES); - zip_base_dist = new Array(zip_D_CODES); - zip_flag_buf = new Array(parseInt(zip_LIT_BUFSIZE / 8)); -} - -function zip_deflate_end() { - zip_free_queue = zip_qhead = zip_qtail = null; - zip_outbuf = null; - zip_window = null; - zip_d_buf = null; - zip_l_buf = null; - zip_prev = null; - zip_dyn_ltree = null; - zip_dyn_dtree = null; - zip_static_ltree = null; - zip_static_dtree = null; - zip_bl_tree = null; - zip_l_desc = null; - zip_d_desc = null; - zip_bl_desc = null; - zip_bl_count = null; - zip_heap = null; - zip_depth = null; - zip_length_code = null; - zip_dist_code = null; - zip_base_length = null; - zip_base_dist = null; - zip_flag_buf = null; -} - -function zip_reuse_queue(p) { - p.next = zip_free_queue; - zip_free_queue = p; -} - -function zip_new_queue() { - var p; - - if(zip_free_queue != null) - { - p = zip_free_queue; - zip_free_queue = zip_free_queue.next; - } - else - p = new zip_DeflateBuffer(); - p.next = null; - p.len = p.off = 0; - - return p; -} - -function zip_head1(i) { - return zip_prev[zip_WSIZE + i]; -} - -function zip_head2(i, val) { - return zip_prev[zip_WSIZE + i] = val; -} - -/* put_byte is used for the compressed output, put_ubyte for the - * uncompressed output. However unlzw() uses window for its - * suffix table instead of its output buffer, so it does not use put_ubyte - * (to be cleaned up). - */ -function zip_put_byte(c) { - zip_outbuf[zip_outoff + zip_outcnt++] = c; - if(zip_outoff + zip_outcnt == zip_OUTBUFSIZ) - zip_qoutbuf(); -} - -/* Output a 16 bit value, lsb first */ -function zip_put_short(w) { - w &= 0xffff; - if(zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) { - zip_outbuf[zip_outoff + zip_outcnt++] = (w & 0xff); - zip_outbuf[zip_outoff + zip_outcnt++] = (w >>> 8); - } else { - zip_put_byte(w & 0xff); - zip_put_byte(w >>> 8); - } -} - -/* ========================================================================== - * Insert string s in the dictionary and set match_head to the previous head - * of the hash chain (the most recent string with same hash key). Return - * the previous length of the hash chain. - * IN assertion: all calls to to INSERT_STRING are made with consecutive - * input characters and the first MIN_MATCH bytes of s are valid - * (except for the last MIN_MATCH-1 bytes of the input file). - */ -function zip_INSERT_STRING() { - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) - ^ (zip_window[zip_strstart + zip_MIN_MATCH - 1] & 0xff)) - & zip_HASH_MASK; - zip_hash_head = zip_head1(zip_ins_h); - zip_prev[zip_strstart & zip_WMASK] = zip_hash_head; - zip_head2(zip_ins_h, zip_strstart); -} - -/* Send a code of the given tree. c and tree must not have side effects */ -function zip_SEND_CODE(c, tree) { - zip_send_bits(tree[c].fc, tree[c].dl); -} - -/* Mapping from a distance to a distance code. dist is the distance - 1 and - * must not have side effects. dist_code[256] and dist_code[257] are never - * used. - */ -function zip_D_CODE(dist) { - return (dist < 256 ? zip_dist_code[dist] - : zip_dist_code[256 + (dist>>7)]) & 0xff; -} - -/* ========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ -function zip_SMALLER(tree, n, m) { - return tree[n].fc < tree[m].fc || - (tree[n].fc == tree[m].fc && zip_depth[n] <= zip_depth[m]); -} - -/* ========================================================================== - * read string data - */ -function zip_read_buff(buff, offset, n) { - var i; - for(i = 0; i < n && zip_deflate_pos < zip_deflate_data.length; i++) - buff[offset + i] = - zip_deflate_data.charCodeAt(zip_deflate_pos++) & 0xff; - return i; -} - -/* ========================================================================== - * Initialize the "longest match" routines for a new file - */ -function zip_lm_init() { - var j; - - /* Initialize the hash table. */ - for(j = 0; j < zip_HASH_SIZE; j++) -// zip_head2(j, zip_NIL); - zip_prev[zip_WSIZE + j] = 0; - /* prev will be initialized on the fly */ - - /* Set the default configuration parameters: - */ - zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy; - zip_good_match = zip_configuration_table[zip_compr_level].good_length; - if(!zip_FULL_SEARCH) - zip_nice_match = zip_configuration_table[zip_compr_level].nice_length; - zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain; - - zip_strstart = 0; - zip_block_start = 0; - - zip_lookahead = zip_read_buff(zip_window, 0, 2 * zip_WSIZE); - if(zip_lookahead <= 0) { - zip_eofile = true; - zip_lookahead = 0; - return; - } - zip_eofile = false; - /* Make sure that we always have enough lookahead. This is important - * if input comes from a device such as a tty. - */ - while(zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - - /* If lookahead < MIN_MATCH, ins_h is garbage, but this is - * not important since only literal bytes will be emitted. - */ - zip_ins_h = 0; - for(j = 0; j < zip_MIN_MATCH - 1; j++) { -// UPDATE_HASH(ins_h, window[j]); - zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[j] & 0xff)) & zip_HASH_MASK; - } -} - -/* ========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - */ -function zip_longest_match(cur_match) { - var chain_length = zip_max_chain_length; // max hash chain length - var scanp = zip_strstart; // current string - var matchp; // matched string - var len; // length of current match - var best_len = zip_prev_length; // best match length so far - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - var limit = (zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL); - - var strendp = zip_strstart + zip_MAX_MATCH; - var scan_end1 = zip_window[scanp + best_len - 1]; - var scan_end = zip_window[scanp + best_len]; - - /* Do not waste too much time if we already have a good match: */ - if(zip_prev_length >= zip_good_match) - chain_length >>= 2; - -// Assert(encoder->strstart <= window_size-MIN_LOOKAHEAD, "insufficient lookahead"); - - do { -// Assert(cur_match < encoder->strstart, "no future"); - matchp = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2: - */ - if(zip_window[matchp + best_len] != scan_end || - zip_window[matchp + best_len - 1] != scan_end1 || - zip_window[matchp] != zip_window[scanp] || - zip_window[++matchp] != zip_window[scanp + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scanp += 2; - matchp++; - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - } while(zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - zip_window[++scanp] == zip_window[++matchp] && - scanp < strendp); - - len = zip_MAX_MATCH - (strendp - scanp); - scanp = strendp - zip_MAX_MATCH; - - if(len > best_len) { - zip_match_start = cur_match; - best_len = len; - if(zip_FULL_SEARCH) { - if(len >= zip_MAX_MATCH) break; - } else { - if(len >= zip_nice_match) break; - } - - scan_end1 = zip_window[scanp + best_len-1]; - scan_end = zip_window[scanp + best_len]; - } - } while((cur_match = zip_prev[cur_match & zip_WMASK]) > limit - && --chain_length != 0); - - return best_len; -} - -/* ========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead, and sets eofile if end of input file. - * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0 - * OUT assertions: at least one byte has been read, or eofile is set; - * file reads are performed for at least two bytes (required for the - * translate_eol option). - */ -function zip_fill_window() { - var n, m; - - // Amount of free space at the end of the window. - var more = zip_window_size - zip_lookahead - zip_strstart; - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if(more == -1) { - /* Very unlikely, but possible on 16 bit machine if strstart == 0 - * and lookahead == 1 (input done one byte at time) - */ - more--; - } else if(zip_strstart >= zip_WSIZE + zip_MAX_DIST) { - /* By the IN assertion, the window is not empty so we can't confuse - * more == 0 with more == 64K on a 16 bit machine. - */ -// Assert(window_size == (ulg)2*WSIZE, "no sliding with BIG_MEM"); - -// System.arraycopy(window, WSIZE, window, 0, WSIZE); - for(n = 0; n < zip_WSIZE; n++) - zip_window[n] = zip_window[n + zip_WSIZE]; - - zip_match_start -= zip_WSIZE; - zip_strstart -= zip_WSIZE; /* we now have strstart >= MAX_DIST: */ - zip_block_start -= zip_WSIZE; - - for(n = 0; n < zip_HASH_SIZE; n++) { - m = zip_head1(n); - zip_head2(n, m >= zip_WSIZE ? m - zip_WSIZE : zip_NIL); - } - for(n = 0; n < zip_WSIZE; n++) { - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - m = zip_prev[n]; - zip_prev[n] = (m >= zip_WSIZE ? m - zip_WSIZE : zip_NIL); - } - more += zip_WSIZE; - } - // At this point, more >= 2 - if(!zip_eofile) { - n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more); - if(n <= 0) - zip_eofile = true; - else - zip_lookahead += n; - } -} - -/* ========================================================================== - * Processes a new input file and return its compressed length. This - * function does not perform lazy evaluationof matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ -function zip_deflate_fast() { - while(zip_lookahead != 0 && zip_qhead == null) { - var flush; // set if current block must be flushed - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - zip_INSERT_STRING(); - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if(zip_hash_head != zip_NIL && - zip_strstart - zip_hash_head <= zip_MAX_DIST) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - zip_match_length = zip_longest_match(zip_hash_head); - /* longest_match() sets match_start */ - if(zip_match_length > zip_lookahead) - zip_match_length = zip_lookahead; - } - if(zip_match_length >= zip_MIN_MATCH) { -// check_match(strstart, match_start, match_length); - - flush = zip_ct_tally(zip_strstart - zip_match_start, - zip_match_length - zip_MIN_MATCH); - zip_lookahead -= zip_match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if(zip_match_length <= zip_max_lazy_match) { - zip_match_length--; // string at strstart already in hash table - do { - zip_strstart++; - zip_INSERT_STRING(); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since - * the next lookahead bytes will be emitted as literals. - */ - } while(--zip_match_length != 0); - zip_strstart++; - } else { - zip_strstart += zip_match_length; - zip_match_length = 0; - zip_ins_h = zip_window[zip_strstart] & 0xff; -// UPDATE_HASH(ins_h, window[strstart + 1]); - zip_ins_h = ((zip_ins_h< zip_lookahead) - zip_match_length = zip_lookahead; - - /* Ignore a length 3 match if it is too distant: */ - if(zip_match_length == zip_MIN_MATCH && - zip_strstart - zip_match_start > zip_TOO_FAR) { - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - zip_match_length--; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if(zip_prev_length >= zip_MIN_MATCH && - zip_match_length <= zip_prev_length) { - var flush; // set if current block must be flushed - -// check_match(strstart - 1, prev_match, prev_length); - flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match, - zip_prev_length - zip_MIN_MATCH); - - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. - */ - zip_lookahead -= zip_prev_length - 1; - zip_prev_length -= 2; - do { - zip_strstart++; - zip_INSERT_STRING(); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH - * these bytes are garbage, but it does not matter since the - * next lookahead bytes will always be emitted as literals. - */ - } while(--zip_prev_length != 0); - zip_match_available = 0; - zip_match_length = zip_MIN_MATCH - 1; - zip_strstart++; - if(flush) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - } else if(zip_match_available != 0) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - if(zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff)) { - zip_flush_block(0); - zip_block_start = zip_strstart; - } - zip_strstart++; - zip_lookahead--; - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - zip_match_available = 1; - zip_strstart++; - zip_lookahead--; - } - - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - while(zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) - zip_fill_window(); - } -} - -function zip_init_deflate() { - if(zip_eofile) - return; - zip_bi_buf = 0; - zip_bi_valid = 0; - zip_ct_init(); - zip_lm_init(); - - zip_qhead = null; - zip_outcnt = 0; - zip_outoff = 0; - - if(zip_compr_level <= 3) - { - zip_prev_length = zip_MIN_MATCH - 1; - zip_match_length = 0; - } - else - { - zip_match_length = zip_MIN_MATCH - 1; - zip_match_available = 0; - } - - zip_complete = false; -} - -/* ========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ -function zip_deflate_internal(buff, off, buff_size) { - var n; - - if(!zip_initflag) - { - zip_init_deflate(); - zip_initflag = true; - if(zip_lookahead == 0) { // empty - zip_complete = true; - return 0; - } - } - - if((n = zip_qcopy(buff, off, buff_size)) == buff_size) - return buff_size; - - if(zip_complete) - return n; - - if(zip_compr_level <= 3) // optimized for speed - zip_deflate_fast(); - else - zip_deflate_better(); - if(zip_lookahead == 0) { - if(zip_match_available != 0) - zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff); - zip_flush_block(1); - zip_complete = true; - } - return n + zip_qcopy(buff, n + off, buff_size - n); -} - -function zip_qcopy(buff, off, buff_size) { - var n, i, j; - - n = 0; - while(zip_qhead != null && n < buff_size) - { - i = buff_size - n; - if(i > zip_qhead.len) - i = zip_qhead.len; -// System.arraycopy(qhead.ptr, qhead.off, buff, off + n, i); - for(j = 0; j < i; j++) - buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j]; - - zip_qhead.off += i; - zip_qhead.len -= i; - n += i; - if(zip_qhead.len == 0) { - var p; - p = zip_qhead; - zip_qhead = zip_qhead.next; - zip_reuse_queue(p); - } - } - - if(n == buff_size) - return n; - - if(zip_outoff < zip_outcnt) { - i = buff_size - n; - if(i > zip_outcnt - zip_outoff) - i = zip_outcnt - zip_outoff; - // System.arraycopy(outbuf, outoff, buff, off + n, i); - for(j = 0; j < i; j++) - buff[off + n + j] = zip_outbuf[zip_outoff + j]; - zip_outoff += i; - n += i; - if(zip_outcnt == zip_outoff) - zip_outcnt = zip_outoff = 0; - } - return n; -} - -/* ========================================================================== - * Allocate the match buffer, initialize the various tables and save the - * location of the internal file attribute (ascii/binary) and method - * (DEFLATE/STORE). - */ -function zip_ct_init() { - var n; // iterates over tree elements - var bits; // bit counter - var length; // length value - var code; // code value - var dist; // distance index - - if(zip_static_dtree[0].dl != 0) return; // ct_init already called - - zip_l_desc.dyn_tree = zip_dyn_ltree; - zip_l_desc.static_tree = zip_static_ltree; - zip_l_desc.extra_bits = zip_extra_lbits; - zip_l_desc.extra_base = zip_LITERALS + 1; - zip_l_desc.elems = zip_L_CODES; - zip_l_desc.max_length = zip_MAX_BITS; - zip_l_desc.max_code = 0; - - zip_d_desc.dyn_tree = zip_dyn_dtree; - zip_d_desc.static_tree = zip_static_dtree; - zip_d_desc.extra_bits = zip_extra_dbits; - zip_d_desc.extra_base = 0; - zip_d_desc.elems = zip_D_CODES; - zip_d_desc.max_length = zip_MAX_BITS; - zip_d_desc.max_code = 0; - - zip_bl_desc.dyn_tree = zip_bl_tree; - zip_bl_desc.static_tree = null; - zip_bl_desc.extra_bits = zip_extra_blbits; - zip_bl_desc.extra_base = 0; - zip_bl_desc.elems = zip_BL_CODES; - zip_bl_desc.max_length = zip_MAX_BL_BITS; - zip_bl_desc.max_code = 0; - - // Initialize the mapping length (0..255) -> length code (0..28) - length = 0; - for(code = 0; code < zip_LENGTH_CODES-1; code++) { - zip_base_length[code] = length; - for(n = 0; n < (1< dist code (0..29) */ - dist = 0; - for(code = 0 ; code < 16; code++) { - zip_base_dist[code] = dist; - for(n = 0; n < (1<>= 7; // from now on, all distances are divided by 128 - for( ; code < zip_D_CODES; code++) { - zip_base_dist[code] = dist << 7; - for(n = 0; n < (1<<(zip_extra_dbits[code]-7)); n++) - zip_dist_code[256 + dist++] = code; - } - // Assert (dist == 256, "ct_init: 256+dist != 512"); - - // Construct the codes of the static literal tree - for(bits = 0; bits <= zip_MAX_BITS; bits++) - zip_bl_count[bits] = 0; - n = 0; - while(n <= 143) { zip_static_ltree[n++].dl = 8; zip_bl_count[8]++; } - while(n <= 255) { zip_static_ltree[n++].dl = 9; zip_bl_count[9]++; } - while(n <= 279) { zip_static_ltree[n++].dl = 7; zip_bl_count[7]++; } - while(n <= 287) { zip_static_ltree[n++].dl = 8; zip_bl_count[8]++; } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - zip_gen_codes(zip_static_ltree, zip_L_CODES + 1); - - /* The static distance tree is trivial: */ - for(n = 0; n < zip_D_CODES; n++) { - zip_static_dtree[n].dl = 5; - zip_static_dtree[n].fc = zip_bi_reverse(n, 5); - } - - // Initialize the first block of the first file: - zip_init_block(); -} - -/* ========================================================================== - * Initialize a new block. - */ -function zip_init_block() { - var n; // iterates over tree elements - - // Initialize the trees. - for(n = 0; n < zip_L_CODES; n++) zip_dyn_ltree[n].fc = 0; - for(n = 0; n < zip_D_CODES; n++) zip_dyn_dtree[n].fc = 0; - for(n = 0; n < zip_BL_CODES; n++) zip_bl_tree[n].fc = 0; - - zip_dyn_ltree[zip_END_BLOCK].fc = 1; - zip_opt_len = zip_static_len = 0; - zip_last_lit = zip_last_dist = zip_last_flags = 0; - zip_flags = 0; - zip_flag_bit = 1; -} - -/* ========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ -function zip_pqdownheap( - tree, // the tree to restore - k) { // node to move down - var v = zip_heap[k]; - var j = k << 1; // left son of k - - while(j <= zip_heap_len) { - // Set j to the smallest of the two sons: - if(j < zip_heap_len && - zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j])) - j++; - - // Exit if v is smaller than both sons - if(zip_SMALLER(tree, v, zip_heap[j])) - break; - - // Exchange v with the smallest son - zip_heap[k] = zip_heap[j]; - k = j; - - // And continue down the tree, setting j to the left son of k - j <<= 1; - } - zip_heap[k] = v; -} - -/* ========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ -function zip_gen_bitlen(desc) { // the tree descriptor - var tree = desc.dyn_tree; - var extra = desc.extra_bits; - var base = desc.extra_base; - var max_code = desc.max_code; - var max_length = desc.max_length; - var stree = desc.static_tree; - var h; // heap index - var n, m; // iterate over the tree elements - var bits; // bit length - var xbits; // extra bits - var f; // frequency - var overflow = 0; // number of elements with bit length too large - - for(bits = 0; bits <= zip_MAX_BITS; bits++) - zip_bl_count[bits] = 0; - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[zip_heap[zip_heap_max]].dl = 0; // root of the heap - - for(h = zip_heap_max + 1; h < zip_HEAP_SIZE; h++) { - n = zip_heap[h]; - bits = tree[tree[n].dl].dl + 1; - if(bits > max_length) { - bits = max_length; - overflow++; - } - tree[n].dl = bits; - // We overwrite tree[n].dl which is no longer needed - - if(n > max_code) - continue; // not a leaf node - - zip_bl_count[bits]++; - xbits = 0; - if(n >= base) - xbits = extra[n - base]; - f = tree[n].fc; - zip_opt_len += f * (bits + xbits); - if(stree != null) - zip_static_len += f * (stree[n].dl + xbits); - } - if(overflow == 0) - return; - - // This happens for example on obj2 and pic of the Calgary corpus - - // Find the first bit length which could increase: - do { - bits = max_length - 1; - while(zip_bl_count[bits] == 0) - bits--; - zip_bl_count[bits]--; // move one leaf down the tree - zip_bl_count[bits + 1] += 2; // move one overflow item as its brother - zip_bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while(overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for(bits = max_length; bits != 0; bits--) { - n = zip_bl_count[bits]; - while(n != 0) { - m = zip_heap[--h]; - if(m > max_code) - continue; - if(tree[m].dl != bits) { - zip_opt_len += (bits - tree[m].dl) * tree[m].fc; - tree[m].fc = bits; - } - n--; - } - } -} - - /* ========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -function zip_gen_codes(tree, // the tree to decorate - max_code) { // largest code with non zero frequency - var next_code = new Array(zip_MAX_BITS+1); // next code value for each bit length - var code = 0; // running code value - var bits; // bit index - var n; // code index - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for(bits = 1; bits <= zip_MAX_BITS; bits++) { - code = ((code + zip_bl_count[bits-1]) << 1); - next_code[bits] = code; - } - - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ -// Assert (code + encoder->bl_count[MAX_BITS]-1 == (1<> 1; n >= 1; n--) - zip_pqdownheap(tree, n); - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - do { - n = zip_heap[zip_SMALLEST]; - zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--]; - zip_pqdownheap(tree, zip_SMALLEST); - - m = zip_heap[zip_SMALLEST]; // m = node of next least frequency - - // keep the nodes sorted by frequency - zip_heap[--zip_heap_max] = n; - zip_heap[--zip_heap_max] = m; - - // Create a new node father of n and m - tree[node].fc = tree[n].fc + tree[m].fc; -// depth[node] = (char)(MAX(depth[n], depth[m]) + 1); - if(zip_depth[n] > zip_depth[m] + 1) - zip_depth[node] = zip_depth[n]; - else - zip_depth[node] = zip_depth[m] + 1; - tree[n].dl = tree[m].dl = node; - - // and insert the new node in the heap - zip_heap[zip_SMALLEST] = node++; - zip_pqdownheap(tree, zip_SMALLEST); - - } while(zip_heap_len >= 2); - - zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - zip_gen_bitlen(desc); - - // The field len is now set, we can generate the bit codes - zip_gen_codes(tree, max_code); -} - -/* ========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. Updates opt_len to take into account the repeat - * counts. (The contribution of the bit length codes will be added later - * during the construction of bl_tree.) - */ -function zip_scan_tree(tree,// the tree to be scanned - max_code) { // and its largest code of non zero frequency - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0].dl; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - if(nextlen == 0) { - max_count = 138; - min_count = 3; - } - tree[max_code + 1].dl = 0xffff; // guard - - for(n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[n + 1].dl; - if(++count < max_count && curlen == nextlen) - continue; - else if(count < min_count) - zip_bl_tree[curlen].fc += count; - else if(curlen != 0) { - if(curlen != prevlen) - zip_bl_tree[curlen].fc++; - zip_bl_tree[zip_REP_3_6].fc++; - } else if(count <= 10) - zip_bl_tree[zip_REPZ_3_10].fc++; - else - zip_bl_tree[zip_REPZ_11_138].fc++; - count = 0; prevlen = curlen; - if(nextlen == 0) { - max_count = 138; - min_count = 3; - } else if(curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } -} - - /* ========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ -function zip_send_tree(tree, // the tree to be scanned - max_code) { // and its largest code of non zero frequency - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0].dl; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - /* tree[max_code+1].dl = -1; */ /* guard already set */ - if(nextlen == 0) { - max_count = 138; - min_count = 3; - } - - for(n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[n+1].dl; - if(++count < max_count && curlen == nextlen) { - continue; - } else if(count < min_count) { - do { zip_SEND_CODE(curlen, zip_bl_tree); } while(--count != 0); - } else if(curlen != 0) { - if(curlen != prevlen) { - zip_SEND_CODE(curlen, zip_bl_tree); - count--; - } - // Assert(count >= 3 && count <= 6, " 3_6?"); - zip_SEND_CODE(zip_REP_3_6, zip_bl_tree); - zip_send_bits(count - 3, 2); - } else if(count <= 10) { - zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree); - zip_send_bits(count-3, 3); - } else { - zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree); - zip_send_bits(count-11, 7); - } - count = 0; - prevlen = curlen; - if(nextlen == 0) { - max_count = 138; - min_count = 3; - } else if(curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } -} - -/* ========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ -function zip_build_bl_tree() { - var max_blindex; // index of last bit length code of non zero freq - - // Determine the bit length frequencies for literal and distance trees - zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code); - zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code); - - // Build the bit length tree: - zip_build_tree(zip_bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for(max_blindex = zip_BL_CODES-1; max_blindex >= 3; max_blindex--) { - if(zip_bl_tree[zip_bl_order[max_blindex]].dl != 0) break; - } - /* Update opt_len to include the bit length tree and counts */ - zip_opt_len += 3*(max_blindex+1) + 5+5+4; -// Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", -// encoder->opt_len, encoder->static_len)); - - return max_blindex; -} - -/* ========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ -function zip_send_all_trees(lcodes, dcodes, blcodes) { // number of codes for each tree - var rank; // index in bl_order - -// Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); -// Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, -// "too many codes"); -// Tracev((stderr, "\nbl counts: ")); - zip_send_bits(lcodes-257, 5); // not +255 as stated in appnote.txt - zip_send_bits(dcodes-1, 5); - zip_send_bits(blcodes-4, 4); // not -3 as stated in appnote.txt - for(rank = 0; rank < blcodes; rank++) { -// Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3); - } - - // send the literal tree - zip_send_tree(zip_dyn_ltree,lcodes-1); - - // send the distance tree - zip_send_tree(zip_dyn_dtree,dcodes-1); -} - -/* ========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ -function zip_flush_block(eof) { // true if this is the last block for a file - var opt_lenb, static_lenb; // opt_len and static_len in bytes - var max_blindex; // index of last bit length code of non zero freq - var stored_len; // length of input block - - stored_len = zip_strstart - zip_block_start; - zip_flag_buf[zip_last_flags] = zip_flags; // Save the flags for the last 8 items - - // Construct the literal and distance trees - zip_build_tree(zip_l_desc); -// Tracev((stderr, "\nlit data: dyn %ld, stat %ld", -// encoder->opt_len, encoder->static_len)); - - zip_build_tree(zip_d_desc); -// Tracev((stderr, "\ndist data: dyn %ld, stat %ld", -// encoder->opt_len, encoder->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = zip_build_bl_tree(); - - // Determine the best encoding. Compute first the block length in bytes - opt_lenb = (zip_opt_len +3+7)>>3; - static_lenb = (zip_static_len+3+7)>>3; - -// Trace((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u dist %u ", -// opt_lenb, encoder->opt_len, -// static_lenb, encoder->static_len, stored_len, -// encoder->last_lit, encoder->last_dist)); - - if(static_lenb <= opt_lenb) - opt_lenb = static_lenb; - if(stored_len + 4 <= opt_lenb // 4: two words for the lengths - && zip_block_start >= 0) { - var i; - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - zip_send_bits((zip_STORED_BLOCK<<1)+eof, 3); /* send block type */ - zip_bi_windup(); /* align on byte boundary */ - zip_put_short(stored_len); - zip_put_short(~stored_len); - - // copy block -/* - p = &window[block_start]; - for(i = 0; i < stored_len; i++) - put_byte(p[i]); -*/ - for(i = 0; i < stored_len; i++) - zip_put_byte(zip_window[zip_block_start + i]); - - } else if(static_lenb == opt_lenb) { - zip_send_bits((zip_STATIC_TREES<<1)+eof, 3); - zip_compress_block(zip_static_ltree, zip_static_dtree); - } else { - zip_send_bits((zip_DYN_TREES<<1)+eof, 3); - zip_send_all_trees(zip_l_desc.max_code+1, - zip_d_desc.max_code+1, - max_blindex+1); - zip_compress_block(zip_dyn_ltree, zip_dyn_dtree); - } - - zip_init_block(); - - if(eof != 0) - zip_bi_windup(); -} - -/* ========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ -function zip_ct_tally( - dist, // distance of matched string - lc) { // match length-MIN_MATCH or unmatched char (if dist==0) - zip_l_buf[zip_last_lit++] = lc; - if(dist == 0) { - // lc is the unmatched char - zip_dyn_ltree[lc].fc++; - } else { - // Here, lc is the match length - MIN_MATCH - dist--; // dist = match distance - 1 -// Assert((ush)dist < (ush)MAX_DIST && -// (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && -// (ush)D_CODE(dist) < (ush)D_CODES, "ct_tally: bad match"); - - zip_dyn_ltree[zip_length_code[lc]+zip_LITERALS+1].fc++; - zip_dyn_dtree[zip_D_CODE(dist)].fc++; - - zip_d_buf[zip_last_dist++] = dist; - zip_flags |= zip_flag_bit; - } - zip_flag_bit <<= 1; - - // Output the flags if they fill a byte - if((zip_last_lit & 7) == 0) { - zip_flag_buf[zip_last_flags++] = zip_flags; - zip_flags = 0; - zip_flag_bit = 1; - } - // Try to guess if it is profitable to stop the current block here - if(zip_compr_level > 2 && (zip_last_lit & 0xfff) == 0) { - // Compute an upper bound for the compressed length - var out_length = zip_last_lit * 8; - var in_length = zip_strstart - zip_block_start; - var dcode; - - for(dcode = 0; dcode < zip_D_CODES; dcode++) { - out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode]); - } - out_length >>= 3; -// Trace((stderr,"\nlast_lit %u, last_dist %u, in %ld, out ~%ld(%ld%%) ", -// encoder->last_lit, encoder->last_dist, in_length, out_length, -// 100L - out_length*100L/in_length)); - if(zip_last_dist < parseInt(zip_last_lit/2) && - out_length < parseInt(in_length/2)) - return true; - } - return (zip_last_lit == zip_LIT_BUFSIZE-1 || - zip_last_dist == zip_DIST_BUFSIZE); - /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ -} - - /* ========================================================================== - * Send the block data compressed using the given Huffman trees - */ -function zip_compress_block( - ltree, // literal tree - dtree) { // distance tree - var dist; // distance of matched string - var lc; // match length or unmatched char (if dist == 0) - var lx = 0; // running index in l_buf - var dx = 0; // running index in d_buf - var fx = 0; // running index in flag_buf - var flag = 0; // current flags - var code; // the code to send - var extra; // number of extra bits to send - - if(zip_last_lit != 0) do { - if((lx & 7) == 0) - flag = zip_flag_buf[fx++]; - lc = zip_l_buf[lx++] & 0xff; - if((flag & 1) == 0) { - zip_SEND_CODE(lc, ltree); /* send a literal byte */ -// Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - // Here, lc is the match length - MIN_MATCH - code = zip_length_code[lc]; - zip_SEND_CODE(code+zip_LITERALS+1, ltree); // send the length code - extra = zip_extra_lbits[code]; - if(extra != 0) { - lc -= zip_base_length[code]; - zip_send_bits(lc, extra); // send the extra length bits - } - dist = zip_d_buf[dx++]; - // Here, dist is the match distance - 1 - code = zip_D_CODE(dist); -// Assert (code < D_CODES, "bad d_code"); - - zip_SEND_CODE(code, dtree); // send the distance code - extra = zip_extra_dbits[code]; - if(extra != 0) { - dist -= zip_base_dist[code]; - zip_send_bits(dist, extra); // send the extra distance bits - } - } // literal or match pair ? - flag >>= 1; - } while(lx < zip_last_lit); - - zip_SEND_CODE(zip_END_BLOCK, ltree); -} - -/* ========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ -var zip_Buf_size = 16; // bit size of bi_buf -function zip_send_bits( - value, // value to send - length) { // number of bits - /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) - * unused bits in value. - */ - if(zip_bi_valid > zip_Buf_size - length) { - zip_bi_buf |= (value << zip_bi_valid); - zip_put_short(zip_bi_buf); - zip_bi_buf = (value >> (zip_Buf_size - zip_bi_valid)); - zip_bi_valid += length - zip_Buf_size; - } else { - zip_bi_buf |= value << zip_bi_valid; - zip_bi_valid += length; - } -} - -/* ========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -function zip_bi_reverse( - code, // the value to invert - len) { // its bit length - var res = 0; - do { - res |= code & 1; - code >>= 1; - res <<= 1; - } while(--len > 0); - return res >> 1; -} - -/* ========================================================================== - * Write out any remaining bits in an incomplete byte. - */ -function zip_bi_windup() { - if(zip_bi_valid > 8) { - zip_put_short(zip_bi_buf); - } else if(zip_bi_valid > 0) { - zip_put_byte(zip_bi_buf); - } - zip_bi_buf = 0; - zip_bi_valid = 0; -} - -function zip_qoutbuf() { - if(zip_outcnt != 0) { - var q, i; - q = zip_new_queue(); - if(zip_qhead == null) - zip_qhead = zip_qtail = q; - else - zip_qtail = zip_qtail.next = q; - q.len = zip_outcnt - zip_outoff; -// System.arraycopy(zip_outbuf, zip_outoff, q.ptr, 0, q.len); - for(i = 0; i < q.len; i++) - q.ptr[i] = zip_outbuf[zip_outoff + i]; - zip_outcnt = zip_outoff = 0; - } -} - -return function deflate(str, level) { - var i, j; - - zip_deflate_data = str; - zip_deflate_pos = 0; - if(typeof level == "undefined") - level = zip_DEFAULT_LEVEL; - zip_deflate_start(level); - - var buff = new Array(1024); - var aout = []; - while((i = zip_deflate_internal(buff, 0, buff.length)) > 0) { - var cbuf = new Array(i); - for(j = 0; j < i; j++){ - cbuf[j] = String.fromCharCode(buff[j]); - } - aout[aout.length] = cbuf.join(""); - } - zip_deflate_data = null; // G.C. - return aout.join(""); -}; - -})(); - -onmessage = function worker(m) { - postMessage(deflate(m.data, 9)); -}; - -onconnect = function sharedWorker(e) { - var port = e.ports[0]; - port.onmessage = function(m) { - port.postMessage(deflate(m.data, 9)); - }; -}; diff --git a/mdapi-source/tabs/ClassDiagramCreator.tab b/mdapi-source/tabs/ClassDiagramCreator.tab deleted file mode 100644 index 515798f..0000000 --- a/mdapi-source/tabs/ClassDiagramCreator.tab +++ /dev/null @@ -1,7 +0,0 @@ - - - - false - Custom62: Chalkboard - classDiagramCreator - diff --git a/mdapi-source/tabs/ErdCreator.tab b/mdapi-source/tabs/ErdCreator.tab deleted file mode 100644 index e46d8b6..0000000 --- a/mdapi-source/tabs/ErdCreator.tab +++ /dev/null @@ -1,7 +0,0 @@ - - - - false - Custom59: Can - erdCreator - diff --git a/ruleset.xml b/ruleset.xml new file mode 100644 index 0000000..d726709 --- /dev/null +++ b/ruleset.xml @@ -0,0 +1,25 @@ + + + Default ruleset for PMD/Codacy + + + 1 + + + + + + + + + + + + + + + + + + + diff --git a/scripts/config.sh b/scripts/config.sh new file mode 100644 index 0000000..2bb5e25 --- /dev/null +++ b/scripts/config.sh @@ -0,0 +1,5 @@ +#!/bin/bash +DEV_HUB_ALIAS="DevHubPrivate" +SCRATCH_ORG_ALIAS="salesforce-plantuml_DEV" +PACKAGENAME="salesforce-plantuml" +PACKAGING_ORG_ALIAS="salesforce-plantuml_PCK" diff --git a/scripts/createScratchOrg.sh b/scripts/createScratchOrg.sh new file mode 100755 index 0000000..1b7d6a0 --- /dev/null +++ b/scripts/createScratchOrg.sh @@ -0,0 +1,50 @@ +#!/bin/bash +source `dirname $0`/config.sh + +holdScreen=true +while getopts 'p' flag; do + case "${flag}" in + p) holdScreen=false ;; + esac +done + +execute() { + $@ > temp.json + cat temp.json + $(jq '.status == 0' temp.json) || $holdScreen || exit 1 +} + +executenpm() { + $@ + $(jq '.success' temp.json) || $holdScreen || exit 1 +} + + +echo "deleting old scratch org" +sfdx force:org:delete -p -u $SCRATCH_ORG_ALIAS + +echo "Creating scratch ORG" +sfdx force:org:create -a $SCRATCH_ORG_ALIAS -s -f ./config/project-scratch-def.json -d 1 + +echo "Pushing changes to scratch org" +execute "sfdx force:source:push --json" + +echo "Assigning permission" +execute "sfdx force:user:permset:assign --json -n Admin" + +echo "Running apex tests" +execute "sfdx force:apex:test:run -l RunLocalTests -w 30 --json" + + +echo "Running jest tests" +npm install +executenpm "npm run test:unit" + +rm temp.json + +if $holdScreen +then + echo "Org is set up" + read +fi + diff --git a/scripts/deployMetadata.sh b/scripts/deployMetadata.sh new file mode 100644 index 0000000..f87c95e --- /dev/null +++ b/scripts/deployMetadata.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +clear +sfdx force:source:convert -d metadata --packagename=$PACKAGENAME + +sfdx force:mdapi:deploy -u $PACKAGING_ORG_ALIAS -w 1 -d metadata + +sfdx force:org:open -u $PACKAGING_ORG_ALIAS + +echo "Packaging Org is ready" \ No newline at end of file diff --git a/scripts/local-config.sh b/scripts/local-config.sh deleted file mode 100755 index 00a763b..0000000 --- a/scripts/local-config.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -PACKAGE_NAME="salesforce-plantuml" -DEV_HUB_ALIAS="DevHub" -SCRATCH_ORG_ALIAS="plantuml_DEV" -TARGET_ORG="plantuml_DEV" \ No newline at end of file diff --git a/scripts/orgInit.sh b/scripts/orgInit.sh deleted file mode 100755 index 95f11db..0000000 --- a/scripts/orgInit.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -clear -source `dirname $0`/local-config.sh - -sfdx force:org:delete -p -u $SCRATCH_ORG_ALIAS -v $DEV_HUB_ALIAS -sfdx force:org:create -a $SCRATCH_ORG_ALIAS -s -f config/project-scratch-def.json -d 29 -sfdx force:source:push -sfdx force:user:permset:assign -n PlantUml -sfdx force:data:record:update -s User -w "Name='User User'" -v "Languagelocalekey=en_US" -u $SCRATCH_ORG_ALIAS -sfdx force:org:open -sfdx force:apex:test:run -u $SCRATCH_ORG_ALIAS -l RunLocalTests -r human - -echo "Org is set up" diff --git a/scripts/packagingDeployment.sh b/scripts/packagingDeployment.sh deleted file mode 100755 index 7d7fe24..0000000 --- a/scripts/packagingDeployment.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -clear -source `dirname $0`/local-config.sh - -PACKAGE_VERSION="$(sfdx force:package:version:create -p $PACKAGE_NAME -d sfdx-source -x -w 10 --json)" -RESULT="$(echo $PACKAGE_VERSION | jq '.status')" -echo "Result is $RESULT" - -if [ -z $RESULT ]; then - exit 1 -fi - -if [ $RESULT -gt 0 ]; then - echo $PACKAGE_VERSION - exit 1 -else - sleep 300 -fi - -PACKAGE_VERSION="$(echo $PACKAGE_VERSION | jq '.result.SubscriberPackageVersionId' | tr -d '"')" - -sfdx force:package:install --package $PACKAGE_VERSION -w 10 -u $TARGET_ORG -r -echo "Done" diff --git a/sfdx-project.json b/sfdx-project.json index 6614098..364ccf7 100755 --- a/sfdx-project.json +++ b/sfdx-project.json @@ -1,16 +1,16 @@ { "packageDirectories": [ { - "path": "sfdx-source", + "path": "force-app", "default": true, "package": "salesforce-plantuml", - "versionName": "Summer '19", + "versionName": "Winter '21", "versionNumber": "2.0.0.NEXT" } ], "namespace": "", "sfdcLoginUrl": "https://login.salesforce.com", - "sourceApiVersion": "44.0", + "sourceApiVersion": "49.0", "packageAliases": { "salesforce-plantuml": "0Ho4A0000004C9NSAU", "salesforce-plantuml@2.0.0.1": "04t4A000000YXHFQA4" diff --git a/sfdx-source/main/default/classes/ApexClassForTests.cls b/sfdx-source/main/default/classes/ApexClassForTests.cls deleted file mode 100644 index addb263..0000000 --- a/sfdx-source/main/default/classes/ApexClassForTests.cls +++ /dev/null @@ -1,95 +0,0 @@ -/* -BLOCK COMMENT TO BE IGNORED -public class IGNORE { -*/ -public abstract with sharing class ApexClassForTests extends ABaseClass implements AnInterface, AnotherInterface { - private static Integer privateStaticVariable; - public String publicVariable; - - - private static void privateStaticVoid() { - - } - - /** - * BLOCK COMMENT TO BE IGNORED - * public class IGNORE { - */ - private static String privateStaticString() { - return 'String'; // INLINE COMMENT TO BE IGNORED - } - - // INLINE COMMENT TO BE IGNORED - private abstract void abstractMethod(); - - public static List publicStaticReturnsList() - { - return new List{'foo', 'bar'}; - } - - - public void complexityOf7(String stringParam, Integer integerParam) { - if(true) { // 2 - do { - - }while(false); //3 - } - - for (Integer i=0; i>1; i++) { // 4 - if(true) { // 5 - - } - else if(true) { /// 6 - - } - else { - - } - } - - Integer a = 1; - - while(true) { // 7 - - } - } - - private void ccCalculationIgnoresCommentsAndLiterals(String stringParam, Integer integerParam) { - - - /* - while(false) { - - } - */ - - // if(sadfys) { - - - String test = ' if(true) { do this'; // for(wsdasd) { - String literal = 'if(a==b) { ignore(); }'; - } - - - public virtual class ABaseClass { - public String pubicString { get; set; } - - public Integer foo(Object bar) { - return 42; - } - - public void bar(Object foo) { - - } - } - - public interface AnInterface { - - } - - public interface AnotherInterface { } - - public enum AnEnum { - thing,thong - } -} \ No newline at end of file diff --git a/sfdx-source/main/default/classes/ApexClassForTests.cls-meta.xml b/sfdx-source/main/default/classes/ApexClassForTests.cls-meta.xml deleted file mode 100644 index 6dc8b22..0000000 --- a/sfdx-source/main/default/classes/ApexClassForTests.cls-meta.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 27.0 - Active - diff --git a/sfdx-source/main/default/classes/ApexParser.cls b/sfdx-source/main/default/classes/ApexParser.cls deleted file mode 100644 index b91e81e..0000000 --- a/sfdx-source/main/default/classes/ApexParser.cls +++ /dev/null @@ -1,240 +0,0 @@ -public class ApexParser { - private static final Pattern CLASSHEADER = Pattern.compile('(?i)(@isTest\\s+private|public|global)\\s*(with\\s+sharing|without\\s+sharing)*\\s*(static|virtual|abstract)*\\s*(with\\s+sharing|without\\s+sharing)*\\s*(class|interface|enum)\\s+(\\w+)(\\s+(extends|implements)\\s+(\\w+(\\s*,\\s*\\w+)*))*\\s*\\n*\\{'); - private static final Pattern CLASSMEMBER = Pattern.compile('(?i)(static testmethod|@isTest\\s+private|public|global|private)\\s*\\b(static|abstract|virtual)?\\b\\s*(((?!class|interface)\\w+)(<\\b[^>]*>)*)\\s*(\\w+)(\\((.*?)\\))*\\s*\\n*\\{'); - private static final String COMMENT_LITERAL = '/\\*([^*]|[\\r\\n]|\\*+(?:[^*/]|[\\r\\n]))*\\*+/|//.*|\'.*\''; - private static final String EMPTY_LINE = '\n\\s*\n'; - private static final Pattern BRACES = Pattern.compile('\\{|\\}'); - - private String cleanedSource; - private ParsedClass parsed; - - public ParsedClass parse(ApexClass originalClass) { - this.cleanedSource = getCleaned(originalClass.Body); - this.parsed = new ParsedClass(); - - parseHeader(); - parseAndRemoveInnerClasses(); - parseMembers(); - - return parsed; - } - - - private ParsedClass parse(String cleanedSource) { - this.cleanedSource = cleanedSource; - this.parsed = new ParsedClass(); - - parseHeader(); - parseMembers(); - - return parsed; - } - - - // PRIVATE METHODS - - - private String getCleaned(String original) { - String cleaned = original.replaceAll(COMMENT_LITERAL, ''); - cleaned = cleaned.replaceAll(EMPTY_LINE, '\n'); - return cleaned; - } - - - private void parseHeader() { - Matcher classMatch = CLASSHEADER.matcher(this.cleanedSource); - - // Parse top class header - if(classMatch.find()) { - this.parsed.name = extractName(classMatch); - this.parsed.visibility = extractClassVisibility(classMatch); - this.parsed.scope = extractClassScope(classMatch); - this.parsed.type = extractClassType(classMatch); - this.parsed.sharing = extractSharing(classMatch); - this.parsed.doesImplement = extractDoesImplement(classMatch); - this.parsed.interfaces = extractImplementedInterfaces(classMatch); - this.parsed.doesExtend = extractDoesExtend(classMatch); - this.parsed.superName = extractSuperClass(classMatch); - this.parsed.body = getBlockStartingWith(classMatch, this.cleanedSource); - } - else { - throw new ParsingException(); - } - } - - - private String extractName(Matcher classMatch) { - return classMatch.group(6); - } - - - private String extractClassVisibility(Matcher classMatch) { - String g = classMatch.group(1); - return (g != null) ? g : ''; - } - - private String extractClassScope(Matcher classMatch) { - String g = classMatch.group(3); - return (g != null) ? g : ''; - } - - private String extractSharing(Matcher classMatch) { - String first = classMatch.group(2); - first = (first != null) ? first : ''; - String second = classMatch.group(4); - second = (second != null) ? second : ''; - return (first + second); - } - - private String extractClassType(Matcher classMatch) { - String g = classMatch.group(5); - return (g != null) ? g : ''; - } - - private Boolean extractDoesImplement(Matcher classMatch) { - String g = classMatch.group(8); - return (g != null) ? g == 'implements' : false; - } - - private List extractImplementedInterfaces(Matcher classMatch) { - List results = new List(); - String g = classMatch.group(9); - - if(g != null) { - for(String part : g.split('\\,')) { - results.add(part.trim()); - } - } - - return results; - } - - private Boolean extractDoesExtend(Matcher classMatch) { - String g = classMatch.group(8); - return (g != null) ? g == 'extends' : false; - } - - private String extractSuperClass(Matcher classMatch) { - String g = classMatch.group(9); - return (g != null) ? g : ''; - } - - - private void parseMembers() { - Matcher memberMatch = CLASSMEMBER.matcher(this.cleanedSource); - - while(memberMatch.find()) { - ClassMember member = new ClassMember(); - - member.visibility = extractMemberVisibility(memberMatch); - member.scope = extractMemberScope(memberMatch); - member.returnType = extractReturnType(memberMatch); - member.name = extractMemberName(memberMatch); - member.parameters = extractParameters(memberMatch); - member.body = getBlockStartingWith(memberMatch, this.cleanedSource); - - parsed.members.add(member); - } - } - - - private void parseAndRemoveInnerClasses() { - Matcher innerClassHeader = CLASSHEADER.matcher(this.parsed.body); - - // For each matches class - while(innerClassHeader.find()) { - String innerClassBody = getBlockStartingWith(innerClassHeader, this.parsed.body); - String wholeInnerClass = innerClassHeader.group() + innerClassBody.substring(1); - - ParsedClass innerClass = new ApexParser().parse(wholeInnerClass); - parsed.innerClasses.add(innerClass); - - // Remove innerclass source from outer class' body to not interfere with member matching - this.cleanedSource = this.cleanedSource.remove(wholeInnerClass); - } - } - - - public String extractMemberVisibility(Matcher memberMatch) { - String g = memberMatch.group(2); - return (g != null) ? g : ''; - } - - public String extractMemberScope(Matcher memberMatch) { - String g = memberMatch.group(3); - return (g != null) ? g : ''; - } - - - private String extractReturnType(Matcher memberMatch) { - return memberMatch.group(4); - } - - - private String extractMemberName(Matcher memberMatch) { - return memberMatch.group(6); - } - - - private static String extractParameters(Matcher memberMatch) { - String g = memberMatch.group(7); - return (g != null) ? g : ''; - } - - - /** - * Returns block for a given header match and a context string - * - * Note: Regexp is only able to match header but not whole block. Counting braces is used to find block end - */ - private String getBlockStartingWith(Matcher blockStartMatch, String context) { - Integer blockStart = blockStartMatch.end()-1; - Integer blockEnd = blockStart; - Integer braceCounter = 0; - - Matcher braceMatch = BRACES.matcher(context.substring(blockStart)); - do { - braceMatch.find(); - braceCounter = (braceMatch.group() == '{') ? braceCounter + 1 : braceCounter -1; - blockEnd = braceMatch.end(); - } while(braceCounter > 0); - - return context.substring(blockStart, blockStart+blockEnd); - } - - - public class ParsedClass { - public String visibility { get; private set; } - public String scope { get; private set; } - public String type { get; private set; } - public String sharing { get; private set; } - public String name { get; private set; } - public Boolean doesImplement { get; private set; } - public List interfaces { get; private set; } - public Boolean doesExtend { get; private set; } - public String superName { get; private set; } - public String body { get; private set; } - public List members { get; private set; } - public List innerClasses { get; private set; } - - ParsedClass() { - this.members = new List(); - this.innerClasses = new List(); - this.doesImplement = false; - this.doesExtend = false; - } - } - - public class ClassMember { - public String visibility { get; private set; } - public String scope { get; private set; } - public String returnType { get; private set; } - public String name { get; private set; } - public String parameters { get; private set; } - public String body { get; private set; } - - ClassMember() {} - } - - public class ParsingException extends Exception {} -} \ No newline at end of file diff --git a/sfdx-source/main/default/classes/ApexParser.cls-meta.xml b/sfdx-source/main/default/classes/ApexParser.cls-meta.xml deleted file mode 100644 index 6dc8b22..0000000 --- a/sfdx-source/main/default/classes/ApexParser.cls-meta.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 27.0 - Active - diff --git a/sfdx-source/main/default/classes/ClassDiagramCreatorCtrl.cls b/sfdx-source/main/default/classes/ClassDiagramCreatorCtrl.cls deleted file mode 100644 index 7290ad9..0000000 --- a/sfdx-source/main/default/classes/ClassDiagramCreatorCtrl.cls +++ /dev/null @@ -1,118 +0,0 @@ -public with sharing class ClassDiagramCreatorCtrl { - - public PlantUMLClassDiagram classDiagram { get; private set; } - - public SelectOption[] accessibleClasses { get; set; } - public SelectOption[] selectedClasses { get; set; } - public String[] selectedClassesArray { get; set; } - - - public ClassDiagramCreatorCtrl() { - this.classDiagram = new PlantUMLClassDiagram(); - - // Init sobject Multiselect list - this.accessibleClasses = new List(); - this.selectedClasses = new List(); - - for(ApexClass c : [SELECT Name, Body FROM ApexClass WHERE Status = 'Active' ORDER BY NamespacePrefix, Name]) { - if(c.Body != '(hidden)') { - this.accessibleClasses.add(new SelectOption(c.Name, c.Name)); - } - } - } - - - public PageReference doCreateDiagram() { - - if(this.selectedClasses.isEmpty()) { - ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.Info, 'Please select at least one class.'); - ApexPages.addMessage(msg); - } - else { - try { - Set parsedClasses = new Set(); - Set classList = new Set(); - - // Create set of selected class names - for(SelectOption o : this.selectedClasses) { - classList.add(o.getValue()); - } - - - // Query and parse selected classes - ApexParser parser = new ApexParser(); - - for(ApexClass originalClass : [SELECT Name, ApiVersion, Status, IsValid, Body, LastModifiedBy.UserName - FROM ApexClass - WHERE Name IN :classList - ORDER BY NamespacePrefix, Name]) { - - ApexParser.ParsedClass parsedClass = parser.parse(originalClass); - parsedClasses.add(parsedClass); - } - - // Init diagram with selected classes - this.classDiagram.setClasses(parsedClasses); - } - catch(Exception e) { - ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.FATAL, 'Soemthing went wrong: ' + e.getMessage()); - ApexPages.addMessage(msg); - } - } - return null; - } - - - // TEST METHODS - - - static testmethod void testUIIsPopulatedOnConstructor() { - // Setup - Boolean noExceptionWasThrown = true; - - // Execute - Test.setCurrentPageReference(Page.classDiagramCreator); - try { - ClassDiagramCreatorCtrl ctrl = new ClassDiagramCreatorCtrl(); - } - catch(Exception ignored) { - noExceptionWasThrown = false; - } - - // Verify not much more than that no Exception was thrown - System.assert(noExceptionWasThrown); - } - - static testmethod void errorShownOnCreateWithNoSelectedClass() { - // Setup - Test.setCurrentPageReference(Page.classDiagramCreator); - ClassDiagramCreatorCtrl pageCtrl = new ClassDiagramCreatorCtrl(); - - // Execute - pageCtrl.doCreateDiagram(); - - // Verify - System.assert(ApexPages.hasMessages()); - } - - static testmethod void noErrorOnCreateWithSelectedClass() { - // Setup - Test.setCurrentPageReference(Page.classDiagramCreator); - ClassDiagramCreatorCtrl pageCtrl = new ClassDiagramCreatorCtrl(); - - // Execute - Boolean hasClasses = pageCtrl.accessibleClasses.size() > 0; - if(hasClasses) { - SelectOption anObject = pageCtrl.accessibleClasses.get(0); - pageCtrl.selectedClasses.add(anObject); - pageCtrl.classDiagram.showPublicMethods = true; - pageCtrl.classDiagram.showPublicVariables = true; - pageCtrl.classDiagram.showMetrics = true; - } - pageCtrl.doCreateDiagram(); - - // Verify - System.assert(!hasClasses || !ApexPages.hasMessages()); - System.assert(!hasClasses || pageCtrl.classDiagram.plantUMLText != ''); - } -} \ No newline at end of file diff --git a/sfdx-source/main/default/classes/ClassDiagramCreatorCtrl.cls-meta.xml b/sfdx-source/main/default/classes/ClassDiagramCreatorCtrl.cls-meta.xml deleted file mode 100644 index 307ce73..0000000 --- a/sfdx-source/main/default/classes/ClassDiagramCreatorCtrl.cls-meta.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 25.0 - Active - diff --git a/sfdx-source/main/default/classes/CodeMetrics.cls b/sfdx-source/main/default/classes/CodeMetrics.cls deleted file mode 100644 index 195500f..0000000 --- a/sfdx-source/main/default/classes/CodeMetrics.cls +++ /dev/null @@ -1,64 +0,0 @@ -public class CodeMetrics { - private static final Pattern CODE_DECISION_PATTERN = Pattern.compile('(?i)(if|for|while|catch)\\s*\\(.*?\\)'); - private static final Pattern LINES_PATTERN = Pattern.compile('\n'); - - private static Integer countLines(String text) { - Integer loc = 1; - - Matcher lineMatch = LINES_PATTERN.matcher(text); - while(lineMatch.find()) { - loc++; - } - return loc; - } - - public static Integer LOC(ApexParser.ParsedClass clazz) { - return countLines(clazz.body); - } - - public static Integer LOC(ApexParser.ClassMember method) { - return countLines(method.body); - } - - public static Integer CC(ApexParser.ClassMember method) { - Integer methodCC = 1; - - Matcher ccRelevantMatch = CODE_DECISION_PATTERN.matcher(method.body); - while(ccRelevantMatch.find()) { - methodCC++; - } - - return methodCC; - } - - - // TEST METHODS - - - static testMethod void calculateMethodCCCorrectly() { - // Setup - ApexClass original = [SELECT Name, Body FROM ApexClass WHERE Name = 'ApexClassForTests']; - - // Execute && Verify - ApexParser parser = new ApexParser(); - for(ApexParser.ClassMember method : parser.parse(original).members) { - if(method.Name == 'complexityOf7') { - System.assertEquals(7, CodeMetrics.CC(method)); - } - } - } - - - static testMethod void calculateMethodCCIgnoresCommentsAndLiterals() { - // Setup - ApexClass original = [SELECT Name, Body FROM ApexClass WHERE Name = 'ApexClassForTests']; - - // Execute && Verify - ApexParser parser = new ApexParser(); - for(ApexParser.ClassMember method : parser.parse(original).members) { - if(method.Name == 'ccCalculationIgnoresCommentsAndLiterals') { - System.assertEquals(1, CodeMetrics.CC(method)); - } - } - } -} \ No newline at end of file diff --git a/sfdx-source/main/default/classes/CodeMetrics.cls-meta.xml b/sfdx-source/main/default/classes/CodeMetrics.cls-meta.xml deleted file mode 100644 index 6dc8b22..0000000 --- a/sfdx-source/main/default/classes/CodeMetrics.cls-meta.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 27.0 - Active - diff --git a/sfdx-source/main/default/classes/ERDCreatorCtrl.cls b/sfdx-source/main/default/classes/ERDCreatorCtrl.cls deleted file mode 100644 index f653164..0000000 --- a/sfdx-source/main/default/classes/ERDCreatorCtrl.cls +++ /dev/null @@ -1,136 +0,0 @@ -public with sharing class ERDCreatorCtrl { - - public PlantUMLERDiagram erDiagram { get; set; } - public SelectOption[] accessibleSObjects { get; set; } - public SelectOption[] selectedSObjects { get; set; } - - - public ERDCreatorCtrl() { - selectedSObjects = new List(); - accessibleSObjects = getAccessibleSObjects(); - - erDiagram = new PlantUMLERDiagram(); - erDiagram.profile = 'System Administrator'; - } - - - public List getProfiles() { - List profiles = new List(); - - for(Profile pr : [SELECT Name FROM Profile]) { - profiles.add(new SelectOption(pr.Name, pr.Name)); - } - - SelectOptionSorter.sort(profiles, SelectOptionSorter.FieldToSort.Label); - profiles.add(new SelectOption('NONE', ' - ')); - - return profiles; - } - - - public List getPermSets() { - List permSets = new List(); - - String profileName = (this.erDiagram.profile == 'NONE') ? null : this.erDiagram.profile; - for(PermissionSet ps : [SELECT Name, Label FROM PermissionSet WHERE Profile.Name = :profileName AND (NOT Name LIKE 'X00%')]) { - permSets.add(new SelectOption(ps.Name, ps.Name)); - } - - SelectOptionSorter.sort(permSets, SelectOptionSorter.FieldToSort.Label); - - return permSets; - } - - - public PageReference doCreateDiagram() { - - if(selectedSObjects.isEmpty()) { - ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.Info, 'Please select at least one sobject.'); - ApexPages.addMessage(msg); - } - else { - Set sobjectNames = new Set(); - for(SelectOption so : selectedSObjects) { - sobjectNames.add(so.getValue()); - } - - this.erDiagram.setObjects(sobjectNames); - } - return null; - } - - - // PRIVATE METHODS - - private List getAccessibleSObjects(){ - List accessibleSObjects = new List(); - - for(Schema.SObjectType type : Schema.getGlobalDescribe().values()) { - Schema.DescribeSObjectResult objectDescribe = type.getDescribe(); - - if(isAllowedObject(objectDescribe)) { - String name = objectDescribe.getName(); - accessibleSObjects.add(new SelectOption(name, name)); - } - } - SelectOptionSorter.sort(accessibleSObjects, SelectOptionSorter.FieldToSort.Label); - - return accessibleSObjects; - } - - - private Boolean isAllowedObject(Schema.DescribeSObjectResult objectDescribe) { - String name = objectDescribe.getName(); - return objectDescribe.isAccessible() - && !name.endsWith('History') - && !name.endsWith('Feed') - && !name.endsWith('Tag') - && !name.endsWith('Share') ; - } - - - // TEST METHODS - - static testmethod void testUIIsPopulatedOnConstructor() { - // Setup - Test.setCurrentPageReference(Page.erdCreator); - - // Execute - ERDCreatorCtrl ctrl = new ERDCreatorCtrl(); - - // Verify - System.assertNotEquals(0, ctrl.accessibleSObjects.size()); - System.assertNotEquals(null, ctrl.getPermSets()); - System.assertNotEquals(0, ctrl.getProfiles().size()); - System.assertEquals(null, ctrl.erDiagram.permSet); - System.assertEquals('System Administrator', ctrl.erDiagram.profile); - System.assertEquals(0, ctrl.selectedSObjects.size()); - } - - - static testmethod void errorShownOnCreateWithNoSelectedObject() { - // Setup - Test.setCurrentPageReference(Page.erdCreator); - ERDCreatorCtrl pageCtrl = new ERDCreatorCtrl(); - - // Execute - pageCtrl.doCreateDiagram(); - - // Verify - System.assert(ApexPages.hasMessages()); - } - - - static testmethod void noErrorOnCreateWithSelectedObject() { - // Setup - Test.setCurrentPageReference(Page.erdCreator); - ERDCreatorCtrl pageCtrl = new ERDCreatorCtrl(); - - // Execute - pageCtrl.selectedSObjects.add(pageCtrl.accessibleSObjects.get(0)); - pageCtrl.doCreateDiagram(); - - // Verify - System.assert(!ApexPages.hasMessages()); - } -} \ No newline at end of file diff --git a/sfdx-source/main/default/classes/ERDCreatorCtrl.cls-meta.xml b/sfdx-source/main/default/classes/ERDCreatorCtrl.cls-meta.xml deleted file mode 100644 index 307ce73..0000000 --- a/sfdx-source/main/default/classes/ERDCreatorCtrl.cls-meta.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 25.0 - Active - diff --git a/sfdx-source/main/default/classes/MultiselectController.cls b/sfdx-source/main/default/classes/MultiselectController.cls deleted file mode 100644 index c513897..0000000 --- a/sfdx-source/main/default/classes/MultiselectController.cls +++ /dev/null @@ -1,36 +0,0 @@ -/* - * MultiselectController synchronizes the values of the hidden elements to the - * SelectOption lists. - */ -public with sharing class MultiselectController { - // SelectOption lists for public consumption - public SelectOption[] leftOptions { get; set; } - public SelectOption[] rightOptions { get; set; } - - // Parse &-separated values and labels from value and - // put them in option - private void setOptions(SelectOption[] options, String value) { - options.clear(); - String[] parts = value.split('&'); - for (Integer i=0; i
- - - - - - - -
- - - - - - - Add - - - - - - - - - - - Remove - - - - - -
- - - - - \ No newline at end of file diff --git a/sfdx-source/main/default/components/MultiselectPicklist.component-meta.xml b/sfdx-source/main/default/components/MultiselectPicklist.component-meta.xml deleted file mode 100644 index 7825821..0000000 --- a/sfdx-source/main/default/components/MultiselectPicklist.component-meta.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 25.0 - - diff --git a/sfdx-source/main/default/contentassets/plantuml.asset b/sfdx-source/main/default/contentassets/plantuml.asset deleted file mode 100644 index 56ce991318f143c80c7f4afd1177c262540b502b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33343 zcmZ^KcR1B=`2YKu+1Yz!%ic<;kd?hxL>VEHm3fj#R#dVgiLxUr>l_qiMOI`SQ8q^z z2M53BeSE&ZKfc%Xb-7&UJkN9A_v?P$<9Xggyor$x4J8L91VJ={xsM2>_YlJ}>G z!HDGg+fNWg44GWD&^|ss1|$FLN5}8#{~Gzfz8)SP{$Eo#94<04@_)_7#>SqE3=9nX zuc`n4_0OL_78Vw>v$J62@87?zt*s|hK|w*_Lv3yC`ue)JxA&7LPxA8ePNtTZmoqXl z+S}VtzJk9yJ3HWSPft%{V`FD$=j7z%j~_qo-McqDJe-h_u)n|W>+AdG&6}GyZ|3CW zOixc|o<2w7_J##If82P^&CLzS{*jP`5X2-zM8ps|6QoED@ez@bkwDZG5IY5e*v`(5 zf`Wn;5>Zl8q9iAxha`#QOiWI3Lu6De#AMIulod!BN$k_;iAWh48P_WmNp8IQ`AU`? zVmxS2(I)5MC*xxR^rR-WO{=jHt> zEYcz<_=1bOgzpTIiro!H#vC3VMo3=r6oo%C%N=v}B3?chN})8bGfTpUe?hQq0?dre z_q85TY%J_Tc+!&BL{lslZK7_$nFlrBIp}HlpN#DvH7ohwmpl9?fxl+V^Q*h>qUyoX zf$u)v;PcT6e*fs`(ChjBAwIm)b>9{b{~Y0u_Kyyaj_}e!Lpl%?nXadG$s%N8b*e|7 zyN?4oJ7a$ITXqwf_0HLXKkMlO1G>k*?oVp+PM7lnYnT(V!u$;^_9V-&;>l^C`{X&u{NWP5DtZ9kKjTzj{1Heg%nu&Sh*Ks?~1?AHGoSdrH

WKB-C1tZQKE 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 - - false - en_US - plantuml - - - VIEWER - - - - - 1 - plantuml.png - - - diff --git a/sfdx-source/main/default/contentassets/plantuml1.asset b/sfdx-source/main/default/contentassets/plantuml1.asset deleted file mode 100644 index 56ce991318f143c80c7f4afd1177c262540b502b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33343 zcmZ^KcR1B=`2YKu+1Yz!%ic<;kd?hxL>VEHm3fj#R#dVgiLxUr>l_qiMOI`SQ8q^z z2M53BeSE&ZKfc%Xb-7&UJkN9A_v?P$<9Xggyor$x4J8L91VJ={xsM2>_YlJ}>G z!HDGg+fNWg44GWD&^|ss1|$FLN5}8#{~Gzfz8)SP{$Eo#94<04@_)_7#>SqE3=9nX zuc`n4_0OL_78Vw>v$J62@87?zt*s|hK|w*_Lv3yC`ue)JxA&7LPxA8ePNtTZmoqXl z+S}VtzJk9yJ3HWSPft%{V`FD$=j7z%j~_qo-McqDJe-h_u)n|W>+AdG&6}GyZ|3CW zOixc|o<2w7_J##If82P^&CLzS{*jP`5X2-zM8ps|6QoED@ez@bkwDZG5IY5e*v`(5 zf`Wn;5>Zl8q9iAxha`#QOiWI3Lu6De#AMIulod!BN$k_;iAWh48P_WmNp8IQ`AU`? zVmxS2(I)5MC*xxR^rR-WO{=jHt> zEYcz<_=1bOgzpTIiro!H#vC3VMo3=r6oo%C%N=v}B3?chN})8bGfTpUe?hQq0?dre z_q85TY%J_Tc+!&BL{lslZK7_$nFlrBIp}HlpN#DvH7ohwmpl9?fxl+V^Q*h>qUyoX zf$u)v;PcT6e*fs`(ChjBAwIm)b>9{b{~Y0u_Kyyaj_}e!Lpl%?nXadG$s%N8b*e|7 zyN?4oJ7a$ITXqwf_0HLXKkMlO1G>k*?oVp+PM7lnYnT(V!u$;^_9V-&;>l^C`{X&u{NWP5DtZ9kKjTzj{1Heg%nu&Sh*Ks?~1?AHGoSdrH

WKB-C1tZQKE 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 - - false - en_US - plantuml1 - - - VIEWER - - - - - 1 - plantuml.png - - - diff --git a/sfdx-source/main/default/pages/classDiagramCreator.page b/sfdx-source/main/default/pages/classDiagramCreator.page deleted file mode 100644 index ca67bbc..0000000 --- a/sfdx-source/main/default/pages/classDiagramCreator.page +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - -

Display options:

-

- - - - - - - - - - - - - - - - - - - You can either Right-Click save this image as file or just reuse the image URL. It contains all thats needed to display it dynamically. -
- -
- - - - - - - \ No newline at end of file diff --git a/sfdx-source/main/default/pages/classDiagramCreator.page-meta.xml b/sfdx-source/main/default/pages/classDiagramCreator.page-meta.xml deleted file mode 100644 index 3c99b87..0000000 --- a/sfdx-source/main/default/pages/classDiagramCreator.page-meta.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - 25.0 - false - false - - diff --git a/sfdx-source/main/default/pages/erdCreator.page b/sfdx-source/main/default/pages/erdCreator.page deleted file mode 100644 index ff3e5f5..0000000 --- a/sfdx-source/main/default/pages/erdCreator.page +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - -

Display options:

-

-
-
- - - - - - - - - - - - - - - - - - -
- - -
- - - You can either Right-Click save this image as file or just reuse the image URL. It contains all thats needed to display it dynamically. -
- -
-
-
- - - - -
\ No newline at end of file diff --git a/sfdx-source/main/default/pages/erdCreator.page-meta.xml b/sfdx-source/main/default/pages/erdCreator.page-meta.xml deleted file mode 100644 index 9dee491..0000000 --- a/sfdx-source/main/default/pages/erdCreator.page-meta.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - 25.0 - false - false - - diff --git a/sfdx-source/main/default/staticresources/jquery_min_js.resource-meta.xml b/sfdx-source/main/default/staticresources/jquery_min_js.resource-meta.xml deleted file mode 100644 index 4b411f2..0000000 --- a/sfdx-source/main/default/staticresources/jquery_min_js.resource-meta.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Private - application/x-javascript - diff --git a/sfdx-source/main/default/staticresources/rawdeflate_js.resource-meta.xml b/sfdx-source/main/default/staticresources/rawdeflate_js.resource-meta.xml deleted file mode 100644 index 6adb110..0000000 --- a/sfdx-source/main/default/staticresources/rawdeflate_js.resource-meta.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Private - text/javascript -