diff options
439 files changed, 1374 insertions, 752 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json index 85e1cd120..0b45c3f46 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,6 @@ "editor.detectIndentation": false, "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, - "workbench.colorCustomizations": {}, - "search.usePCRE2": true + "search.usePCRE2": true, + "typescript.tsdk": "node_modules/typescript/lib" }
\ No newline at end of file diff --git a/package.json b/package.json index 252104435..e658f8630 100644 --- a/package.json +++ b/package.json @@ -222,6 +222,7 @@ "typescript-collections": "^1.3.2", "url-loader": "^1.1.2", "uuid": "^3.3.2", + "wikijs": "^6.0.1", "words-to-numbers": "^1.5.1", "xoauth2": "^1.2.0", "youtube": "^0.1.0" diff --git a/solr-8.1.1/bin/.install_solr_service 2.sh.icloud b/solr-8.1.1/bin/.install_solr_service 2.sh.icloud Binary files differnew file mode 100644 index 000000000..408e2667e --- /dev/null +++ b/solr-8.1.1/bin/.install_solr_service 2.sh.icloud diff --git a/solr-8.1.1/bin/.oom_solr 2.sh.icloud b/solr-8.1.1/bin/.oom_solr 2.sh.icloud Binary files differnew file mode 100644 index 000000000..d0a5abe9e --- /dev/null +++ b/solr-8.1.1/bin/.oom_solr 2.sh.icloud diff --git a/solr-8.1.1/bin/.solr.in 2.cmd.icloud b/solr-8.1.1/bin/.solr.in 2.cmd.icloud Binary files differnew file mode 100644 index 000000000..bfe3ba860 --- /dev/null +++ b/solr-8.1.1/bin/.solr.in 2.cmd.icloud diff --git a/solr-8.1.1/example/.README 2.txt.icloud b/solr-8.1.1/example/.README 2.txt.icloud Binary files differnew file mode 100644 index 000000000..39ca6d308 --- /dev/null +++ b/solr-8.1.1/example/.README 2.txt.icloud diff --git a/solr-8.1.1/licenses/.activation-1.1.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.activation-1.1.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..f9b56a04c --- /dev/null +++ b/solr-8.1.1/licenses/.activation-1.1.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.android-json-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.android-json-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..bd09ff822 --- /dev/null +++ b/solr-8.1.1/licenses/.android-json-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.ant-1.8.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.ant-1.8.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..6a11ce9da --- /dev/null +++ b/solr-8.1.1/licenses/.ant-1.8.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.ant-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.ant-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..cdb3009b8 --- /dev/null +++ b/solr-8.1.1/licenses/.ant-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.antlr4-runtime-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.antlr4-runtime-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2f552ad67 --- /dev/null +++ b/solr-8.1.1/licenses/.antlr4-runtime-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.antlr4-runtime-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.antlr4-runtime-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..9cc8bcf45 --- /dev/null +++ b/solr-8.1.1/licenses/.antlr4-runtime-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.apache-mime4j-core-0.8.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.apache-mime4j-core-0.8.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..6c6f1c8df --- /dev/null +++ b/solr-8.1.1/licenses/.apache-mime4j-core-0.8.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.apache-mime4j-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.apache-mime4j-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..45dd4a5e4 --- /dev/null +++ b/solr-8.1.1/licenses/.apache-mime4j-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.apache-mime4j-dom-0.8.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.apache-mime4j-dom-0.8.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..ef0abbc1a --- /dev/null +++ b/solr-8.1.1/licenses/.apache-mime4j-dom-0.8.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.apache-mime4j-dom-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.apache-mime4j-dom-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..066d1ecb7 --- /dev/null +++ b/solr-8.1.1/licenses/.apache-mime4j-dom-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.argparse4j-0.8.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.argparse4j-0.8.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..c2817c5e4 --- /dev/null +++ b/solr-8.1.1/licenses/.argparse4j-0.8.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.argparse4j-LICENSE-MIT 2.txt.icloud b/solr-8.1.1/licenses/.argparse4j-LICENSE-MIT 2.txt.icloud Binary files differnew file mode 100644 index 000000000..42d1c84eb --- /dev/null +++ b/solr-8.1.1/licenses/.argparse4j-LICENSE-MIT 2.txt.icloud diff --git a/solr-8.1.1/licenses/.asciidoctor-ant-1.6.0-alpha.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.asciidoctor-ant-1.6.0-alpha.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..b6d2ec453 --- /dev/null +++ b/solr-8.1.1/licenses/.asciidoctor-ant-1.6.0-alpha.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.asciidoctor-ant-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.asciidoctor-ant-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..29b21480c --- /dev/null +++ b/solr-8.1.1/licenses/.asciidoctor-ant-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.asm-5.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.asm-5.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..944c17ef0 --- /dev/null +++ b/solr-8.1.1/licenses/.asm-5.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.asm-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.asm-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..7eea3553c --- /dev/null +++ b/solr-8.1.1/licenses/.asm-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.asm-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.asm-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..22a363d50 --- /dev/null +++ b/solr-8.1.1/licenses/.asm-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.asm-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.asm-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..01a17e261 --- /dev/null +++ b/solr-8.1.1/licenses/.asm-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.asm-commons-5.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.asm-commons-5.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..9257d1ee2 --- /dev/null +++ b/solr-8.1.1/licenses/.asm-commons-5.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.asm-commons-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.asm-commons-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c20c2bab8 --- /dev/null +++ b/solr-8.1.1/licenses/.asm-commons-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.asm-commons-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.asm-commons-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..1679638f5 --- /dev/null +++ b/solr-8.1.1/licenses/.asm-commons-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.aspectjrt-1.8.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.aspectjrt-1.8.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..5fe89fcc1 --- /dev/null +++ b/solr-8.1.1/licenses/.aspectjrt-1.8.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.attributes-binder-1.3.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.attributes-binder-1.3.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..33e0f06a0 --- /dev/null +++ b/solr-8.1.1/licenses/.attributes-binder-1.3.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.attributes-binder-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.attributes-binder-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..ca49f2eca --- /dev/null +++ b/solr-8.1.1/licenses/.attributes-binder-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.avatica-core-1.13.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.avatica-core-1.13.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..6693eb933 --- /dev/null +++ b/solr-8.1.1/licenses/.avatica-core-1.13.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.avatica-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.avatica-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a183cf44b --- /dev/null +++ b/solr-8.1.1/licenses/.avatica-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.bcmail-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.bcmail-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..adabd118d --- /dev/null +++ b/solr-8.1.1/licenses/.bcmail-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.bcmail-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.bcmail-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..3273d96f5 --- /dev/null +++ b/solr-8.1.1/licenses/.bcmail-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.bcmail-jdk15on-1.60.jar 2.sha1.icloud b/solr-8.1.1/licenses/.bcmail-jdk15on-1.60.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..f5226df0f --- /dev/null +++ b/solr-8.1.1/licenses/.bcmail-jdk15on-1.60.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.bcpkix-jdk15on-1.60.jar 2.sha1.icloud b/solr-8.1.1/licenses/.bcpkix-jdk15on-1.60.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..b2a4f1cbf --- /dev/null +++ b/solr-8.1.1/licenses/.bcpkix-jdk15on-1.60.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.bcpkix-jdk15on-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.bcpkix-jdk15on-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..39f686627 --- /dev/null +++ b/solr-8.1.1/licenses/.bcpkix-jdk15on-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.bcpkix-jdk15on-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.bcpkix-jdk15on-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..8adfc769b --- /dev/null +++ b/solr-8.1.1/licenses/.bcpkix-jdk15on-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.bcprov-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.bcprov-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b3e5e9b7b --- /dev/null +++ b/solr-8.1.1/licenses/.bcprov-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.bcprov-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.bcprov-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..1fda62c1f --- /dev/null +++ b/solr-8.1.1/licenses/.bcprov-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.bcprov-jdk15on-1.60.jar 2.sha1.icloud b/solr-8.1.1/licenses/.bcprov-jdk15on-1.60.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..5019f5e45 --- /dev/null +++ b/solr-8.1.1/licenses/.bcprov-jdk15on-1.60.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.boilerpipe-1.1.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.boilerpipe-1.1.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..de030fe8e --- /dev/null +++ b/solr-8.1.1/licenses/.boilerpipe-1.1.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.boilerpipe-LICENSE-ASL 2.txt.icloud b/solr-8.1.1/licenses/.boilerpipe-LICENSE-ASL 2.txt.icloud Binary files differnew file mode 100644 index 000000000..0830160e5 --- /dev/null +++ b/solr-8.1.1/licenses/.boilerpipe-LICENSE-ASL 2.txt.icloud diff --git a/solr-8.1.1/licenses/.boilerpipe-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.boilerpipe-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..109417e68 --- /dev/null +++ b/solr-8.1.1/licenses/.boilerpipe-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.byte-buddy-1.9.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.byte-buddy-1.9.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..bb654ce8a --- /dev/null +++ b/solr-8.1.1/licenses/.byte-buddy-1.9.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.byte-buddy-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.byte-buddy-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..4afcb2deb --- /dev/null +++ b/solr-8.1.1/licenses/.byte-buddy-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.caffeine-2.4.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.caffeine-2.4.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..937fa1cce --- /dev/null +++ b/solr-8.1.1/licenses/.caffeine-2.4.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.caffeine-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.caffeine-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..56ccd36f5 --- /dev/null +++ b/solr-8.1.1/licenses/.caffeine-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.calcite-core-1.18.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.calcite-core-1.18.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..fecd84cbb --- /dev/null +++ b/solr-8.1.1/licenses/.calcite-core-1.18.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.calcite-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.calcite-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2d21acd29 --- /dev/null +++ b/solr-8.1.1/licenses/.calcite-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.calcite-linq4j-1.18.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.calcite-linq4j-1.18.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..3cd266934 --- /dev/null +++ b/solr-8.1.1/licenses/.calcite-linq4j-1.18.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.calcite-linq4j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.calcite-linq4j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..ee2c9c059 --- /dev/null +++ b/solr-8.1.1/licenses/.calcite-linq4j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.carrot2-guava-18.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.carrot2-guava-18.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..b810452d2 --- /dev/null +++ b/solr-8.1.1/licenses/.carrot2-guava-18.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.carrot2-guava-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.carrot2-guava-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..fdf367d98 --- /dev/null +++ b/solr-8.1.1/licenses/.carrot2-guava-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.carrot2-mini-3.16.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.carrot2-mini-3.16.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..fd1451edc --- /dev/null +++ b/solr-8.1.1/licenses/.carrot2-mini-3.16.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.carrot2-mini-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.carrot2-mini-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..dc569b2c1 --- /dev/null +++ b/solr-8.1.1/licenses/.carrot2-mini-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.carrot2-mini-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.carrot2-mini-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..6725c5fee --- /dev/null +++ b/solr-8.1.1/licenses/.carrot2-mini-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-beanutils-1.9.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-beanutils-1.9.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..6f5ab390f --- /dev/null +++ b/solr-8.1.1/licenses/.commons-beanutils-1.9.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-beanutils-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-beanutils-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..5cbd4a031 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-beanutils-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-cli-1.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-cli-1.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..305b2f059 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-cli-1.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-cli-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-cli-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..ac4d77e40 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-cli-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-codec-1.11.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-codec-1.11.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..8648eed1e --- /dev/null +++ b/solr-8.1.1/licenses/.commons-codec-1.11.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-codec-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-codec-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..9495b8648 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-codec-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-collections-3.2.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-collections-3.2.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..e07c237a6 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-collections-3.2.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-collections-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-collections-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..dd42eb6d6 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-collections-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-collections4-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-collections4-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2426b375b --- /dev/null +++ b/solr-8.1.1/licenses/.commons-collections4-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-compiler-3.0.9.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-compiler-3.0.9.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..6fb3c2dd2 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-compiler-3.0.9.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-compiler-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.commons-compiler-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d17e1453f --- /dev/null +++ b/solr-8.1.1/licenses/.commons-compiler-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-compiler-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-compiler-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c74713e26 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-compiler-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-compress-1.18.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-compress-1.18.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..bb13a259c --- /dev/null +++ b/solr-8.1.1/licenses/.commons-compress-1.18.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-compress-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-compress-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..77e0cfd35 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-compress-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-configuration-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-configuration-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..552d802c8 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-configuration-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-configuration2-2.1.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-configuration2-2.1.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..3633dec4d --- /dev/null +++ b/solr-8.1.1/licenses/.commons-configuration2-2.1.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-configuration2-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-configuration2-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..3e5827a6f --- /dev/null +++ b/solr-8.1.1/licenses/.commons-configuration2-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-digester-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-digester-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..dc164fc56 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-digester-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-exec-1.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-exec-1.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..1653d9914 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-exec-1.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-exec-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-exec-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..028890563 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-exec-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-fileupload-1.3.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-fileupload-1.3.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..5f53607eb --- /dev/null +++ b/solr-8.1.1/licenses/.commons-fileupload-1.3.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-fileupload-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-fileupload-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b958b0eb0 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-fileupload-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-io-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-io-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..444a85023 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-io-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-lang3-3.8.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-lang3-3.8.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..29d997a09 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-lang3-3.8.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-lang3-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-lang3-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b8e2f0e4e --- /dev/null +++ b/solr-8.1.1/licenses/.commons-lang3-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-logging-1.1.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-logging-1.1.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..e2bc133a5 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-logging-1.1.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-logging-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-logging-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c9765566b --- /dev/null +++ b/solr-8.1.1/licenses/.commons-logging-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-math3-3.6.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-math3-3.6.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..0f4981fcd --- /dev/null +++ b/solr-8.1.1/licenses/.commons-math3-3.6.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-math3-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-math3-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b87e5dfbd --- /dev/null +++ b/solr-8.1.1/licenses/.commons-math3-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.commons-text-1.6.jar 2.sha1.icloud b/solr-8.1.1/licenses/.commons-text-1.6.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..4d4b1b359 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-text-1.6.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.commons-text-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.commons-text-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..f9f761792 --- /dev/null +++ b/solr-8.1.1/licenses/.commons-text-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.curator-client-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.curator-client-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..84317191f --- /dev/null +++ b/solr-8.1.1/licenses/.curator-client-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.curator-framework-2.13.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.curator-framework-2.13.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..c177d3304 --- /dev/null +++ b/solr-8.1.1/licenses/.curator-framework-2.13.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.curator-framework-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.curator-framework-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..eabf1420b --- /dev/null +++ b/solr-8.1.1/licenses/.curator-framework-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.curator-recipes-2.13.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.curator-recipes-2.13.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..baef9c864 --- /dev/null +++ b/solr-8.1.1/licenses/.curator-recipes-2.13.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.curator-recipes-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.curator-recipes-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..ad00616bb --- /dev/null +++ b/solr-8.1.1/licenses/.curator-recipes-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.curvesapi-1.04.jar 2.sha1.icloud b/solr-8.1.1/licenses/.curvesapi-1.04.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..aeaf229de --- /dev/null +++ b/solr-8.1.1/licenses/.curvesapi-1.04.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.curvesapi-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.curvesapi-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..09a21bdb1 --- /dev/null +++ b/solr-8.1.1/licenses/.curvesapi-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.curvesapi-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.curvesapi-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a0b59fcd5 --- /dev/null +++ b/solr-8.1.1/licenses/.curvesapi-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.dec-0.1.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.dec-0.1.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..311b2d70f --- /dev/null +++ b/solr-8.1.1/licenses/.dec-0.1.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.dec-LICENSE-MIT 2.txt.icloud b/solr-8.1.1/licenses/.dec-LICENSE-MIT 2.txt.icloud Binary files differnew file mode 100644 index 000000000..840d0bb4f --- /dev/null +++ b/solr-8.1.1/licenses/.dec-LICENSE-MIT 2.txt.icloud diff --git a/solr-8.1.1/licenses/.dec-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.dec-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..5382334c7 --- /dev/null +++ b/solr-8.1.1/licenses/.dec-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.disruptor-3.4.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.disruptor-3.4.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..154409dd2 --- /dev/null +++ b/solr-8.1.1/licenses/.disruptor-3.4.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.disruptor-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.disruptor-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..bc11ca82a --- /dev/null +++ b/solr-8.1.1/licenses/.disruptor-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.eigenbase-properties-1.1.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.eigenbase-properties-1.1.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..14cb7ca67 --- /dev/null +++ b/solr-8.1.1/licenses/.eigenbase-properties-1.1.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.eigenbase-properties-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.eigenbase-properties-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..0d0784045 --- /dev/null +++ b/solr-8.1.1/licenses/.eigenbase-properties-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.fontbox-2.0.12.jar 2.sha1.icloud b/solr-8.1.1/licenses/.fontbox-2.0.12.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..7d646fee8 --- /dev/null +++ b/solr-8.1.1/licenses/.fontbox-2.0.12.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.fontbox-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.fontbox-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..1191af688 --- /dev/null +++ b/solr-8.1.1/licenses/.fontbox-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.guava-25.1-jre.jar 2.sha1.icloud b/solr-8.1.1/licenses/.guava-25.1-jre.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..374a24b10 --- /dev/null +++ b/solr-8.1.1/licenses/.guava-25.1-jre.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.guava-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.guava-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..5bc5964be --- /dev/null +++ b/solr-8.1.1/licenses/.guava-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hadoop-annotations-3.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hadoop-annotations-3.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..6aed2e3db --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-annotations-3.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hadoop-annotations-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hadoop-annotations-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..5f434010c --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-annotations-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hadoop-auth-3.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hadoop-auth-3.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..f69614845 --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-auth-3.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hadoop-auth-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hadoop-auth-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c73b7415d --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-auth-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hadoop-common-3.2.0-tests.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hadoop-common-3.2.0-tests.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..a90cf89d2 --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-common-3.2.0-tests.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hadoop-common-3.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hadoop-common-3.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..f0a2d714e --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-common-3.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hadoop-common-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hadoop-common-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d8988a1cd --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-common-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hadoop-common-tests-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hadoop-common-tests-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..81fda91d5 --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-common-tests-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hadoop-hdfs-3.2.0-tests.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hadoop-hdfs-3.2.0-tests.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..50ef9ff5b --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-hdfs-3.2.0-tests.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hadoop-hdfs-3.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hadoop-hdfs-3.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..3b017f439 --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-hdfs-3.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hadoop-hdfs-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hadoop-hdfs-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..f9eb9a063 --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-hdfs-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hadoop-hdfs-client-3.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hadoop-hdfs-client-3.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..f53f68e68 --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-hdfs-client-3.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hadoop-minicluster-3.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hadoop-minicluster-3.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..ae334a7aa --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-minicluster-3.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hadoop-minicluster-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hadoop-minicluster-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..ef0de45e2 --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-minicluster-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hadoop-minikdc-3.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hadoop-minikdc-3.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..b416faeb1 --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-minikdc-3.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hadoop-minikdc-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hadoop-minikdc-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d84a143a6 --- /dev/null +++ b/solr-8.1.1/licenses/.hadoop-minikdc-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hamcrest-core-1.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hamcrest-core-1.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..4b41f2f68 --- /dev/null +++ b/solr-8.1.1/licenses/.hamcrest-core-1.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hamcrest-core-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.hamcrest-core-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b6c1206b9 --- /dev/null +++ b/solr-8.1.1/licenses/.hamcrest-core-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hamcrest-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hamcrest-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..59b2d3bb2 --- /dev/null +++ b/solr-8.1.1/licenses/.hamcrest-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hppc-0.8.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hppc-0.8.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..debca270a --- /dev/null +++ b/solr-8.1.1/licenses/.hppc-0.8.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hppc-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hppc-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..146657a9f --- /dev/null +++ b/solr-8.1.1/licenses/.hppc-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hsqldb-2.4.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.hsqldb-2.4.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..32497b347 --- /dev/null +++ b/solr-8.1.1/licenses/.hsqldb-2.4.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.hsqldb-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.hsqldb-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..659b49284 --- /dev/null +++ b/solr-8.1.1/licenses/.hsqldb-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.hsqldb-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.hsqldb-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..97b871607 --- /dev/null +++ b/solr-8.1.1/licenses/.hsqldb-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.htrace-core4-4.1.0-incubating.jar 2.sha1.icloud b/solr-8.1.1/licenses/.htrace-core4-4.1.0-incubating.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..9c00fc446 --- /dev/null +++ b/solr-8.1.1/licenses/.htrace-core4-4.1.0-incubating.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.htrace-core4-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.htrace-core4-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..16e61b595 --- /dev/null +++ b/solr-8.1.1/licenses/.htrace-core4-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.http2-common-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.http2-common-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..849830caa --- /dev/null +++ b/solr-8.1.1/licenses/.http2-common-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.http2-hpack-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.http2-hpack-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..2efaa8e1b --- /dev/null +++ b/solr-8.1.1/licenses/.http2-hpack-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.httpclient-4.5.6.jar 2.sha1.icloud b/solr-8.1.1/licenses/.httpclient-4.5.6.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..47fc582bb --- /dev/null +++ b/solr-8.1.1/licenses/.httpclient-4.5.6.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.httpclient-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.httpclient-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..1f6ee34a2 --- /dev/null +++ b/solr-8.1.1/licenses/.httpclient-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.httpcore-4.4.10.jar 2.sha1.icloud b/solr-8.1.1/licenses/.httpcore-4.4.10.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..931322525 --- /dev/null +++ b/solr-8.1.1/licenses/.httpcore-4.4.10.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.httpmime-4.5.6.jar 2.sha1.icloud b/solr-8.1.1/licenses/.httpmime-4.5.6.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..3acce9321 --- /dev/null +++ b/solr-8.1.1/licenses/.httpmime-4.5.6.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.httpmime-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.httpmime-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..f9289cc5a --- /dev/null +++ b/solr-8.1.1/licenses/.httpmime-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.icu4j-62.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.icu4j-62.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..563e0edda --- /dev/null +++ b/solr-8.1.1/licenses/.icu4j-62.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.icu4j-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.icu4j-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..4694be805 --- /dev/null +++ b/solr-8.1.1/licenses/.icu4j-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.icu4j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.icu4j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c3e2039dc --- /dev/null +++ b/solr-8.1.1/licenses/.icu4j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.isoparser-1.1.22.jar 2.sha1.icloud b/solr-8.1.1/licenses/.isoparser-1.1.22.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..35d463188 --- /dev/null +++ b/solr-8.1.1/licenses/.isoparser-1.1.22.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.isoparser-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.isoparser-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2b5c8166f --- /dev/null +++ b/solr-8.1.1/licenses/.isoparser-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackcess-2.1.12.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jackcess-2.1.12.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..ad4721fc6 --- /dev/null +++ b/solr-8.1.1/licenses/.jackcess-2.1.12.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jackcess-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jackcess-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..6dd0e835f --- /dev/null +++ b/solr-8.1.1/licenses/.jackcess-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackcess-encrypt-2.1.4.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jackcess-encrypt-2.1.4.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..321fc2426 --- /dev/null +++ b/solr-8.1.1/licenses/.jackcess-encrypt-2.1.4.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jackson-annotations-2.9.8.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jackson-annotations-2.9.8.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..0b14b6fac --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-annotations-2.9.8.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jackson-annotations-LICENSE-ASL 2.txt.icloud b/solr-8.1.1/licenses/.jackson-annotations-LICENSE-ASL 2.txt.icloud Binary files differnew file mode 100644 index 000000000..098e59b47 --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-annotations-LICENSE-ASL 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-annotations-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jackson-annotations-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..5986e948d --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-annotations-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-core-2.9.8.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jackson-core-2.9.8.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..efdb63db2 --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-core-2.9.8.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jackson-core-LICENSE-ASL 2.txt.icloud b/solr-8.1.1/licenses/.jackson-core-LICENSE-ASL 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c52615fc2 --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-core-LICENSE-ASL 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jackson-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..da923b2c9 --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-core-asl-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jackson-core-asl-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..841bea00e --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-core-asl-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-databind-2.9.8.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jackson-databind-2.9.8.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..c9a47338c --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-databind-2.9.8.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jackson-databind-LICENSE-ASL 2.txt.icloud b/solr-8.1.1/licenses/.jackson-databind-LICENSE-ASL 2.txt.icloud Binary files differnew file mode 100644 index 000000000..70a95215f --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-databind-LICENSE-ASL 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-databind-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jackson-databind-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..e3efe0afc --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-databind-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-dataformat-smile-2.9.8.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jackson-dataformat-smile-2.9.8.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..aed1e33cd --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-dataformat-smile-2.9.8.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jackson-dataformat-smile-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jackson-dataformat-smile-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c52b3dbf6 --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-dataformat-smile-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-jq-LICENSE-ASL 2.txt.icloud b/solr-8.1.1/licenses/.jackson-jq-LICENSE-ASL 2.txt.icloud Binary files differnew file mode 100644 index 000000000..eab8cc223 --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-jq-LICENSE-ASL 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-jq-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jackson-jq-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..4ba0d308e --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-jq-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jackson-mapper-asl-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jackson-mapper-asl-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..305b8f77a --- /dev/null +++ b/solr-8.1.1/licenses/.jackson-mapper-asl-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.janino-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.janino-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..ac523cf10 --- /dev/null +++ b/solr-8.1.1/licenses/.janino-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.janino-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.janino-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2dea89c0f --- /dev/null +++ b/solr-8.1.1/licenses/.janino-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.java-libpst-0.8.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.java-libpst-0.8.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..fd00e0c89 --- /dev/null +++ b/solr-8.1.1/licenses/.java-libpst-0.8.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.java-libpst-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.java-libpst-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..ef44b4a0e --- /dev/null +++ b/solr-8.1.1/licenses/.java-libpst-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.javax.mail-1.5.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.javax.mail-1.5.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..bbd98b21e --- /dev/null +++ b/solr-8.1.1/licenses/.javax.mail-1.5.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.javax.servlet-api-3.1.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.javax.servlet-api-3.1.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..a1763282a --- /dev/null +++ b/solr-8.1.1/licenses/.javax.servlet-api-3.1.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.javax.servlet-api-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.javax.servlet-api-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..0d32ce2b3 --- /dev/null +++ b/solr-8.1.1/licenses/.javax.servlet-api-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jcl-over-slf4j-1.7.24.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jcl-over-slf4j-1.7.24.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..79009db22 --- /dev/null +++ b/solr-8.1.1/licenses/.jcl-over-slf4j-1.7.24.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jcl-over-slf4j-LICENSE-MIT 2.txt.icloud b/solr-8.1.1/licenses/.jcl-over-slf4j-LICENSE-MIT 2.txt.icloud Binary files differnew file mode 100644 index 000000000..91be0d576 --- /dev/null +++ b/solr-8.1.1/licenses/.jcl-over-slf4j-LICENSE-MIT 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jcl-over-slf4j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jcl-over-slf4j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..168217ec2 --- /dev/null +++ b/solr-8.1.1/licenses/.jcl-over-slf4j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jdom2-2.0.6.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jdom2-2.0.6.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..ca9141513 --- /dev/null +++ b/solr-8.1.1/licenses/.jdom2-2.0.6.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jdom2-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.jdom2-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..08c88c9fa --- /dev/null +++ b/solr-8.1.1/licenses/.jdom2-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jdom2-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jdom2-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..cf2575762 --- /dev/null +++ b/solr-8.1.1/licenses/.jdom2-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jempbox-1.8.16.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jempbox-1.8.16.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..7e7e79acd --- /dev/null +++ b/solr-8.1.1/licenses/.jempbox-1.8.16.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jempbox-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jempbox-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2da8d0796 --- /dev/null +++ b/solr-8.1.1/licenses/.jempbox-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jersey-core-1.19.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jersey-core-1.19.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..435fa5241 --- /dev/null +++ b/solr-8.1.1/licenses/.jersey-core-1.19.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jersey-server-1.19.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jersey-server-1.19.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..d1791afa9 --- /dev/null +++ b/solr-8.1.1/licenses/.jersey-server-1.19.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jersey-servlet-1.19.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jersey-servlet-1.19.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..7f35bf509 --- /dev/null +++ b/solr-8.1.1/licenses/.jersey-servlet-1.19.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-alpn-client-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-alpn-client-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..cdae1d8c0 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-alpn-client-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-alpn-java-client-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-alpn-java-client-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..9401f9d9e --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-alpn-java-client-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-alpn-server-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-alpn-server-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..96612ac74 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-alpn-server-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-client-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-client-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..f98d79faa --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-client-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-continuation-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-continuation-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..da06b0045 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-continuation-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-deploy-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-deploy-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..89c0aa6f4 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-deploy-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-http-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-http-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..8190f656e --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-http-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-io-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-io-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..cfe918090 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-io-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-jmx-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-jmx-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..5e29ff608 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-jmx-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-rewrite-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-rewrite-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..1bac5688a --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-rewrite-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-security-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-security-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..cfb5a20eb --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-security-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-server-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-server-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..07efc3325 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-server-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-servlet-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-servlet-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..e617af60c --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-servlet-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-servlets-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-servlets-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..9298dde88 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-servlets-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-util-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-util-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..9aa92d911 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-util-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-webapp-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-webapp-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..2cab021a2 --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-webapp-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jetty-xml-9.4.14.v20181114.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jetty-xml-9.4.14.v20181114.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..322bd906d --- /dev/null +++ b/solr-8.1.1/licenses/.jetty-xml-9.4.14.v20181114.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jmatio-1.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jmatio-1.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..b56203b10 --- /dev/null +++ b/solr-8.1.1/licenses/.jmatio-1.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jmatio-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.jmatio-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a2056d9c3 --- /dev/null +++ b/solr-8.1.1/licenses/.jmatio-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jmatio-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jmatio-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..fea4ad13f --- /dev/null +++ b/solr-8.1.1/licenses/.jmatio-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jose4j-0.6.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jose4j-0.6.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..35baeee3b --- /dev/null +++ b/solr-8.1.1/licenses/.jose4j-0.6.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jose4j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jose4j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..dff01ffc6 --- /dev/null +++ b/solr-8.1.1/licenses/.jose4j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.json-path-2.4.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.json-path-2.4.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..165c388b7 --- /dev/null +++ b/solr-8.1.1/licenses/.json-path-2.4.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.json-path-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.json-path-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..3c87b885d --- /dev/null +++ b/solr-8.1.1/licenses/.json-path-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jsonic-1.2.7.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jsonic-1.2.7.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..3e66522a8 --- /dev/null +++ b/solr-8.1.1/licenses/.jsonic-1.2.7.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jsonic-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jsonic-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b506f38a6 --- /dev/null +++ b/solr-8.1.1/licenses/.jsonic-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jsoup-1.11.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jsoup-1.11.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..52a32185b --- /dev/null +++ b/solr-8.1.1/licenses/.jsoup-1.11.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jul-to-slf4j-1.7.24.jar 2.sha1.icloud b/solr-8.1.1/licenses/.jul-to-slf4j-1.7.24.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..b448bb308 --- /dev/null +++ b/solr-8.1.1/licenses/.jul-to-slf4j-1.7.24.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.jul-to-slf4j-LICENSE-MIT 2.txt.icloud b/solr-8.1.1/licenses/.jul-to-slf4j-LICENSE-MIT 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2d74265fa --- /dev/null +++ b/solr-8.1.1/licenses/.jul-to-slf4j-LICENSE-MIT 2.txt.icloud diff --git a/solr-8.1.1/licenses/.jul-to-slf4j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.jul-to-slf4j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..805ba0d75 --- /dev/null +++ b/solr-8.1.1/licenses/.jul-to-slf4j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.junit-4.12.jar 2.sha1.icloud b/solr-8.1.1/licenses/.junit-4.12.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..a543c5287 --- /dev/null +++ b/solr-8.1.1/licenses/.junit-4.12.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.junit-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.junit-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2590e3005 --- /dev/null +++ b/solr-8.1.1/licenses/.junit-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.junit4-ant-2.7.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.junit4-ant-2.7.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..1402f09f9 --- /dev/null +++ b/solr-8.1.1/licenses/.junit4-ant-2.7.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.junit4-ant-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.junit4-ant-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c487eacfb --- /dev/null +++ b/solr-8.1.1/licenses/.junit4-ant-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.juniversalchardet-1.0.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.juniversalchardet-1.0.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..260107414 --- /dev/null +++ b/solr-8.1.1/licenses/.juniversalchardet-1.0.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.juniversalchardet-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.juniversalchardet-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..5f78c022f --- /dev/null +++ b/solr-8.1.1/licenses/.juniversalchardet-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerb-admin-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerb-admin-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..5c47c9d83 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-admin-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerb-admin-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerb-admin-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..646c90dec --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-admin-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerb-client-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerb-client-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..d1449477f --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-client-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerb-client-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerb-client-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..30b608b66 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-client-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerb-common-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerb-common-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..e3d568e57 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-common-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerb-common-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerb-common-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..6a379fada --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-common-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerb-core-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerb-core-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..f6da2e088 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-core-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerb-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerb-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..ae516dbe6 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerb-crypto-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerb-crypto-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..4b41bbd90 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-crypto-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerb-crypto-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerb-crypto-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..46753705d --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-crypto-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerb-identity-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerb-identity-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..f5e0445fc --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-identity-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerb-identity-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerb-identity-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..254666afd --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-identity-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerb-server-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerb-server-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..76ed33e25 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-server-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerb-server-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerb-server-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..018c04246 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-server-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerb-simplekdc-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerb-simplekdc-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..c00fba985 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-simplekdc-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerb-simplekdc-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerb-simplekdc-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a90841c59 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-simplekdc-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerb-util-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerb-util-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..9474b551c --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-util-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerb-util-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerb-util-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..78368ce16 --- /dev/null +++ b/solr-8.1.1/licenses/.kerb-util-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerby-asn1-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerby-asn1-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..167a52fb5 --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-asn1-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerby-asn1-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerby-asn1-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..e2a8ca57a --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-asn1-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerby-config-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerby-config-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..78c79b1e1 --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-config-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerby-config-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerby-config-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..8fbcaaf4c --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-config-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerby-kdc-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerby-kdc-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..506ee4195 --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-kdc-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerby-kdc-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerby-kdc-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c0eb48fe4 --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-kdc-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerby-pkix-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerby-pkix-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..746b094b9 --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-pkix-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerby-pkix-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerby-pkix-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a66b62509 --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-pkix-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.kerby-util-1.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.kerby-util-1.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..6bbc7a5a0 --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-util-1.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.kerby-util-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.kerby-util-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c7347c8e0 --- /dev/null +++ b/solr-8.1.1/licenses/.kerby-util-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.langdetect-1.1-20120112.jar 2.sha1.icloud b/solr-8.1.1/licenses/.langdetect-1.1-20120112.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..310663474 --- /dev/null +++ b/solr-8.1.1/licenses/.langdetect-1.1-20120112.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.langdetect-LICENSE-ASL 2.txt.icloud b/solr-8.1.1/licenses/.langdetect-LICENSE-ASL 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2c8caee05 --- /dev/null +++ b/solr-8.1.1/licenses/.langdetect-LICENSE-ASL 2.txt.icloud diff --git a/solr-8.1.1/licenses/.langdetect-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.langdetect-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d9f39887a --- /dev/null +++ b/solr-8.1.1/licenses/.langdetect-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.log4j-1.2-api-2.11.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.log4j-1.2-api-2.11.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..808d598dc --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-1.2-api-2.11.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.log4j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.log4j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..f3130ec8c --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.log4j-api-2.11.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.log4j-api-2.11.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..5fc56bc2b --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-api-2.11.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.log4j-api-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.log4j-api-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..e4a336915 --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-api-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.log4j-core-2.11.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.log4j-core-2.11.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..b884f7727 --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-core-2.11.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.log4j-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.log4j-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d9e953ee4 --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.log4j-slf4j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.log4j-slf4j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..1c196c6d3 --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-slf4j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.log4j-slf4j-impl-2.11.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.log4j-slf4j-impl-2.11.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..fdac9bdb8 --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-slf4j-impl-2.11.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.log4j-web-2.11.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.log4j-web-2.11.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..dd8089ef5 --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-web-2.11.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.log4j-web-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.log4j-web-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..da31edc1e --- /dev/null +++ b/solr-8.1.1/licenses/.log4j-web-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.metadata-extractor-2.11.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.metadata-extractor-2.11.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..93d12f820 --- /dev/null +++ b/solr-8.1.1/licenses/.metadata-extractor-2.11.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.metadata-extractor-LICENSE-PD 2.txt.icloud b/solr-8.1.1/licenses/.metadata-extractor-LICENSE-PD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..912a77248 --- /dev/null +++ b/solr-8.1.1/licenses/.metadata-extractor-LICENSE-PD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.metrics-core-4.0.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.metrics-core-4.0.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..270a0cf8f --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-core-4.0.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.metrics-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.metrics-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d5f563f80 --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.metrics-graphite-4.0.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.metrics-graphite-4.0.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..2728b3c21 --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-graphite-4.0.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.metrics-graphite-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.metrics-graphite-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..687fbf311 --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-graphite-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.metrics-jetty-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.metrics-jetty-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..0c5a55ba0 --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-jetty-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.metrics-jetty9-4.0.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.metrics-jetty9-4.0.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..b19d51496 --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-jetty9-4.0.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.metrics-jmx-4.0.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.metrics-jmx-4.0.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..204bf45f5 --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-jmx-4.0.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.metrics-jmx-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.metrics-jmx-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d7cfcf278 --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-jmx-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.metrics-json-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.metrics-json-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c961f1b2e --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-json-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.metrics-jvm-4.0.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.metrics-jvm-4.0.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..29f4e1469 --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-jvm-4.0.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.metrics-jvm-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.metrics-jvm-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..874776391 --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-jvm-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.metrics-servlets-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.metrics-servlets-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..6bdf21dcd --- /dev/null +++ b/solr-8.1.1/licenses/.metrics-servlets-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.mina-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.mina-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..015447c18 --- /dev/null +++ b/solr-8.1.1/licenses/.mina-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.mockito-core-2.23.4.jar 2.sha1.icloud b/solr-8.1.1/licenses/.mockito-core-2.23.4.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..86941313a --- /dev/null +++ b/solr-8.1.1/licenses/.mockito-core-2.23.4.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.mockito-core-LICENSE-MIT 2.txt.icloud b/solr-8.1.1/licenses/.mockito-core-LICENSE-MIT 2.txt.icloud Binary files differnew file mode 100644 index 000000000..71b82ddb4 --- /dev/null +++ b/solr-8.1.1/licenses/.mockito-core-LICENSE-MIT 2.txt.icloud diff --git a/solr-8.1.1/licenses/.morfologik-fsa-2.1.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.morfologik-fsa-2.1.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..7b1ce712c --- /dev/null +++ b/solr-8.1.1/licenses/.morfologik-fsa-2.1.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.morfologik-fsa-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.morfologik-fsa-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..8990b37e1 --- /dev/null +++ b/solr-8.1.1/licenses/.morfologik-fsa-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.morfologik-fsa-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.morfologik-fsa-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b02b6e50e --- /dev/null +++ b/solr-8.1.1/licenses/.morfologik-fsa-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.morfologik-polish-2.1.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.morfologik-polish-2.1.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..0325a27d3 --- /dev/null +++ b/solr-8.1.1/licenses/.morfologik-polish-2.1.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.morfologik-polish-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.morfologik-polish-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d46ff0841 --- /dev/null +++ b/solr-8.1.1/licenses/.morfologik-polish-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.morfologik-polish-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.morfologik-polish-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..aced04368 --- /dev/null +++ b/solr-8.1.1/licenses/.morfologik-polish-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.morfologik-stemming-2.1.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.morfologik-stemming-2.1.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..54efb5b49 --- /dev/null +++ b/solr-8.1.1/licenses/.morfologik-stemming-2.1.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.morfologik-stemming-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.morfologik-stemming-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..f24df2704 --- /dev/null +++ b/solr-8.1.1/licenses/.morfologik-stemming-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.morfologik-stemming-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.morfologik-stemming-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a71dcc985 --- /dev/null +++ b/solr-8.1.1/licenses/.morfologik-stemming-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.netty-all-4.0.52.Final.jar 2.sha1.icloud b/solr-8.1.1/licenses/.netty-all-4.0.52.Final.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..1e099c153 --- /dev/null +++ b/solr-8.1.1/licenses/.netty-all-4.0.52.Final.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.noggit-0.8.jar 2.sha1.icloud b/solr-8.1.1/licenses/.noggit-0.8.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..d544cd67a --- /dev/null +++ b/solr-8.1.1/licenses/.noggit-0.8.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.noggit-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.noggit-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..f89dbe171 --- /dev/null +++ b/solr-8.1.1/licenses/.noggit-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.objenesis-2.6.jar 2.sha1.icloud b/solr-8.1.1/licenses/.objenesis-2.6.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..39a14ec0a --- /dev/null +++ b/solr-8.1.1/licenses/.objenesis-2.6.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.objenesis-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.objenesis-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c699b6397 --- /dev/null +++ b/solr-8.1.1/licenses/.objenesis-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.opennlp-tools-1.9.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.opennlp-tools-1.9.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..c9c1cdce0 --- /dev/null +++ b/solr-8.1.1/licenses/.opennlp-tools-1.9.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.opennlp-tools-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.opennlp-tools-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..782cd8bc0 --- /dev/null +++ b/solr-8.1.1/licenses/.opennlp-tools-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.org.restlet-2.3.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.org.restlet-2.3.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..08bc40c67 --- /dev/null +++ b/solr-8.1.1/licenses/.org.restlet-2.3.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.org.restlet-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.org.restlet-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..da0d8ea50 --- /dev/null +++ b/solr-8.1.1/licenses/.org.restlet-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.org.restlet.ext.servlet-2.3.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.org.restlet.ext.servlet-2.3.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..9ef9547dd --- /dev/null +++ b/solr-8.1.1/licenses/.org.restlet.ext.servlet-2.3.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.org.restlet.ext.servlet-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.org.restlet.ext.servlet-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..6d2e3720b --- /dev/null +++ b/solr-8.1.1/licenses/.org.restlet.ext.servlet-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.parso-2.0.9.jar 2.sha1.icloud b/solr-8.1.1/licenses/.parso-2.0.9.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..81d558d96 --- /dev/null +++ b/solr-8.1.1/licenses/.parso-2.0.9.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.pdfbox-2.0.12.jar 2.sha1.icloud b/solr-8.1.1/licenses/.pdfbox-2.0.12.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..451c9f28c --- /dev/null +++ b/solr-8.1.1/licenses/.pdfbox-2.0.12.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.pdfbox-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.pdfbox-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..db4a43720 --- /dev/null +++ b/solr-8.1.1/licenses/.pdfbox-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.pdfbox-tools-2.0.12.jar 2.sha1.icloud b/solr-8.1.1/licenses/.pdfbox-tools-2.0.12.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..e1e1762cf --- /dev/null +++ b/solr-8.1.1/licenses/.pdfbox-tools-2.0.12.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.pdfbox-tools-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.pdfbox-tools-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..9dbed4afc --- /dev/null +++ b/solr-8.1.1/licenses/.pdfbox-tools-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.poi-4.0.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.poi-4.0.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..087b78ef8 --- /dev/null +++ b/solr-8.1.1/licenses/.poi-4.0.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.poi-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.poi-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..0a7a49a99 --- /dev/null +++ b/solr-8.1.1/licenses/.poi-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.poi-ooxml-4.0.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.poi-ooxml-4.0.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..16475b4fb --- /dev/null +++ b/solr-8.1.1/licenses/.poi-ooxml-4.0.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.poi-ooxml-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.poi-ooxml-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..df6ff64ae --- /dev/null +++ b/solr-8.1.1/licenses/.poi-ooxml-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.poi-ooxml-schemas-4.0.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.poi-ooxml-schemas-4.0.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..1fb9cbf89 --- /dev/null +++ b/solr-8.1.1/licenses/.poi-ooxml-schemas-4.0.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.poi-ooxml-schemas-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.poi-ooxml-schemas-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a55b3f16d --- /dev/null +++ b/solr-8.1.1/licenses/.poi-ooxml-schemas-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.poi-scratchpad-4.0.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.poi-scratchpad-4.0.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..2817f5d94 --- /dev/null +++ b/solr-8.1.1/licenses/.poi-scratchpad-4.0.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.poi-scratchpad-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.poi-scratchpad-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..60e61f62c --- /dev/null +++ b/solr-8.1.1/licenses/.poi-scratchpad-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.presto-parser-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.presto-parser-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d185cfe7e --- /dev/null +++ b/solr-8.1.1/licenses/.presto-parser-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.protobuf-java-3.6.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.protobuf-java-3.6.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..fee6a3d17 --- /dev/null +++ b/solr-8.1.1/licenses/.protobuf-java-3.6.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.protobuf-java-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.protobuf-java-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..0f250e1a6 --- /dev/null +++ b/solr-8.1.1/licenses/.protobuf-java-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.protobuf-java-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.protobuf-java-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a2fa1ea25 --- /dev/null +++ b/solr-8.1.1/licenses/.protobuf-java-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.randomizedtesting-runner-2.7.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.randomizedtesting-runner-2.7.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..7026e0669 --- /dev/null +++ b/solr-8.1.1/licenses/.randomizedtesting-runner-2.7.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.randomizedtesting-runner-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.randomizedtesting-runner-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..f21772c67 --- /dev/null +++ b/solr-8.1.1/licenses/.randomizedtesting-runner-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.re2j-1.2.jar 2.sha1.icloud b/solr-8.1.1/licenses/.re2j-1.2.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..3bfa58251 --- /dev/null +++ b/solr-8.1.1/licenses/.re2j-1.2.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.re2j-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.re2j-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b72565a91 --- /dev/null +++ b/solr-8.1.1/licenses/.re2j-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.re2j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.re2j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..26c35cfb6 --- /dev/null +++ b/solr-8.1.1/licenses/.re2j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.rome-1.5.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.rome-1.5.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..136f9fbbe --- /dev/null +++ b/solr-8.1.1/licenses/.rome-1.5.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.rome-LICENSE-ASL 2.txt.icloud b/solr-8.1.1/licenses/.rome-LICENSE-ASL 2.txt.icloud Binary files differnew file mode 100644 index 000000000..9bc6fa97b --- /dev/null +++ b/solr-8.1.1/licenses/.rome-LICENSE-ASL 2.txt.icloud diff --git a/solr-8.1.1/licenses/.rome-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.rome-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..388032029 --- /dev/null +++ b/solr-8.1.1/licenses/.rome-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.rome-utils-1.5.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.rome-utils-1.5.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..f257892a2 --- /dev/null +++ b/solr-8.1.1/licenses/.rome-utils-1.5.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.rome-utils-LICENSE-ASL 2.txt.icloud b/solr-8.1.1/licenses/.rome-utils-LICENSE-ASL 2.txt.icloud Binary files differnew file mode 100644 index 000000000..e32c46eac --- /dev/null +++ b/solr-8.1.1/licenses/.rome-utils-LICENSE-ASL 2.txt.icloud diff --git a/solr-8.1.1/licenses/.rome-utils-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.rome-utils-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..18ae824bd --- /dev/null +++ b/solr-8.1.1/licenses/.rome-utils-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.rrd4j-3.5.jar 2.sha1.icloud b/solr-8.1.1/licenses/.rrd4j-3.5.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..4379030c4 --- /dev/null +++ b/solr-8.1.1/licenses/.rrd4j-3.5.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.rrd4j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.rrd4j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c672164be --- /dev/null +++ b/solr-8.1.1/licenses/.rrd4j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.servlet-api-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.servlet-api-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2f5ef152c --- /dev/null +++ b/solr-8.1.1/licenses/.servlet-api-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.simple-xml-2.7.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.simple-xml-2.7.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..328addfd5 --- /dev/null +++ b/solr-8.1.1/licenses/.simple-xml-2.7.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.simple-xml-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.simple-xml-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a0c76249e --- /dev/null +++ b/solr-8.1.1/licenses/.simple-xml-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.simpleclient-0.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.simpleclient-0.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..eac589b3a --- /dev/null +++ b/solr-8.1.1/licenses/.simpleclient-0.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.simpleclient-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.simpleclient-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..ecbb3d85a --- /dev/null +++ b/solr-8.1.1/licenses/.simpleclient-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.simpleclient_common-0.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.simpleclient_common-0.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..4b03a540b --- /dev/null +++ b/solr-8.1.1/licenses/.simpleclient_common-0.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.simpleclient_common-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.simpleclient_common-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b2e51d033 --- /dev/null +++ b/solr-8.1.1/licenses/.simpleclient_common-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.simpleclient_httpserver-0.2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.simpleclient_httpserver-0.2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..1dd582d83 --- /dev/null +++ b/solr-8.1.1/licenses/.simpleclient_httpserver-0.2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.simpleclient_httpserver-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.simpleclient_httpserver-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..3098c4b66 --- /dev/null +++ b/solr-8.1.1/licenses/.simpleclient_httpserver-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.slf4j-LICENSE-MIT 2.txt.icloud b/solr-8.1.1/licenses/.slf4j-LICENSE-MIT 2.txt.icloud Binary files differnew file mode 100644 index 000000000..5877a3530 --- /dev/null +++ b/solr-8.1.1/licenses/.slf4j-LICENSE-MIT 2.txt.icloud diff --git a/solr-8.1.1/licenses/.slf4j-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.slf4j-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a5102130a --- /dev/null +++ b/solr-8.1.1/licenses/.slf4j-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.slf4j-api-1.7.24.jar 2.sha1.icloud b/solr-8.1.1/licenses/.slf4j-api-1.7.24.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..6380b545b --- /dev/null +++ b/solr-8.1.1/licenses/.slf4j-api-1.7.24.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.slf4j-simple-1.7.24.jar 2.sha1.icloud b/solr-8.1.1/licenses/.slf4j-simple-1.7.24.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..59b22a082 --- /dev/null +++ b/solr-8.1.1/licenses/.slf4j-simple-1.7.24.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.slice-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.slice-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..7cce25bd8 --- /dev/null +++ b/solr-8.1.1/licenses/.slice-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.spatial4j-0.7.jar 2.sha1.icloud b/solr-8.1.1/licenses/.spatial4j-0.7.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..404045f0d --- /dev/null +++ b/solr-8.1.1/licenses/.spatial4j-0.7.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.start.jar 2.sha1.icloud b/solr-8.1.1/licenses/.start.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..68984afca --- /dev/null +++ b/solr-8.1.1/licenses/.start.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.stax2-api-3.1.4.jar 2.sha1.icloud b/solr-8.1.1/licenses/.stax2-api-3.1.4.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..e8053cfa2 --- /dev/null +++ b/solr-8.1.1/licenses/.stax2-api-3.1.4.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.stax2-api-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.stax2-api-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..196925921 --- /dev/null +++ b/solr-8.1.1/licenses/.stax2-api-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.stax2-api-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.stax2-api-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b7c573601 --- /dev/null +++ b/solr-8.1.1/licenses/.stax2-api-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.t-digest-3.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.t-digest-3.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..232e20470 --- /dev/null +++ b/solr-8.1.1/licenses/.t-digest-3.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.t-digest-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.t-digest-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..bf44581f9 --- /dev/null +++ b/solr-8.1.1/licenses/.t-digest-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.tagsoup-1.2.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.tagsoup-1.2.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..d89d7705b --- /dev/null +++ b/solr-8.1.1/licenses/.tagsoup-1.2.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.tagsoup-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.tagsoup-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..abe541791 --- /dev/null +++ b/solr-8.1.1/licenses/.tagsoup-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.tika-core-1.19.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.tika-core-1.19.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..1cd8bc17a --- /dev/null +++ b/solr-8.1.1/licenses/.tika-core-1.19.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.tika-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.tika-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..242991810 --- /dev/null +++ b/solr-8.1.1/licenses/.tika-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.tika-java7-1.19.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.tika-java7-1.19.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..77bbff5d6 --- /dev/null +++ b/solr-8.1.1/licenses/.tika-java7-1.19.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.tika-java7-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.tika-java7-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..038e14588 --- /dev/null +++ b/solr-8.1.1/licenses/.tika-java7-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.tika-parsers-1.19.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.tika-parsers-1.19.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..cd13e3357 --- /dev/null +++ b/solr-8.1.1/licenses/.tika-parsers-1.19.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.tika-parsers-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.tika-parsers-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a74696bc1 --- /dev/null +++ b/solr-8.1.1/licenses/.tika-parsers-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.tika-xmp-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.tika-xmp-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..0f6eb8bfc --- /dev/null +++ b/solr-8.1.1/licenses/.tika-xmp-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.velocity-engine-core-2.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.velocity-engine-core-2.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..85981eda9 --- /dev/null +++ b/solr-8.1.1/licenses/.velocity-engine-core-2.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.velocity-engine-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.velocity-engine-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..e19fe820e --- /dev/null +++ b/solr-8.1.1/licenses/.velocity-engine-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.velocity-tools-generic-3.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.velocity-tools-generic-3.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..e40bdeb0b --- /dev/null +++ b/solr-8.1.1/licenses/.velocity-tools-generic-3.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.velocity-tools-generic-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.velocity-tools-generic-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..3ed93e440 --- /dev/null +++ b/solr-8.1.1/licenses/.velocity-tools-generic-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.velocity-tools-view-3.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.velocity-tools-view-3.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..69a073577 --- /dev/null +++ b/solr-8.1.1/licenses/.velocity-tools-view-3.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.velocity-tools-view-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.velocity-tools-view-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..519dbd645 --- /dev/null +++ b/solr-8.1.1/licenses/.velocity-tools-view-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.velocity-tools-view-jsp-3.0.jar 2.sha1.icloud b/solr-8.1.1/licenses/.velocity-tools-view-jsp-3.0.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..888d55662 --- /dev/null +++ b/solr-8.1.1/licenses/.velocity-tools-view-jsp-3.0.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.velocity-tools-view-jsp-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.velocity-tools-view-jsp-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..9926eb5d3 --- /dev/null +++ b/solr-8.1.1/licenses/.velocity-tools-view-jsp-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.vorbis-java-core-0.8.jar 2.sha1.icloud b/solr-8.1.1/licenses/.vorbis-java-core-0.8.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..8bdbd9520 --- /dev/null +++ b/solr-8.1.1/licenses/.vorbis-java-core-0.8.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.vorbis-java-core-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.vorbis-java-core-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..bcb11a5f1 --- /dev/null +++ b/solr-8.1.1/licenses/.vorbis-java-core-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.vorbis-java-core-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.vorbis-java-core-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..190aac49a --- /dev/null +++ b/solr-8.1.1/licenses/.vorbis-java-core-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.vorbis-java-tika-0.8.jar 2.sha1.icloud b/solr-8.1.1/licenses/.vorbis-java-tika-0.8.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..99ceb2550 --- /dev/null +++ b/solr-8.1.1/licenses/.vorbis-java-tika-0.8.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.vorbis-java-tika-LICENSE-BSD_LIKE 2.txt.icloud b/solr-8.1.1/licenses/.vorbis-java-tika-LICENSE-BSD_LIKE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..528678230 --- /dev/null +++ b/solr-8.1.1/licenses/.vorbis-java-tika-LICENSE-BSD_LIKE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.vorbis-java-tika-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.vorbis-java-tika-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..590141a0b --- /dev/null +++ b/solr-8.1.1/licenses/.vorbis-java-tika-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.woodstox-core-asl-4.4.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.woodstox-core-asl-4.4.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..4078f4b4c --- /dev/null +++ b/solr-8.1.1/licenses/.woodstox-core-asl-4.4.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.woodstox-core-asl-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.woodstox-core-asl-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c57642df3 --- /dev/null +++ b/solr-8.1.1/licenses/.woodstox-core-asl-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.xercesImpl-2.9.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.xercesImpl-2.9.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..b32dea3c0 --- /dev/null +++ b/solr-8.1.1/licenses/.xercesImpl-2.9.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.xercesImpl-LICENSE-ASL 2.txt.icloud b/solr-8.1.1/licenses/.xercesImpl-LICENSE-ASL 2.txt.icloud Binary files differnew file mode 100644 index 000000000..0cb88fe07 --- /dev/null +++ b/solr-8.1.1/licenses/.xercesImpl-LICENSE-ASL 2.txt.icloud diff --git a/solr-8.1.1/licenses/.xercesImpl-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.xercesImpl-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..85c595429 --- /dev/null +++ b/solr-8.1.1/licenses/.xercesImpl-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.xmlbeans-3.0.1.jar 2.sha1.icloud b/solr-8.1.1/licenses/.xmlbeans-3.0.1.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..c0c0d14e2 --- /dev/null +++ b/solr-8.1.1/licenses/.xmlbeans-3.0.1.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.xmlbeans-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.xmlbeans-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..9c4ea137f --- /dev/null +++ b/solr-8.1.1/licenses/.xmlbeans-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.xmpcore-5.1.3.jar 2.sha1.icloud b/solr-8.1.1/licenses/.xmpcore-5.1.3.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..dd8a9ccbc --- /dev/null +++ b/solr-8.1.1/licenses/.xmpcore-5.1.3.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.xmpcore-LICENSE-BSD 2.txt.icloud b/solr-8.1.1/licenses/.xmpcore-LICENSE-BSD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..10e7b03ef --- /dev/null +++ b/solr-8.1.1/licenses/.xmpcore-LICENSE-BSD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.xmpcore-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.xmpcore-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..225cb564d --- /dev/null +++ b/solr-8.1.1/licenses/.xmpcore-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.xz-1.8.jar 2.sha1.icloud b/solr-8.1.1/licenses/.xz-1.8.jar 2.sha1.icloud Binary files differnew file mode 100644 index 000000000..8069a9112 --- /dev/null +++ b/solr-8.1.1/licenses/.xz-1.8.jar 2.sha1.icloud diff --git a/solr-8.1.1/licenses/.xz-LICENSE-PD 2.txt.icloud b/solr-8.1.1/licenses/.xz-LICENSE-PD 2.txt.icloud Binary files differnew file mode 100644 index 000000000..1dfdf4a9b --- /dev/null +++ b/solr-8.1.1/licenses/.xz-LICENSE-PD 2.txt.icloud diff --git a/solr-8.1.1/licenses/.xz-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.xz-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..69df2818c --- /dev/null +++ b/solr-8.1.1/licenses/.xz-NOTICE 2.txt.icloud diff --git a/solr-8.1.1/licenses/.zookeeper-NOTICE 2.txt.icloud b/solr-8.1.1/licenses/.zookeeper-NOTICE 2.txt.icloud Binary files differnew file mode 100644 index 000000000..927894054 --- /dev/null +++ b/solr-8.1.1/licenses/.zookeeper-NOTICE 2.txt.icloud diff --git a/solr/conf/.params 2.json.icloud b/solr/conf/.params 2.json.icloud Binary files differnew file mode 100644 index 000000000..c5bf58fca --- /dev/null +++ b/solr/conf/.params 2.json.icloud diff --git a/solr/conf/.protwords 2.txt.icloud b/solr/conf/.protwords 2.txt.icloud Binary files differnew file mode 100644 index 000000000..7adc99218 --- /dev/null +++ b/solr/conf/.protwords 2.txt.icloud diff --git a/solr/conf/.schema 2.xml.icloud b/solr/conf/.schema 2.xml.icloud Binary files differnew file mode 100644 index 000000000..a70155bc8 --- /dev/null +++ b/solr/conf/.schema 2.xml.icloud diff --git a/solr/conf/.stopwords 2.txt.icloud b/solr/conf/.stopwords 2.txt.icloud Binary files differnew file mode 100644 index 000000000..528061d23 --- /dev/null +++ b/solr/conf/.stopwords 2.txt.icloud diff --git a/solr/conf/.synonyms 2.txt.icloud b/solr/conf/.synonyms 2.txt.icloud Binary files differnew file mode 100644 index 000000000..34c8c21dc --- /dev/null +++ b/solr/conf/.synonyms 2.txt.icloud diff --git a/solr/conf/lang/.contractions_ca 2.txt.icloud b/solr/conf/lang/.contractions_ca 2.txt.icloud Binary files differnew file mode 100644 index 000000000..7a413f294 --- /dev/null +++ b/solr/conf/lang/.contractions_ca 2.txt.icloud diff --git a/solr/conf/lang/.contractions_fr 2.txt.icloud b/solr/conf/lang/.contractions_fr 2.txt.icloud Binary files differnew file mode 100644 index 000000000..898cc1f63 --- /dev/null +++ b/solr/conf/lang/.contractions_fr 2.txt.icloud diff --git a/solr/conf/lang/.hyphenations_ga 2.txt.icloud b/solr/conf/lang/.hyphenations_ga 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d20b400c8 --- /dev/null +++ b/solr/conf/lang/.hyphenations_ga 2.txt.icloud diff --git a/solr/conf/lang/.stemdict_nl 2.txt.icloud b/solr/conf/lang/.stemdict_nl 2.txt.icloud Binary files differnew file mode 100644 index 000000000..7eacaf06c --- /dev/null +++ b/solr/conf/lang/.stemdict_nl 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_ar 2.txt.icloud b/solr/conf/lang/.stopwords_ar 2.txt.icloud Binary files differnew file mode 100644 index 000000000..a3f257a99 --- /dev/null +++ b/solr/conf/lang/.stopwords_ar 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_ca 2.txt.icloud b/solr/conf/lang/.stopwords_ca 2.txt.icloud Binary files differnew file mode 100644 index 000000000..21076dd40 --- /dev/null +++ b/solr/conf/lang/.stopwords_ca 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_cz 2.txt.icloud b/solr/conf/lang/.stopwords_cz 2.txt.icloud Binary files differnew file mode 100644 index 000000000..4f3819a84 --- /dev/null +++ b/solr/conf/lang/.stopwords_cz 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_el 2.txt.icloud b/solr/conf/lang/.stopwords_el 2.txt.icloud Binary files differnew file mode 100644 index 000000000..490a85826 --- /dev/null +++ b/solr/conf/lang/.stopwords_el 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_en 2.txt.icloud b/solr/conf/lang/.stopwords_en 2.txt.icloud Binary files differnew file mode 100644 index 000000000..c87ac3740 --- /dev/null +++ b/solr/conf/lang/.stopwords_en 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_eu 2.txt.icloud b/solr/conf/lang/.stopwords_eu 2.txt.icloud Binary files differnew file mode 100644 index 000000000..2730e46fc --- /dev/null +++ b/solr/conf/lang/.stopwords_eu 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_fa 2.txt.icloud b/solr/conf/lang/.stopwords_fa 2.txt.icloud Binary files differnew file mode 100644 index 000000000..14c05e6b8 --- /dev/null +++ b/solr/conf/lang/.stopwords_fa 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_hi 2.txt.icloud b/solr/conf/lang/.stopwords_hi 2.txt.icloud Binary files differnew file mode 100644 index 000000000..be1c06e44 --- /dev/null +++ b/solr/conf/lang/.stopwords_hi 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_id 2.txt.icloud b/solr/conf/lang/.stopwords_id 2.txt.icloud Binary files differnew file mode 100644 index 000000000..b4d31653f --- /dev/null +++ b/solr/conf/lang/.stopwords_id 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_ja 2.txt.icloud b/solr/conf/lang/.stopwords_ja 2.txt.icloud Binary files differnew file mode 100644 index 000000000..29ba175e8 --- /dev/null +++ b/solr/conf/lang/.stopwords_ja 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_lv 2.txt.icloud b/solr/conf/lang/.stopwords_lv 2.txt.icloud Binary files differnew file mode 100644 index 000000000..28b8bc40d --- /dev/null +++ b/solr/conf/lang/.stopwords_lv 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_ro 2.txt.icloud b/solr/conf/lang/.stopwords_ro 2.txt.icloud Binary files differnew file mode 100644 index 000000000..74b4cdcc3 --- /dev/null +++ b/solr/conf/lang/.stopwords_ro 2.txt.icloud diff --git a/solr/conf/lang/.stopwords_tr 2.txt.icloud b/solr/conf/lang/.stopwords_tr 2.txt.icloud Binary files differnew file mode 100644 index 000000000..1a6d89916 --- /dev/null +++ b/solr/conf/lang/.stopwords_tr 2.txt.icloud diff --git a/solr/conf/lang/.userdict_ja 2.txt.icloud b/solr/conf/lang/.userdict_ja 2.txt.icloud Binary files differnew file mode 100644 index 000000000..d08bbe310 --- /dev/null +++ b/solr/conf/lang/.userdict_ja 2.txt.icloud diff --git a/src/client/.Network 2.ts.icloud b/src/client/.Network 2.ts.icloud Binary files differnew file mode 100644 index 000000000..25bffdbc3 --- /dev/null +++ b/src/client/.Network 2.ts.icloud diff --git a/src/client/.goldenLayout.d 2.ts.icloud b/src/client/.goldenLayout.d 2.ts.icloud Binary files differnew file mode 100644 index 000000000..c2ee8a2f5 --- /dev/null +++ b/src/client/.goldenLayout.d 2.ts.icloud diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts index 10879d1e3..92d6cd9cd 100644 --- a/src/client/documents/Documents.ts +++ b/src/client/documents/Documents.ts @@ -76,7 +76,8 @@ export interface DocumentOptions { viewType?: number; backgroundColor?: string; ignoreClick?: boolean; - lockedPosition?: boolean; + lockedPosition?: boolean; // lock the x,y coordinates of the document so that it can't be dragged + lockedTransform?: boolean; // lock the panx,pany and scale parameters of the document so that it be panned/zoomed opacity?: number; defaultBackgroundColor?: string; dropAction?: dropActionType; diff --git a/src/client/util/RichTextSchema.tsx b/src/client/util/RichTextSchema.tsx index 76b8aeaa1..0a717dff1 100644 --- a/src/client/util/RichTextSchema.tsx +++ b/src/client/util/RichTextSchema.tsx @@ -18,7 +18,6 @@ import { Transform } from "./Transform"; import React = require("react"); import { BoolCast, NumCast } from "../../new_fields/Types"; import { FormattedTextBox } from "../views/nodes/FormattedTextBox"; -import { CurrentUserUtils } from "../../server/authentication/models/current_user_utils"; const pDOM: DOMOutputSpecArray = ["p", 0], blockquoteDOM: DOMOutputSpecArray = ["blockquote", 0], hrDOM: DOMOutputSpecArray = ["hr"], preDOM: DOMOutputSpecArray = ["pre", ["code", 0]], brDOM: DOMOutputSpecArray = ["br"], ulDOM: DOMOutputSpecArray = ["ul", 0]; @@ -130,6 +129,7 @@ export const nodes: { [index: string]: NodeSpec } = { // } // }] }, + // :: NodeSpec An inline image (`<img>`) node. Supports `src`, // `alt`, and `href` attributes. The latter two default to the empty // string. @@ -310,6 +310,37 @@ export const marks: { [index: string]: MarkSpec } = { } }, + // :: MarkSpec Coloring on text. Has `color` attribute that defined the color of the marked text. + color: { + attrs: { + color: { default: "#000" } + }, + inclusive: false, + parseDOM: [{ + tag: "span", getAttrs(dom: any) { + return { color: dom.getAttribute("color") }; + } + }], + toDOM(node: any) { + return node.attrs.color ? ['span', { style: 'color:' + node.attrs.color }] : ['span', { style: 'color: black' }]; + } + }, + + marker: { + attrs: { + highlight: { default: "transparent" } + }, + inclusive: false, + parseDOM: [{ + tag: "span", getAttrs(dom: any) { + return { highlight: dom.getAttribute("backgroundColor") }; + } + }], + toDOM(node: any) { + return node.attrs.highlight ? ['span', { style: 'background-color:' + node.attrs.highlight }] : ['span', { style: 'background-color: transparent' }]; + } + }, + // :: MarkSpec An emphasis mark. Rendered as an `<em>` element. // Has parse rules that also match `<i>` and `font-style: italic`. em: { @@ -576,8 +607,8 @@ export class ImageResizeView { this._handle.onpointerdown = function (e: any) { e.preventDefault(); e.stopPropagation(); - let wid = Number(getComputedStyle(self._img).width!.replace(/px/, "")); - let hgt = Number(getComputedStyle(self._img).height!.replace(/px/, "")); + let wid = Number(getComputedStyle(self._img).width.replace(/px/, "")); + let hgt = Number(getComputedStyle(self._img).height.replace(/px/, "")); const startX = e.pageX; const startWidth = parseFloat(node.attrs.width); const onpointermove = (e: any) => { @@ -680,6 +711,7 @@ export class DashDocView { bringToFront={emptyFunction} zoomToScale={emptyFunction} getScale={returnOne} + dontRegisterView={true} ContainingCollectionView={undefined} ContainingCollectionDoc={undefined} ContentScaling={this.contentScaling} diff --git a/src/client/util/SearchUtil.ts b/src/client/util/SearchUtil.ts index 6706dcb89..2cf13680a 100644 --- a/src/client/util/SearchUtil.ts +++ b/src/client/util/SearchUtil.ts @@ -28,6 +28,7 @@ export namespace SearchUtil { start?: number; rows?: number; fq?: string; + allowAliases?: boolean; } export function Search(query: string, returnDocs: true, options?: SearchParams): Promise<DocSearchResult>; export function Search(query: string, returnDocs: false, options?: SearchParams): Promise<IdSearchResult>; @@ -73,7 +74,7 @@ export namespace SearchUtil { const docs = ids.map((id: string) => docMap[id]).map(doc => doc as Doc); for (let i = 0; i < ids.length; i++) { let testDoc = docs[i]; - if (testDoc instanceof Doc && testDoc.type !== DocumentType.KVP && theDocs.findIndex(d => Doc.AreProtosEqual(d, testDoc)) === -1) { + if (testDoc instanceof Doc && testDoc.type !== DocumentType.KVP && (options.allowAliases || theDocs.findIndex(d => Doc.AreProtosEqual(d, testDoc)) === -1)) { theDocs.push(testDoc); theLines.push([]); } @@ -88,9 +89,9 @@ export namespace SearchUtil { const proto = Doc.GetProto(doc); const protoId = proto[Id]; if (returnDocs) { - return (await Search("", returnDocs, { fq: `proto_i:"${protoId}"` })).docs; + return (await Search("", returnDocs, { fq: `proto_i:"${protoId}"`, allowAliases: true })).docs; } else { - return (await Search("", returnDocs, { fq: `proto_i:"${protoId}"` })).ids; + return (await Search("", returnDocs, { fq: `proto_i:"${protoId}"`, allowAliases: true })).ids; } // return Search(`{!join from=id to=proto_i}id:${protoId}`, true); } diff --git a/src/client/util/TooltipTextMenu.scss b/src/client/util/TooltipTextMenu.scss index ebf833dbe..8310a0da6 100644 --- a/src/client/util/TooltipTextMenu.scss +++ b/src/client/util/TooltipTextMenu.scss @@ -1,100 +1,62 @@ @import "../views/globalCssVariables"; - -.ProseMirror-textblock-dropdown { - min-width: 3em; - } - - .ProseMirror-menu { - margin: 0 -4px; - line-height: 1; - } - - .ProseMirror-tooltip .ProseMirror-menu { - width: -webkit-fit-content; - width: fit-content; - white-space: pre; - } - - .ProseMirror-menuitem { - margin-right: 3px; +.ProseMirror-menu-dropdown-wrap { display: inline-block; - z-index: 50000; position: relative; - } - - .ProseMirror-menuseparator { - // border-right: 1px solid #ddd; - margin-right: 3px; - } - - .ProseMirror-menu-dropdown, .ProseMirror-menu-dropdown-menu { - font-size: 90%; - white-space: nowrap; - } +} - .ProseMirror-menu-dropdown { +.ProseMirror-menu-dropdown { vertical-align: 1px; cursor: pointer; position: relative; - padding-right: 15px; - margin: 3px; + padding: 0 15px 0 4px; background: white; - border-radius: 3px; - text-align: center; - } - - .ProseMirror-menu-dropdown-wrap { - padding: 1px 0 1px 4px; - display: inline-block; + border-radius: 2px; + text-align: left; + font-size: 12px; + white-space: nowrap; + margin-right: 4px; + + &:after { + content: ""; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid currentColor; + opacity: .6; + position: absolute; + right: 4px; + top: calc(50% - 2px); + } +} + +.ProseMirror-menu-submenu-wrap { position: relative; - } - - .ProseMirror-menu-dropdown:after { - content: ""; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid currentColor; - opacity: .6; - position: absolute; - right: 4px; - top: calc(50% - 2px); - } - - .ProseMirror-menu-dropdown-menu, .ProseMirror-menu-submenu { - background: $dark-color; - color:white; + margin-right: -4px; +} + +.ProseMirror-menu-dropdown-menu, +.ProseMirror-menu-submenu { + font-size: 12px; + background: white; border: 1px solid rgb(223, 223, 223); - padding: 2px; - } - - .ProseMirror-menu-dropdown-menu { + min-width: 40px; z-index: 50000; - min-width: 6em; - background: white; position: absolute; - } - - .linking { - text-align: center; - } + box-sizing: content-box; - .ProseMirror-menu-dropdown-item { - cursor: pointer; - padding: 2px 8px 2px 4px; - width: auto; - z-index: 100000; - } - - .ProseMirror-menu-dropdown-item:hover { - background: white; - } - - .ProseMirror-menu-submenu-wrap { - position: relative; - margin-right: -4px; - } - - .ProseMirror-menu-submenu-label:after { + .ProseMirror-menu-dropdown-item { + cursor: pointer; + z-index: 100000; + text-align: left; + padding: 3px; + + &:hover { + background-color: $light-color-secondary; + } + } +} + + +.ProseMirror-menu-submenu-label:after { content: ""; border-top: 4px solid transparent; border-bottom: 4px solid transparent; @@ -103,153 +65,51 @@ position: absolute; right: 4px; top: calc(50% - 4px); - } - - .ProseMirror-menu-submenu { - display: none; - min-width: 4em; - left: 100%; - top: -3px; - } - - .ProseMirror-menu-active { - background: #eee; - border-radius: 4px; - } - - .ProseMirror-menu-active { - background: #eee; - border-radius: 4px; - } - - .ProseMirror-menu-disabled { - opacity: .3; - } - - .ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu, .ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu { - display: block; - } - - .ProseMirror-menubar { - border-top-left-radius: inherit; - border-top-right-radius: inherit; - position: relative; - min-height: 1em; - color: white; - padding: 10px 10px; - top: 0; left: 0; right: 0; - border-bottom: 1px solid silver; - background:$dark-color; - z-index: 10; - -moz-box-sizing: border-box; - box-sizing: border-box; - overflow: visible; - } +} .ProseMirror-icon { display: inline-block; - line-height: .8; - vertical-align: -2px; /* Compensate for padding */ - padding: 2px 8px; + // line-height: .8; + // vertical-align: -2px; /* Compensate for padding */ + // padding: 2px 8px; cursor: pointer; - } - - .ProseMirror-menu-disabled.ProseMirror-icon { - cursor: default; - } - - .ProseMirror-icon svg { - fill:white; - height: 1em; - } - - .ProseMirror-icon span { - vertical-align: text-top; - } - - .ProseMirror ul, .ProseMirror ol { - padding-left: 30px; - } - - .ProseMirror blockquote { - padding-left: 1em; - border-left: 3px solid #eee; - margin-left: 0; margin-right: 0; - } - - .ProseMirror-example-setup-style img { - cursor: default; - } - - .ProseMirror-prompt { - background: white; - padding: 5px 10px 5px 15px; - border: 1px solid silver; - position: fixed; - border-radius: 3px; - z-index: 11; - box-shadow: -.5px 2px 5px white(255, 255, 255, 0.2); - } - - .ProseMirror-prompt h5 { - margin: 0; - font-weight: normal; - font-size: 100%; - color: #444; - } - - .ProseMirror-prompt input[type="text"], - .ProseMirror-prompt textarea { - background: white; - border: none; - outline: none; - } - - .ProseMirror-prompt input[type="text"] { - padding: 0 4px; - } - - .ProseMirror-prompt-close { - position: absolute; - left: 2px; top: 1px; - color: #666; - border: none; background: transparent; padding: 0; - } - - .ProseMirror-prompt-close:after { - content: "✕"; - font-size: 12px; - } - - .ProseMirror-invalid { - background: #ffc; - border: 1px solid #cc7; - border-radius: 4px; - padding: 5px 10px; - position: absolute; - min-width: 10em; - } - - .ProseMirror-prompt-buttons { - margin-top: 5px; - display: none; + + &.ProseMirror-menu-disabled { + cursor: default; + } + + svg { + fill:white; + height: 1em; + } + + span { + vertical-align: text-top; + } } -.tooltipMenu { +.wrapper { position: absolute; - z-index: 20000; - background: #121721; - border: 1px solid silver; - border-radius: 15px; - //height: 60px; - //padding: 2px 10px; - //margin-top: 100px; - //-webkit-transform: translateX(-50%); - //transform: translateX(-50%); + pointer-events: all; + display: flex; + align-items: center; transform: translateY(-85px); + + height: 35px; + background: #323232; + border-radius: 6px; + box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.25); + +} + +.tooltipMenu, .basic-tools { + z-index: 20000; pointer-events: all; - height: fit-content; - width:550px; + padding: 3px; + padding-bottom: 5px; + display: flex; + align-items: center; + .ProseMirror-example-setup-style hr { padding: 2px 10px; border: none; @@ -265,60 +125,89 @@ } } -.tooltipExtras { - position: absolute; - z-index: 20000; - background: #121721; - border: 1px solid silver; - border-radius: 15px; - //height: 60px; - //padding: 2px 10px; - //margin-top: 100px; - //-webkit-transform: translateX(-50%); - //transform: translateX(-50%); - transform: translateY(-115px); - pointer-events: all; +.menuicon { + width: 25px; height: 25px; - width:fit-content; - .ProseMirror-example-setup-style hr { - padding: 2px 10px; - border: none; - margin: 1em 0; + cursor: pointer; + text-align: center; + line-height: 25px; + margin: 0 2px; + border-radius: 3px; + + &:hover { + background-color: black; + + #link-drag { + background-color: black; + } } - - .ProseMirror-example-setup-style hr:after { - content: ""; - display: block; - height: 1px; - background-color: silver; - line-height: 2px; + + &> * { + margin-top: 50%; + margin-left: 50%; + transform: translate(-50%, -50%); } -} -.wrapper { - position: absolute; - pointer-events: all; + svg { + fill: white; + width: 18px; + height: 18px; + } } - .menuicon { - display: inline-block; - border-right: 1px solid white(0, 0, 0, 0.2); - //color: rgb(19, 18, 18); - color: rgb(226, 21, 21); - line-height: 1; - padding: 0px 2px; - margin: 1px; +.menuicon-active { + width: 25px; + height: 25px; cursor: pointer; text-align: center; - min-width: 10px; - - } - .strong, .heading { font-weight: bold; } - .em { font-style: italic; } - .underline {text-decoration: underline} - .superscript {vertical-align:super} - .subscript { vertical-align:sub } - .strikethrough {text-decoration-line:line-through} + line-height: 25px; + margin: 0 2px; + border-radius: 3px; + + &:hover { + background-color: black; + } + + &> * { + margin-top: 50%; + margin-left: 50%; + transform: translate(-50%, -50%); + } + + svg { + fill: greenyellow; + width: 18px; + height: 18px; + } +} + +#colorPicker { + position: relative; + + svg { + width: 18px; + height: 18px; + // margin-top: 11px; + } + + .buttonColor { + position: absolute; + top: 24px; + left: 1px; + width: 24px; + height: 4px; + margin-top: 0; + } +} + +#link-drag { + background-color: #323232; +} + +.underline svg { + margin-top: 13px; +} + .font-size-indicator { font-size: 12px; padding-right: 0px; @@ -328,8 +217,9 @@ height: 20px; text-align: center; } + - .brush{ +.brush{ display: inline-block; width: 1em; height: 1em; @@ -337,19 +227,146 @@ stroke: currentColor; fill: currentColor; margin-right: 15px; - } +} - .brush-active{ +.brush-active{ display: inline-block; width: 1em; height: 1em; stroke-width: 3; - stroke: greenyellow; fill: greenyellow; margin-right: 15px; - } +} + +.dragger-wrapper { + color: #eee; + height: 22px; + padding: 0 5px; + box-sizing: content-box; + cursor: grab; - .dragger{ - color: #eee; - margin-left: 5px; - }
\ No newline at end of file + .dragger { + width: 18px; + height: 100%; + display: flex; + justify-content: space-evenly; + } + + .dragger-line { + width: 2px; + height: 100%; + background-color: black; + } +} + +.button-dropdown-wrapper { + display: flex; + align-content: center; + + &:hover { + background-color: black; + } +} + +.buttonSettings-dropdown { + + &.ProseMirror-menu-dropdown { + width: 10px; + height: 25px; + margin: 0; + padding: 0 2px; + background-color: #323232; + text-align: center; + + &:after { + border-top: 4px solid white; + right: 2px; + } + + &:hover { + background-color: black; + } + } + + &.ProseMirror-menu-dropdown-menu { + min-width: 150px; + left: -27px; + top: 31px; + background-color: #323232; + border: 1px solid #4d4d4d; + color: $light-color-secondary; + // border: none; + // border: 1px solid $light-color-secondary; + border-radius: 0 6px 6px 6px; + padding: 3px; + box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.25); + + .ProseMirror-menu-dropdown-item{ + cursor: default; + + &:last-child { + border-bottom: none; + } + + &:hover { + background-color: #323232; + } + + .button-setting, .button-setting-disabled { + padding: 2px; + border-radius: 2px; + } + + .button-setting:hover { + cursor: pointer; + background-color: black; + } + + .separated-button { + border-top: 1px solid $light-color-secondary; + padding-top: 6px; + } + + input { + color: black; + border: none; + border-radius: 1px; + padding: 3px; + } + + button { + padding: 6px; + background-color: #323232; + border: 1px solid black; + border-radius: 1px; + + &:hover { + background-color: black; + } + } + } + + + } +} + +.colorPicker-wrapper { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + margin-top: 3px; + margin-left: -3px; + width: calc(100% + 6px); +} + +button.colorPicker { + width: 20px; + height: 20px; + border-radius: 15px !important; + margin: 3px; + border: none !important; + + &.active { + border: 2px solid white !important; + } +}
\ No newline at end of file diff --git a/src/client/util/TooltipTextMenu.tsx b/src/client/util/TooltipTextMenu.tsx index 38471a955..5136089b3 100644 --- a/src/client/util/TooltipTextMenu.tsx +++ b/src/client/util/TooltipTextMenu.tsx @@ -1,6 +1,4 @@ -import { library } from '@fortawesome/fontawesome-svg-core'; -import { faListUl } from '@fortawesome/free-solid-svg-icons'; -import { action, observable } from "mobx"; +import { action } from "mobx"; import { Dropdown, icons, MenuItem } from "prosemirror-menu"; //no import css import { Mark, MarkType, Node as ProsNode, NodeType, ResolvedPos, Schema } from "prosemirror-model"; import { wrapInList } from 'prosemirror-schema-list'; @@ -20,97 +18,100 @@ import "./TooltipTextMenu.scss"; import { Cast, NumCast, StrCast } from '../../new_fields/Types'; import { updateBullets } from './ProsemirrorExampleTransfer'; import { DocumentDecorations } from '../views/DocumentDecorations'; +import { SelectionManager } from './SelectionManager'; +import { PastelSchemaPalette, DarkPastelSchemaPalette } from '../../new_fields/SchemaHeaderField'; const { toggleMark, setBlockType } = require("prosemirror-commands"); const { openPrompt, TextField } = require("./ProsemirrorCopy/prompt.js"); //appears above a selection of text in a RichTextBox to give user options such as Bold, Italics, etc. export class TooltipTextMenu { - public tooltip: HTMLElement; + public static Toolbar: HTMLDivElement | undefined; + + // editor state properties private view: EditorView; private editorProps: FieldViewProps & FormattedTextBoxProps | undefined; - private listTypes: (NodeType | any)[]; - private fontSizes: Mark[] = []; + private fontStyles: Mark[] = []; - private listTypeToIcon: Map<NodeType | any, string>; - //private link: HTMLAnchorElement; - private wrapper: HTMLDivElement; - private extras: HTMLDivElement; + private fontSizes: Mark[] = []; + private listTypes: (NodeType | any)[] = []; + private listTypeToIcon: Map<NodeType | any, string> = new Map(); + private _activeMarks: Mark[] = []; + private _marksToDoms: Map<Mark, HTMLSpanElement> = new Map(); + private _collapsed: boolean = false; + // editor doms + public tooltip: HTMLElement = document.createElement("div"); + private wrapper: HTMLDivElement = document.createElement("div"); + + // editor button doms + private colorDom?: Node; + private colorDropdownDom?: Node; + private highlightDom?: Node; + private highlightDropdownDom?: Node; private linkEditor?: HTMLDivElement; private linkText?: HTMLDivElement; private linkDrag?: HTMLImageElement; - //dropdown doms + private _linkDropdownDom?: Node; + private _brushdom?: Node; + private _brushDropdownDom?: Node; private fontSizeDom?: Node; private fontStyleDom?: Node; private listTypeBtnDom?: Node; + private basicTools?: HTMLElement; - private _activeMarks: Mark[] = []; - - private _collapseBtn?: MenuItem; - - private _brushMarks?: Set<Mark>; - private _brushIsEmpty: boolean = true; - private _brushdom?: Node; - - private _marksToDoms: Map<Mark, HTMLSpanElement> = new Map(); - - private _collapsed: boolean = false; constructor(view: EditorView) { this.view = view; - this.wrapper = document.createElement("div"); - this.tooltip = document.createElement("div"); - this.extras = document.createElement("div"); - - this.wrapper.appendChild(this.extras); - this.wrapper.appendChild(this.tooltip); + // initialize the tooltip -- sets this.tooltip + this.initTooltip(view); - this.tooltip.className = "tooltipMenu"; - this.extras.className = "tooltipExtras"; + // initialize the wrapper + this.wrapper = document.createElement("div"); this.wrapper.className = "wrapper"; + this.wrapper.appendChild(this.tooltip); - const dragger = document.createElement("span"); - dragger.className = "dragger"; - dragger.textContent = ">>>"; - this.extras.appendChild(dragger); + // initialize the dragger -- appends it to the wrapper + this.createDragger(); - this.dragElement(dragger); + TooltipTextMenu.Toolbar = this.wrapper; + } - // this.createCollapse(); - // if (this._collapseBtn) { - // this.tooltip.appendChild(this._collapseBtn.render(this.view).dom); - // } - //add the div which is the tooltip - //view.dom.parentNode!.parentNode!.appendChild(this.tooltip); + private async initTooltip(view: EditorView) { + // initialize tooltip dom + this.tooltip = document.createElement("div"); + this.tooltip.className = "tooltipMenu"; + this.basicTools = document.createElement("div"); + this.basicTools.className = "basic-tools"; - //add additional icons - library.add(faListUl); - //add the buttons to the tooltip + // init buttons to the tooltip -- paths to svgs are obtained from fontawesome let items = [ - { command: toggleMark(schema.marks.strong), dom: this.icon("B", "strong", "Bold") }, - { command: toggleMark(schema.marks.em), dom: this.icon("i", "em", "Italic") }, - { command: toggleMark(schema.marks.underline), dom: this.icon("U", "underline", "Underline") }, - { command: toggleMark(schema.marks.strikethrough), dom: this.icon("S", "strikethrough", "Strikethrough") }, - { command: toggleMark(schema.marks.superscript), dom: this.icon("s", "superscript", "Superscript") }, - { command: toggleMark(schema.marks.subscript), dom: this.icon("s", "subscript", "Subscript") }, - { command: toggleMark(schema.marks.highlight), dom: this.icon("H", 'blue', 'Blue') } + { command: toggleMark(schema.marks.strong), dom: this.svgIcon("strong", "Bold", "M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z") }, + { command: toggleMark(schema.marks.em), dom: this.svgIcon("em", "Italic", "M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z") }, + { command: toggleMark(schema.marks.underline), dom: this.svgIcon("underline", "Underline", "M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z") }, + { command: toggleMark(schema.marks.strikethrough), dom: this.svgIcon("strikethrough", "Strikethrough", "M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z") }, + { command: toggleMark(schema.marks.superscript), dom: this.svgIcon("superscript", "Superscript", "M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z") }, + { command: toggleMark(schema.marks.subscript), dom: this.svgIcon("subscript", "Subscript", "M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z") }, + // { command: toggleMark(schema.marks.highlight), dom: this.icon("H", 'blue', 'Blue') } ]; + // add menu items this._marksToDoms = new Map(); - //add menu items items.forEach(({ dom, command }) => { this.tooltip.appendChild(dom); switch (dom.title) { case "Bold": this._marksToDoms.set(schema.mark(schema.marks.strong), dom); + this.basicTools && this.basicTools.appendChild(dom.cloneNode(true)); break; case "Italic": this._marksToDoms.set(schema.mark(schema.marks.em), dom); + this.basicTools && this.basicTools.appendChild(dom.cloneNode(true)); break; case "Underline": this._marksToDoms.set(schema.mark(schema.marks.underline), dom); + this.basicTools && this.basicTools.appendChild(dom.cloneNode(true)); break; } @@ -129,10 +130,50 @@ export class TooltipTextMenu { }); }); + + // highlight menu + this.highlightDom = this.createHighlightTool().render(this.view).dom; + this.highlightDropdownDom = this.createHighlightDropdown().render(this.view).dom; + this.tooltip.appendChild(this.highlightDom); + this.tooltip.appendChild(this.highlightDropdownDom); + + // color menu + this.colorDom = this.createColorTool().render(this.view).dom; + this.colorDropdownDom = this.createColorDropdown().render(this.view).dom; + this.tooltip.appendChild(this.colorDom); + this.tooltip.appendChild(this.colorDropdownDom); + + // link menu this.updateLinkMenu(); + let dropdown = await this.createLinkDropdown(); + this._linkDropdownDom = dropdown.render(this.view).dom; + this.tooltip.appendChild(this._linkDropdownDom); + + // list of font styles + this.initFontStyles(); + + // font sizes + this.initFontSizes(); + + // list types + this.initListTypes(); + + // init brush tool + this._brushdom = this.createBrush().render(this.view).dom; + this.tooltip.appendChild(this._brushdom); + this._brushDropdownDom = this.createBrushDropdown().render(this.view).dom; + this.tooltip.appendChild(this._brushDropdownDom); + + // star + this.tooltip.appendChild(this.createStar().render(this.view).dom); + + // list types dropdown + this.updateListItemDropdown(":", this.listTypeBtnDom); + await this.updateFromDash(view, undefined, undefined); + } - //list of font styles + initFontStyles() { this.fontStyles.push(schema.marks.pFontFamily.create({ family: "Times New Roman" })); this.fontStyles.push(schema.marks.pFontFamily.create({ family: "Arial" })); this.fontStyles.push(schema.marks.pFontFamily.create({ family: "Georgia" })); @@ -140,8 +181,9 @@ export class TooltipTextMenu { this.fontStyles.push(schema.marks.pFontFamily.create({ family: "Tahoma" })); this.fontStyles.push(schema.marks.pFontFamily.create({ family: "Impact" })); this.fontStyles.push(schema.marks.pFontFamily.create({ family: "Crimson Text" })); + } - //font sizes + initFontSizes() { this.fontSizes.push(schema.marks.pFontSize.create({ fontSize: 10 })); this.fontSizes.push(schema.marks.pFontSize.create({ fontSize: 12 })); this.fontSizes.push(schema.marks.pFontSize.create({ fontSize: 14 })); @@ -152,8 +194,9 @@ export class TooltipTextMenu { this.fontSizes.push(schema.marks.pFontSize.create({ fontSize: 32 })); this.fontSizes.push(schema.marks.pFontSize.create({ fontSize: 48 })); this.fontSizes.push(schema.marks.pFontSize.create({ fontSize: 72 })); + } - //list types + initListTypes() { this.listTypeToIcon = new Map(); //this.listTypeToIcon.set(schema.nodes.bullet_list, ":"); this.listTypeToIcon.set(schema.nodes.ordered_list.create({ mapStyle: "bullet" }), ":"); @@ -161,21 +204,91 @@ export class TooltipTextMenu { this.listTypeToIcon.set(schema.nodes.ordered_list.create({ mapStyle: "multi" }), "1.A)"); // this.listTypeToIcon.set(schema.nodes.bullet_list, "⬜"); this.listTypes = Array.from(this.listTypeToIcon.keys()); + } - //custom tools - // this.tooltip.appendChild(this.createLink().render(this.view).dom); + // creates dragger element that allows dragging and collapsing (on double click) + // of editor and appends it to the wrapper + createDragger() { + let draggerWrapper = document.createElement("div"); + draggerWrapper.className = "dragger-wrapper"; - this._brushdom = this.createBrush().render(this.view).dom; - this.tooltip.appendChild(this._brushdom); - this.tooltip.appendChild(this.createLink().render(this.view).dom); - this.tooltip.appendChild(this.createStar().render(this.view).dom); + let dragger = document.createElement("div"); + dragger.className = "dragger"; - this.updateListItemDropdown(":", this.listTypeBtnDom); + let line1 = document.createElement("span"); + line1.className = "dragger-line"; + let line2 = document.createElement("span"); + line2.className = "dragger-line"; + let line3 = document.createElement("span"); + line3.className = "dragger-line"; - this.updateFromDash(view, undefined, undefined); - TooltipTextMenu.Toolbar = this.wrapper; + dragger.appendChild(line1); + dragger.appendChild(line2); + dragger.appendChild(line3); + + draggerWrapper.appendChild(dragger); + + this.wrapper.appendChild(draggerWrapper); + this.dragElement(draggerWrapper); + } + + dragElement(elmnt: HTMLElement) { + var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; + if (elmnt) { + // if present, the header is where you move the DIV from: + elmnt.onpointerdown = dragMouseDown; + elmnt.ondblclick = onClick; + } + const self = this; + + function dragMouseDown(e: PointerEvent) { + e = e || window.event; + //e.preventDefault(); + // get the mouse cursor position at startup: + pos3 = e.clientX; + pos4 = e.clientY; + document.onpointerup = closeDragElement; + // call a function whenever the cursor moves: + document.onpointermove = elementDrag; + } + + function onClick(e: MouseEvent) { + self._collapsed = !self._collapsed; + const children = self.wrapper.childNodes; + if (self._collapsed && children.length > 0) { + self.wrapper.removeChild(self.tooltip); + self.basicTools && self.wrapper.prepend(self.basicTools); + } + else { + self.wrapper.prepend(self.tooltip); + self.basicTools && self.wrapper.removeChild(self.basicTools); + } + } + + function elementDrag(e: PointerEvent) { + e = e || window.event; + //e.preventDefault(); + // calculate the new cursor position: + pos1 = pos3 - e.clientX; + pos2 = pos4 - e.clientY; + pos3 = e.clientX; + pos4 = e.clientY; + // set the element's new position: + // elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; + // elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; + + self.wrapper.style.top = (self.wrapper.offsetTop - pos2) + "px"; + self.wrapper.style.left = (self.wrapper.offsetLeft - pos1) + "px"; + } + + function closeDragElement() { + // stop moving when mouse button is released: + document.onpointerup = null; + document.onpointermove = null; + //self.highlightSearchTerms(self.state, ["hello"]); + //FormattedTextBox.Instance.unhighlightSearchTerms(); + } } - public static Toolbar: HTMLDivElement | undefined; //label of dropdown will change to given label updateFontSizeDropdown(label: string) { @@ -187,7 +300,7 @@ export class TooltipTextMenu { let newfontSizeDom = (new Dropdown(fontSizeBtns, { label: label, - css: "color:black; min-width: 60px; padding-left: 5px; margin-right: 0;" + css: "color:black; min-width: 60px;" }) as MenuItem).render(this.view).dom; if (this.fontSizeDom) { this.tooltip.replaceChild(newfontSizeDom, this.fontSizeDom); } else { @@ -206,25 +319,20 @@ export class TooltipTextMenu { let newfontStyleDom = (new Dropdown(fontBtns, { label: label, - css: "color:black; width: 125px; margin-left: -3px; padding-left: 2px;" + css: "color:black; width: 125px;" }) as MenuItem).render(this.view).dom; if (this.fontStyleDom) { this.tooltip.replaceChild(newfontStyleDom, this.fontStyleDom); } else { this.tooltip.appendChild(newfontStyleDom); } this.fontStyleDom = newfontStyleDom; - } updateLinkMenu() { if (!this.linkEditor || !this.linkText) { this.linkEditor = document.createElement("div"); this.linkEditor.className = "ProseMirror-icon menuicon"; - this.linkEditor.style.color = "black"; this.linkText = document.createElement("div"); - this.linkText.style.cssFloat = "left"; - this.linkText.style.marginRight = "5px"; - this.linkText.style.marginLeft = "5px"; this.linkText.setAttribute("contenteditable", "true"); this.linkText.style.whiteSpace = "nowrap"; this.linkText.style.width = "150px"; @@ -263,9 +371,7 @@ export class TooltipTextMenu { this.linkDrag.style.width = "15px"; this.linkDrag.style.height = "15px"; this.linkDrag.title = "Drag to create link"; - this.linkDrag.style.color = "black"; - this.linkDrag.style.background = "black"; - this.linkDrag.style.cssFloat = "left"; + this.linkDrag.id = "link-drag"; this.linkDrag.onpointerdown = (e: PointerEvent) => { if (!this.editorProps) return; let dragData = new DragManager.LinkDragData(this.editorProps.Document); @@ -311,63 +417,124 @@ export class TooltipTextMenu { e.preventDefault(); } }; - // this.tooltip.appendChild(this.linkEditor); } - dragElement(elmnt: HTMLElement) { - var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; - if (elmnt) { - // if present, the header is where you move the DIV from: - elmnt.onpointerdown = dragMouseDown; - elmnt.ondblclick = onClick; + async getTextLinkTargetTitle() { + let node = this.view.state.selection.$from.nodeAfter; + let link = node && node.marks.find(m => m.type.name === "link"); + if (link) { + let href = link.attrs.href; + if (href) { + if (href.indexOf(Utils.prepend("/doc/")) === 0) { + const linkclicked = href.replace(Utils.prepend("/doc/"), "").split("?")[0]; + if (linkclicked) { + let linkDoc = await DocServer.GetRefField(linkclicked); + if (linkDoc instanceof Doc) { + let anchor1 = await Cast(linkDoc.anchor1, Doc); + let anchor2 = await Cast(linkDoc.anchor2, Doc); + let currentDoc = SelectionManager.SelectedDocuments().length && SelectionManager.SelectedDocuments()[0].props.Document; + if (currentDoc && anchor1 && anchor2) { + if (Doc.AreProtosEqual(currentDoc, anchor1)) { + return StrCast(anchor2.title); + } + if (Doc.AreProtosEqual(currentDoc, anchor2)) { + return StrCast(anchor1.title); + } + } + } + } + } else { + return href; + } + } else { + return link.attrs.title; + } } - const self = this; + } - function dragMouseDown(e: PointerEvent) { - e = e || window.event; - //e.preventDefault(); - // get the mouse cursor position at startup: - pos3 = e.clientX; - pos4 = e.clientY; - document.onpointerup = closeDragElement; - // call a function whenever the cursor moves: - document.onpointermove = elementDrag; - } + async createLinkDropdown() { + let targetTitle = await this.getTextLinkTargetTitle(); + let input = document.createElement("input"); - function onClick(e: MouseEvent) { - self._collapsed = !self._collapsed; - const children = self.wrapper.childNodes; - if (self._collapsed && children.length > 1) { - self.wrapper.removeChild(self.tooltip); + // menu item for input for hyperlink url + // TODO: integrate search to allow users to search for a doc to link to + let linkInfo = new MenuItem({ + title: "", + execEvent: "", + class: "button-setting-disabled", + css: "", + render() { + let p = document.createElement("p"); + p.textContent = "Linked to:"; + + input.type = "text"; + input.placeholder = "Enter URL"; + if (targetTitle) input.value = targetTitle; + input.onclick = (e: MouseEvent) => { + input.select(); + input.focus(); + }; + + let div = document.createElement("div"); + div.appendChild(p); + div.appendChild(input); + return div; + }, + enable() { return false; }, + run(p1, p2, p3, event) { + event.stopPropagation(); } - else { - self.wrapper.appendChild(self.tooltip); + }); + + // menu item to update/apply the hyperlink to the selected text + let linkApply = new MenuItem({ + title: "", + execEvent: "", + class: "", + css: "", + render() { + let button = document.createElement("button"); + button.className = "link-url-button"; + button.textContent = "Apply hyperlink"; + return button; + }, + enable() { return false; }, + run: (state, dispatch, view, event) => { + event.stopPropagation(); + this.makeLinkToURL(input.value, "onRight"); } - } + }); - function elementDrag(e: PointerEvent) { - e = e || window.event; - //e.preventDefault(); - // calculate the new cursor position: - pos1 = pos3 - e.clientX; - pos2 = pos4 - e.clientY; - pos3 = e.clientX; - pos4 = e.clientY; - // set the element's new position: - // elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; - // elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; + // menu item to remove the link + // TODO: allow this to be undoable + let self = this; + let deleteLink = new MenuItem({ + title: "Delete link", + execEvent: "", + class: "separated-button", + css: "", + render() { + let button = document.createElement("button"); + button.textContent = "Remove link"; + + let wrapper = document.createElement("div"); + wrapper.appendChild(button); + return wrapper; + }, + enable() { return true; }, + async run() { + self.deleteLink(); + // update link dropdown + let dropdown = await self.createLinkDropdown(); + let newLinkDropdowndom = dropdown.render(self.view).dom; + self._linkDropdownDom && self.tooltip.replaceChild(newLinkDropdowndom, self._linkDropdownDom); + self._linkDropdownDom = newLinkDropdowndom; + } + }); - self.wrapper.style.top = (self.wrapper.offsetTop - pos2) + "px"; - self.wrapper.style.left = (self.wrapper.offsetLeft - pos1) + "px"; - } - function closeDragElement() { - // stop moving when mouse button is released: - document.onpointerup = null; - document.onpointermove = null; - //self.highlightSearchTerms(self.state, ["hello"]); - //FormattedTextBox.Instance.unhighlightSearchTerms(); - } + let linkDropdown = new Dropdown(targetTitle ? [linkInfo, linkApply, deleteLink] : [linkInfo, linkApply], { class: "buttonSettings-dropdown" }) as MenuItem; + return linkDropdown; } // makeLinkWithState = (state: EditorState, target: string, location: string) => { @@ -385,6 +552,15 @@ export class TooltipTextMenu { return ""; } + makeLinkToURL = (target: String, lcoation: string) => { + let node = this.view.state.selection.$from.nodeAfter; + let link = this.view.state.schema.mark(this.view.state.schema.marks.link, { href: target, location: location }); + this.view.dispatch(this.view.state.tr.removeMark(this.view.state.selection.from, this.view.state.selection.to, this.view.state.schema.marks.link)); + this.view.dispatch(this.view.state.tr.addMark(this.view.state.selection.from, this.view.state.selection.to, link)); + node = this.view.state.selection.$from.nodeAfter; + link = node && node.marks.find(m => m.type.name === "link"); + } + deleteLink = () => { let node = this.view.state.selection.$from.nodeAfter; let link = node && node.marks.find(m => m.type === this.view.state.schema.marks.link); @@ -402,19 +578,69 @@ export class TooltipTextMenu { } } } + } - + deleteLinkItem() { + const icon = { + height: 16, width: 16, + path: "M15.898,4.045c-0.271-0.272-0.713-0.272-0.986,0l-4.71,4.711L5.493,4.045c-0.272-0.272-0.714-0.272-0.986,0s-0.272,0.714,0,0.986l4.709,4.711l-4.71,4.711c-0.272,0.271-0.272,0.713,0,0.986c0.136,0.136,0.314,0.203,0.492,0.203c0.179,0,0.357-0.067,0.493-0.203l4.711-4.711l4.71,4.711c0.137,0.136,0.314,0.203,0.494,0.203c0.178,0,0.355-0.067,0.492-0.203c0.273-0.273,0.273-0.715,0-0.986l-4.711-4.711l4.711-4.711C16.172,4.759,16.172,4.317,15.898,4.045z" + }; + return new MenuItem({ + title: "Delete Link", + label: "X", + icon: icon, + css: "color: red", + class: "summarize", + execEvent: "", + run: (state, dispatch) => { + this.deleteLink(); + } + }); } - public static insertStar(state: EditorState<any>, dispatch: any) { - if (state.selection.empty) return false; - let mark = state.schema.marks.highlight.create(); - let tr = state.tr; - tr.addMark(state.selection.from, state.selection.to, mark); - let content = tr.selection.content(); - let newNode = state.schema.nodes.star.create({ visibility: false, text: content, textslice: content.toJSON() }); - dispatch && dispatch(tr.replaceSelectionWith(newNode).removeMark(tr.selection.from - 1, tr.selection.from, mark)); - return true; + createLink() { + let markType = schema.marks.link; + return new MenuItem({ + title: "Add or remove link", + label: "Add or remove link", + execEvent: "", + icon: icons.link, + css: "color:white;", + class: "menuicon", + enable(state) { return !state.selection.empty; }, + run: (state, dispatch, view) => { + // to remove link + let curLink = ""; + if (this.markActive(state, markType)) { + + let { from, $from, to, empty } = state.selection; + let node = state.doc.nodeAt(from); + node && node.marks.map(m => { + m.type === markType && (curLink = m.attrs.href); + }); + //toggleMark(markType)(state, dispatch); + //return true; + } + // to create link + openPrompt({ + title: "Create a link", + fields: { + href: new TextField({ + value: curLink, + label: "Link Target", + required: true + }), + title: new TextField({ label: "Title" }) + }, + callback(attrs: any) { + toggleMark(markType, attrs)(view.state, view.dispatch); + view.focus(); + }, + flyout_top: 0, + flyout_left: 0 + }); + } + }); } //will display a remove-list-type button if selection is in list, otherwise will show list type dropdown @@ -439,6 +665,369 @@ export class TooltipTextMenu { this.tooltip.appendChild(listTypeBtn); return listTypeBtn; } + + createStar() { + return new MenuItem({ + title: "Summarize", + label: "Summarize", + icon: icons.join, + css: "color:white;", + class: "menuicon", + execEvent: "", + run: (state, dispatch) => { + TooltipTextMenu.insertStar(this.view.state, this.view.dispatch); + } + + }); + } + + public static insertStar(state: EditorState<any>, dispatch: any) { + if (state.selection.empty) return false; + let mark = state.schema.marks.highlight.create(); + let tr = state.tr; + tr.addMark(state.selection.from, state.selection.to, mark); + let content = tr.selection.content(); + let newNode = state.schema.nodes.star.create({ visibility: false, text: content, textslice: content.toJSON() }); + dispatch && dispatch(tr.replaceSelectionWith(newNode).removeMark(tr.selection.from - 1, tr.selection.from, mark)); + return true; + } + + public static insertComment(state: EditorState<any>, dispatch: any) { + if (state.selection.empty) return false; + let mark = state.schema.marks.highlight.create(); + let tr = state.tr; + tr.addMark(state.selection.from, state.selection.to, mark); + let content = tr.selection.content(); + let newNode = state.schema.nodes.star.create({ visibility: false, text: content, textslice: content.toJSON() }); + dispatch && dispatch(tr.replaceSelectionWith(newNode).removeMark(tr.selection.from - 1, tr.selection.from, mark)); + return true; + } + + createHighlightTool() { + return new MenuItem({ + title: "Highlight", + css: "color:white;", + class: "menuicon", + execEvent: "", + render() { + let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("viewBox", "-100 -100 650 650"); + let path = document.createElementNS('http://www.w3.org/2000/svg', "path"); + path.setAttributeNS(null, "d", "M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z"); + svg.appendChild(path); + + let color = document.createElement("div"); + color.className = "buttonColor"; + color.style.backgroundColor = TooltipTextMenuManager.Instance.highlight.toString(); + + let wrapper = document.createElement("div"); + wrapper.id = "colorPicker"; + wrapper.appendChild(svg); + wrapper.appendChild(color); + return wrapper; + }, + run: (state, dispatch) => { + TooltipTextMenu.insertHighlight(TooltipTextMenuManager.Instance.highlight, this.view.state, this.view.dispatch); + } + }); + } + + public static insertHighlight(color: String, state: EditorState<any>, dispatch: any) { + if (state.selection.empty) return false; + + let highlightMark = state.schema.mark(state.schema.marks.marker, { highlight: color }); + dispatch(state.tr.addMark(state.selection.from, state.selection.to, highlightMark)); + } + + createHighlightDropdown() { + // menu item for color picker + let self = this; + let colors = new MenuItem({ + title: "", + execEvent: "", + class: "button-setting-disabled", + css: "", + render() { + let p = document.createElement("p"); + p.textContent = "Change highlight:"; + + let colorsWrapper = document.createElement("div"); + colorsWrapper.className = "colorPicker-wrapper"; + + let colors = [ + PastelSchemaPalette.get("pink2"), + PastelSchemaPalette.get("purple4"), + PastelSchemaPalette.get("bluegreen1"), + PastelSchemaPalette.get("yellow4"), + PastelSchemaPalette.get("red2"), + PastelSchemaPalette.get("bluegreen7"), + PastelSchemaPalette.get("bluegreen5"), + PastelSchemaPalette.get("orange1"), + "white", + "transparent" + ]; + + colors.forEach(color => { + let button = document.createElement("button"); + button.className = color === TooltipTextMenuManager.Instance.highlight ? "colorPicker active" : "colorPicker"; + if (color) { + button.style.backgroundColor = color; + button.textContent = color === "transparent" ? "X" : ""; + button.onclick = e => { + TooltipTextMenuManager.Instance.highlight = color; + + TooltipTextMenu.insertHighlight(TooltipTextMenuManager.Instance.highlight, self.view.state, self.view.dispatch); + + // update color menu + let highlightDom = self.createHighlightTool().render(self.view).dom; + let highlightDropdownDom = self.createHighlightDropdown().render(self.view).dom; + self.highlightDom && self.tooltip.replaceChild(highlightDom, self.highlightDom); + self.highlightDropdownDom && self.tooltip.replaceChild(highlightDropdownDom, self.highlightDropdownDom); + self.highlightDom = highlightDom; + self.highlightDropdownDom = highlightDropdownDom; + }; + } + colorsWrapper.appendChild(button); + }); + + let div = document.createElement("div"); + div.appendChild(p); + div.appendChild(colorsWrapper); + return div; + }, + enable() { return false; }, + run(p1, p2, p3, event) { + event.stopPropagation(); + } + }); + + let colorDropdown = new Dropdown([colors], { class: "buttonSettings-dropdown" }) as MenuItem; + return colorDropdown; + } + + createColorTool() { + return new MenuItem({ + title: "Color", + css: "color:white;", + class: "menuicon", + execEvent: "", + render() { + let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("viewBox", "-100 -100 650 650"); + let path = document.createElementNS('http://www.w3.org/2000/svg', "path"); + path.setAttributeNS(null, "d", "M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"); + svg.appendChild(path); + + let color = document.createElement("div"); + color.className = "buttonColor"; + color.style.backgroundColor = TooltipTextMenuManager.Instance.color.toString(); + + let wrapper = document.createElement("div"); + wrapper.id = "colorPicker"; + wrapper.appendChild(svg); + wrapper.appendChild(color); + return wrapper; + }, + run: (state, dispatch) => { + TooltipTextMenu.insertColor(TooltipTextMenuManager.Instance.color, this.view.state, this.view.dispatch); + } + }); + } + + public static insertColor(color: String, state: EditorState<any>, dispatch: any) { + if (state.selection.empty) return false; + + let colorMark = state.schema.mark(state.schema.marks.color, { color: color }); + dispatch(state.tr.addMark(state.selection.from, state.selection.to, colorMark)); + } + + createColorDropdown() { + // menu item for color picker + let self = this; + let colors = new MenuItem({ + title: "", + execEvent: "", + class: "button-setting-disabled", + css: "", + render() { + let p = document.createElement("p"); + p.textContent = "Change color:"; + + let colorsWrapper = document.createElement("div"); + colorsWrapper.className = "colorPicker-wrapper"; + + let colors = [ + DarkPastelSchemaPalette.get("pink2"), + DarkPastelSchemaPalette.get("purple4"), + DarkPastelSchemaPalette.get("bluegreen1"), + DarkPastelSchemaPalette.get("yellow4"), + DarkPastelSchemaPalette.get("red2"), + DarkPastelSchemaPalette.get("bluegreen7"), + DarkPastelSchemaPalette.get("bluegreen5"), + DarkPastelSchemaPalette.get("orange1"), + "#757472", + "#000" + ]; + + colors.forEach(color => { + let button = document.createElement("button"); + button.className = color === TooltipTextMenuManager.Instance.color ? "colorPicker active" : "colorPicker"; + if (color) { + button.style.backgroundColor = color; + button.onclick = e => { + TooltipTextMenuManager.Instance.color = color; + + TooltipTextMenu.insertColor(TooltipTextMenuManager.Instance.color, self.view.state, self.view.dispatch); + + // update color menu + let colorDom = self.createColorTool().render(self.view).dom; + let colorDropdownDom = self.createColorDropdown().render(self.view).dom; + self.colorDom && self.tooltip.replaceChild(colorDom, self.colorDom); + self.colorDropdownDom && self.tooltip.replaceChild(colorDropdownDom, self.colorDropdownDom); + self.colorDom = colorDom; + self.colorDropdownDom = colorDropdownDom; + }; + } + colorsWrapper.appendChild(button); + }); + + let div = document.createElement("div"); + div.appendChild(p); + div.appendChild(colorsWrapper); + return div; + }, + enable() { return false; }, + run(p1, p2, p3, event) { + event.stopPropagation(); + } + }); + + let colorDropdown = new Dropdown([colors], { class: "buttonSettings-dropdown" }) as MenuItem; + return colorDropdown; + } + + createBrush(active: boolean = false) { + const icon = { + height: 32, width: 32, + path: "M30.828 1.172c-1.562-1.562-4.095-1.562-5.657 0l-5.379 5.379-3.793-3.793-4.243 4.243 3.326 3.326-14.754 14.754c-0.252 0.252-0.358 0.592-0.322 0.921h-0.008v5c0 0.552 0.448 1 1 1h5c0 0 0.083 0 0.125 0 0.288 0 0.576-0.11 0.795-0.329l14.754-14.754 3.326 3.326 4.243-4.243-3.793-3.793 5.379-5.379c1.562-1.562 1.562-4.095 0-5.657zM5.409 30h-3.409v-3.409l14.674-14.674 3.409 3.409-14.674 14.674z" + }; + let self = this; + return new MenuItem({ + title: "Brush tool", + label: "Brush tool", + icon: icon, + css: "color:white;", + class: active ? "menuicon-active" : "menuicon", + execEvent: "", + run: (state, dispatch) => { + this.brush_function(state, dispatch); + + // update dropdown with marks + let newBrushDropdowndom = self.createBrushDropdown().render(self.view).dom; + self._brushDropdownDom && self.tooltip.replaceChild(newBrushDropdowndom, self._brushDropdownDom); + self._brushDropdownDom = newBrushDropdowndom; + }, + active: (state) => { + return true; + } + }); + } + + brush_function(state: EditorState<any>, dispatch: any) { + if (TooltipTextMenuManager.Instance._brushIsEmpty) { + const selected_marks = this.getMarksInSelection(this.view.state); + if (this._brushdom) { + if (selected_marks.size >= 0) { + TooltipTextMenuManager.Instance._brushMarks = selected_marks; + const newbrush = this.createBrush(true).render(this.view).dom; + this.tooltip.replaceChild(newbrush, this._brushdom); + this._brushdom = newbrush; + TooltipTextMenuManager.Instance._brushIsEmpty = !TooltipTextMenuManager.Instance._brushIsEmpty; + } + } + } + else { + let { from, to, $from } = this.view.state.selection; + if (this._brushdom) { + if (!this.view.state.selection.empty && $from && $from.nodeAfter) { + if (TooltipTextMenuManager.Instance._brushMarks && to - from > 0) { + this.view.dispatch(this.view.state.tr.removeMark(from, to)); + Array.from(TooltipTextMenuManager.Instance._brushMarks).filter(m => m.type !== schema.marks.user_mark).forEach((mark: Mark) => { + const markType = mark.type; + this.changeToMarkInGroup(markType, this.view, []); + }); + } + } + else { + const newbrush = this.createBrush(false).render(this.view).dom; + this.tooltip.replaceChild(newbrush, this._brushdom); + this._brushdom = newbrush; + TooltipTextMenuManager.Instance._brushIsEmpty = !TooltipTextMenuManager.Instance._brushIsEmpty; + } + } + } + } + + createBrushDropdown(active: boolean = false) { + let label = "Stored marks: "; + if (TooltipTextMenuManager.Instance._brushMarks && TooltipTextMenuManager.Instance._brushMarks.size > 0) { + TooltipTextMenuManager.Instance._brushMarks.forEach((mark: Mark) => { + const markType = mark.type; + label += markType.name; + label += ", "; + }); + label = label.substring(0, label.length - 2); + } else { + label = "No marks are currently stored"; + } + + + let brushInfo = new MenuItem({ + title: "", + label: label, + execEvent: "", + class: "button-setting-disabled", + css: "", + enable() { return false; }, + run(p1, p2, p3, event) { + event.stopPropagation(); + } + }); + + let self = this; + let clearBrush = new MenuItem({ + title: "Clear brush", + execEvent: "", + class: "separated-button", + css: "", + render() { + let button = document.createElement("button"); + button.textContent = "Clear brush"; + + let wrapper = document.createElement("div"); + wrapper.appendChild(button); + return wrapper; + }, + enable() { return true; }, + run() { + TooltipTextMenuManager.Instance._brushIsEmpty = true; + TooltipTextMenuManager.Instance._brushMarks = new Set(); + + // update brush tool + // TODO: this probably isn't very clean + let newBrushdom = self.createBrush().render(self.view).dom; + self._brushdom && self.tooltip.replaceChild(newBrushdom, self._brushdom); + self._brushdom = newBrushdom; + let newBrushDropdowndom = self.createBrushDropdown().render(self.view).dom; + self._brushDropdownDom && self.tooltip.replaceChild(newBrushDropdowndom, self._brushDropdownDom); + self._brushDropdownDom = newBrushDropdowndom; + } + }); + + let hasMarks = TooltipTextMenuManager.Instance._brushMarks && TooltipTextMenuManager.Instance._brushMarks.size > 0; + let brushDom = new Dropdown(hasMarks ? [brushInfo, clearBrush] : [brushInfo], { class: "buttonSettings-dropdown" }) as MenuItem; + return brushDom; + } //for a specific grouping of marks (passed in), remove all and apply the passed-in one to the selected textchangeToMarkInGroup = (markType: MarkType | undefined, view: EditorView, fontMarks: MarkType[]) => { changeToMarkInGroup = (markType: MarkType | undefined, view: EditorView, fontMarks: MarkType[]) => { let { $cursor, ranges } = view.state.selection as TextSelection; @@ -594,7 +1183,7 @@ export class TooltipTextMenu { title: "", label: label, execEvent: "", - class: "menuicon", + class: "dropdown-item", css: css, enable() { return true; }, run() { @@ -609,7 +1198,7 @@ export class TooltipTextMenu { title: "", label: label, execEvent: "", - class: "menuicon", + class: "dropdown-item", css: css, enable() { return true; }, run() { @@ -618,187 +1207,6 @@ export class TooltipTextMenu { }); } - createStar() { - return new MenuItem({ - title: "Summarize", - label: "Summarize", - icon: icons.join, - css: "color:white;", - class: "summarize", - execEvent: "", - run: (state, dispatch) => { - TooltipTextMenu.insertStar(this.view.state, this.view.dispatch); - } - - }); - } - - deleteLinkItem() { - const icon = { - height: 16, width: 16, - path: "M15.898,4.045c-0.271-0.272-0.713-0.272-0.986,0l-4.71,4.711L5.493,4.045c-0.272-0.272-0.714-0.272-0.986,0s-0.272,0.714,0,0.986l4.709,4.711l-4.71,4.711c-0.272,0.271-0.272,0.713,0,0.986c0.136,0.136,0.314,0.203,0.492,0.203c0.179,0,0.357-0.067,0.493-0.203l4.711-4.711l4.71,4.711c0.137,0.136,0.314,0.203,0.494,0.203c0.178,0,0.355-0.067,0.492-0.203c0.273-0.273,0.273-0.715,0-0.986l-4.711-4.711l4.711-4.711C16.172,4.759,16.172,4.317,15.898,4.045z" - }; - return new MenuItem({ - title: "Delete Link", - label: "X", - icon: icon, - css: "color: red", - class: "summarize", - execEvent: "", - run: (state, dispatch) => { - this.deleteLink(); - } - }); - } - - createBrush(active: boolean = false) { - const icon = { - height: 32, width: 32, - path: "M30.828 1.172c-1.562-1.562-4.095-1.562-5.657 0l-5.379 5.379-3.793-3.793-4.243 4.243 3.326 3.326-14.754 14.754c-0.252 0.252-0.358 0.592-0.322 0.921h-0.008v5c0 0.552 0.448 1 1 1h5c0 0 0.083 0 0.125 0 0.288 0 0.576-0.11 0.795-0.329l14.754-14.754 3.326 3.326 4.243-4.243-3.793-3.793 5.379-5.379c1.562-1.562 1.562-4.095 0-5.657zM5.409 30h-3.409v-3.409l14.674-14.674 3.409 3.409-14.674 14.674z" - }; - return new MenuItem({ - title: "Brush tool", - label: "Brush tool", - icon: icon, - css: "color:white;", - class: active ? "brush-active" : "brush", - execEvent: "", - run: (state, dispatch) => { - this.brush_function(state, dispatch); - }, - active: (state) => { - return true; - } - }); - } - - // selectionchanged event handler - - brush_function(state: EditorState<any>, dispatch: any) { - if (this._brushIsEmpty) { - const selected_marks = this.getMarksInSelection(this.view.state); - if (this._brushdom) { - if (selected_marks.size >= 0) { - this._brushMarks = selected_marks; - const newbrush = this.createBrush(true).render(this.view).dom; - this.tooltip.replaceChild(newbrush, this._brushdom); - this._brushdom = newbrush; - this._brushIsEmpty = !this._brushIsEmpty; - } - } - } - else { - let { from, to, $from } = this.view.state.selection; - if (this._brushdom) { - if (!this.view.state.selection.empty && $from && $from.nodeAfter) { - if (this._brushMarks && to - from > 0) { - this.view.dispatch(this.view.state.tr.removeMark(from, to)); - Array.from(this._brushMarks).filter(m => m.type !== schema.marks.user_mark).forEach((mark: Mark) => { - const markType = mark.type; - if (mark.type === schema.marks.pFontFamily) this.changeToFontFamily(mark, this.view); - else if (mark.type === schema.marks.pFontSize) this.changeToFontSize(mark, this.view); - else this.changeToMarkInGroup(markType, this.view, []); - }); - } - } - else { - const newbrush = this.createBrush(false).render(this.view).dom; - this.tooltip.replaceChild(newbrush, this._brushdom); - this._brushdom = newbrush; - this._brushIsEmpty = !this._brushIsEmpty; - } - } - } - - - } - - createCollapse() { - this._collapseBtn = new MenuItem({ - title: "Collapse", - //label: "Collapse", - icon: icons.join, - execEvent: "", - css: "color:white;", - class: "summarize", - run: () => { - this.collapseToolTip(); - } - }); - } - - collapseToolTip() { - if (this._collapseBtn) { - if (this._collapseBtn.spec.title === "Collapse") { - // const newcollapseBtn = new MenuItem({ - // title: "Expand", - // icon: icons.join, - // execEvent: "", - // css: "color:white;", - // class: "summarize", - // run: (state, dispatch, view) => { - // this.collapseToolTip(); - // } - // }); - // this.tooltip.replaceChild(newcollapseBtn.render(this.view).dom, this._collapseBtn.render(this.view).dom); - // this._collapseBtn = newcollapseBtn; - this.tooltip.style.width = "30px"; - this._collapseBtn.spec.title = "Expand"; - this._collapseBtn.render(this.view); - } - else { - this._collapseBtn.spec.title = "Collapse"; - this.tooltip.style.width = "550px"; - this._collapseBtn.render(this.view); - } - } - } - - createLink() { - let markType = schema.marks.link; - return new MenuItem({ - title: "Add or remove link", - label: "Add or remove link", - execEvent: "", - icon: icons.link, - css: "color:white;", - class: "menuicon", - enable(state) { return !state.selection.empty; }, - run: (state, dispatch, view) => { - // to remove link - let curLink = ""; - if (this.markActive(state, markType)) { - - let { from, $from, to, empty } = state.selection; - let node = state.doc.nodeAt(from); - node && node.marks.map(m => { - m.type === markType && (curLink = m.attrs.href); - }); - //toggleMark(markType)(state, dispatch); - //return true; - } - // to create link - openPrompt({ - title: "Create a link", - fields: { - href: new TextField({ - value: curLink, - label: "Link Target", - required: true - }), - title: new TextField({ label: "Title" }) - }, - callback(attrs: any) { - toggleMark(markType, attrs)(view.state, view.dispatch); - view.focus(); - }, - flyout_top: 0, - flyout_left: 0 - }); - } - }); - } - //makes a button for the drop down FOR NODE TYPES //css is the style you want applied to the button dropdownNodeBtn(label: string, css: string, nodeType: NodeType | undefined, view: EditorView, groupNodes: NodeType[], changeToNodeInGroup: (nodeType: NodeType<any> | undefined, view: EditorView, groupNodes: NodeType[]) => any) { @@ -806,7 +1214,7 @@ export class TooltipTextMenu { title: "", label: label, execEvent: "", - class: "menuicon", + class: "dropdown-item", css: css, enable() { return true; }, run() { @@ -815,7 +1223,7 @@ export class TooltipTextMenu { }); } - markActive = function (state: EditorState<any>, type: MarkType<Schema<string, string>>) { + markActive = function(state: EditorState<any>, type: MarkType<Schema<string, string>>) { let { from, $from, to, empty } = state.selection; if (empty) return type.isInSet(state.storedMarks || $from.marks()); else return state.doc.rangeHasMark(from, to, type); @@ -831,6 +1239,21 @@ export class TooltipTextMenu { return span; } + svgIcon(name: string, title: string = name, dpath: string) { + let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("viewBox", "-100 -100 650 650"); + let path = document.createElementNS('http://www.w3.org/2000/svg', "path"); + path.setAttributeNS(null, "d", dpath); + svg.appendChild(path); + + let span = document.createElement("span"); + span.className = name + " menuicon"; + span.title = title; + span.appendChild(svg); + + return span; + } + //method for checking whether node can be inserted canInsert(state: EditorState, nodeType: NodeType<Schema<string, string>>) { let $from = state.selection.$from; @@ -893,7 +1316,7 @@ export class TooltipTextMenu { update(view: EditorView, lastState: EditorState | undefined) { this.updateFromDash(view, lastState, this.editorProps); } //updates the tooltip menu when the selection changes - public updateFromDash(view: EditorView, lastState: EditorState | undefined, props: any) { + public async updateFromDash(view: EditorView, lastState: EditorState | undefined, props: any) { if (!view) { console.log("no editor? why?"); return; @@ -913,12 +1336,18 @@ export class TooltipTextMenu { //this.tooltip.style.display = "none"; //return; } - //UPDATE LIST ITEM DROPDOWN + + // update link dropdown + let linkDropdown = await this.createLinkDropdown(); + let newLinkDropdowndom = linkDropdown.render(this.view).dom; + this._linkDropdownDom && this.tooltip.replaceChild(newLinkDropdowndom, this._linkDropdownDom); + this._linkDropdownDom = newLinkDropdowndom; //UPDATE FONT STYLE DROPDOWN let activeStyles = this.activeFontFamilyOnSelection(); if (activeStyles !== undefined) { if (activeStyles.length === 1) { + console.log("updating font style dropdown", activeStyles[0]); activeStyles[0] && this.updateFontStyleDropdown(activeStyles[0]); } else this.updateFontStyleDropdown(activeStyles.length ? "various" : "default"); } @@ -935,33 +1364,19 @@ export class TooltipTextMenu { } update_mark_doms() { this.reset_mark_doms(); - let foundlink = false; - let children = this.extras.childNodes; this._activeMarks.forEach((mark) => { if (this._marksToDoms.has(mark)) { let dom = this._marksToDoms.get(mark); if (dom) dom.style.color = "greenyellow"; } - if (children.length > 1) { - foundlink = true; - } - if (mark.type.name === "link" && children.length === 1) { - // let del = document.createElement("button"); - // del.textContent = "X"; - // del.style.color = "red"; - // del.style.height = "10px"; - // del.style.width = "10px"; - // del.style.marginLeft = "5px"; - // del.onclick = this.deleteLink; - // this.extras.appendChild(del); - let del = this.deleteLinkItem().render(this.view).dom; - this.extras.appendChild(del); - foundlink = true; - } }); - if (!foundlink) { - if (children.length > 1) { - this.extras.removeChild(children[1]); + + // keeps brush tool highlighted if active when switching between textboxes + if (!TooltipTextMenuManager.Instance._brushIsEmpty) { + if (this._brushdom) { + const newbrush = this.createBrush(true).render(this.view).dom; + this.tooltip.replaceChild(newbrush, this._brushdom); + this._brushdom = newbrush; } } @@ -1000,12 +1415,10 @@ export class TooltipTextMenu { let activeMarks: MarkType[]; if (!empty) { activeMarks = markGroup.filter(mark => { - if (dispatch) { - let has = false; - for (let i = 0; !has && i < ranges.length; i++) { - let { $from, $to } = ranges[i]; - return state.doc.rangeHasMark($from.pos, $to.pos, mark); - } + let has = false; + for (let i = 0; !has && i < ranges.length; i++) { + let { $from, $to } = ranges[i]; + return state.doc.rangeHasMark($from.pos, $to.pos, mark); } return false; }); @@ -1024,13 +1437,11 @@ export class TooltipTextMenu { } this._activeMarks = ref_node.marks; activeMarks = markGroup.filter(mark_type => { - if (dispatch) { - if (mark_type === state.schema.marks.pFontSize) { - return ref_node.marks.some(m => m.type.name === state.schema.marks.pFontSize.name); - } - let mark = state.schema.mark(mark_type); - return ref_node.marks.includes(mark); + if (mark_type === state.schema.marks.pFontSize) { + return ref_node.marks.some(m => m.type.name === state.schema.marks.pFontSize.name); } + let mark = state.schema.mark(mark_type); + return ref_node.marks.includes(mark); return false; }); } @@ -1069,6 +1480,40 @@ export class TooltipTextMenu { } destroy() { - this.wrapper.remove(); + // this.wrapper.remove(); + } +} + + +class TooltipTextMenuManager { + private static _instance: TooltipTextMenuManager; + + public pinnedX: number = 0; + public pinnedY: number = 0; + public unpinnedX: number = 0; + public unpinnedY: number = 0; + private _isPinned: boolean = false; + + public _brushMarks: Set<Mark> | undefined; + public _brushIsEmpty: boolean = true; + + public color: String = "#000"; + public highlight: String = "transparent"; + + public activeMenu: TooltipTextMenu | undefined; + + static get Instance() { + if (!TooltipTextMenuManager._instance) { + TooltipTextMenuManager._instance = new TooltipTextMenuManager(); + } + return TooltipTextMenuManager._instance; + } + + public get isPinned() { + return this._isPinned; + } + + public toggleIsPinned() { + this._isPinned = !this._isPinned; } } diff --git a/src/client/views/DocComponent.tsx b/src/client/views/DocComponent.tsx index ae4b7cf3a..92c947fe6 100644 --- a/src/client/views/DocComponent.tsx +++ b/src/client/views/DocComponent.tsx @@ -34,7 +34,7 @@ export function DocExtendableComponent<P extends DocExtendableProps, T>(schemaCt //TODO This might be pretty inefficient if doc isn't observed, because computed doesn't cache then @computed get Document(): T { return schemaCtor(this.props.Document); } @computed get layoutDoc() { return Doc.Layout(this.props.Document); } - @computed get dataDoc() { return (this.props.DataDoc && this.props.Document.isTemplateField ? this.props.DataDoc : Doc.GetProto(this.props.Document)) as Doc; } + @computed get dataDoc() { return (this.props.DataDoc && (this.props.Document.isTemplateField || this.props.Document.isTemplateDoc) ? this.props.DataDoc : Doc.GetProto(this.props.Document)) as Doc; } @computed get extensionDoc() { return Doc.fieldExtensionDoc(this.dataDoc, this.props.fieldKey); } active = () => !this.props.Document.isBackground && (this.props.Document.forceActive || this.props.isSelected() || this.props.renderDepth === 0);// && !InkingControl.Instance.selectedTool; // bcz: inking state shouldn't affect static tools } diff --git a/src/client/views/DocumentButtonBar.tsx b/src/client/views/DocumentButtonBar.tsx index ba87ecfb4..1412316f9 100644 --- a/src/client/views/DocumentButtonBar.tsx +++ b/src/client/views/DocumentButtonBar.tsx @@ -5,7 +5,7 @@ import { action, observable, runInAction } from "mobx"; import { observer } from "mobx-react"; import { Doc } from "../../new_fields/Doc"; import { RichTextField } from '../../new_fields/RichTextField'; -import { NumCast } from "../../new_fields/Types"; +import { NumCast, StrCast } from "../../new_fields/Types"; import { emptyFunction } from "../../Utils"; import { Pulls, Pushes } from '../apis/google_docs/GoogleApiClientUtils'; import { DragLinksAsDocuments, DragManager } from "../util/DragManager"; @@ -135,13 +135,27 @@ export class DocumentButtonBar extends React.Component<{ views: DocumentView[], if (this._linkerButton.current !== null) { document.removeEventListener("pointermove", this.onLinkerButtonMoved); document.removeEventListener("pointerup", this.onLinkerButtonUp); - let selDoc = this.props.views[0]; - let container = selDoc.props.ContainingCollectionDoc ? selDoc.props.ContainingCollectionDoc.proto : undefined; - let dragData = new DragManager.LinkDragData(selDoc.props.Document, container ? [container] : []); - let _linkDrag = UndoManager.StartBatch("Drag Link"); + let docView = this.props.views[0]; + let container = docView.props.ContainingCollectionDoc ? docView.props.ContainingCollectionDoc.proto : undefined; + let dragData = new DragManager.LinkDragData(docView.props.Document, container ? [container] : []); + let linkDrag = UndoManager.StartBatch("Drag Link"); DragManager.StartLinkDrag(this._linkerButton.current, dragData, e.pageX, e.pageY, { handlers: { - dragComplete: () => _linkDrag && _linkDrag.end() + dragComplete: () => { + let tooltipmenu = FormattedTextBox.ToolTipTextMenu; + let linkDoc = dragData.linkDocument; + if (linkDoc && tooltipmenu) { + let proto = Doc.GetProto(linkDoc); + if (proto && docView) { + proto.sourceContext = docView.props.ContainingCollectionDoc; + } + let text = tooltipmenu.makeLink(linkDoc, StrCast(linkDoc.anchor2.title), e.ctrlKey ? "onRight" : "inTab"); + if (linkDoc instanceof Doc && linkDoc.anchor2 instanceof Doc) { + proto.title = text === "" ? proto.title : text + " to " + linkDoc.anchor2.title; // TODODO open to more descriptive descriptions of following in text link + } + } + linkDrag && linkDrag.end(); + } }, hideSource: false }); diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index 55c211d1d..890c32bcb 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -157,22 +157,14 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> this.onBackgroundUp(e); } - @observable _forceUpdate = 0; - _lastBox = { x: 0, y: 0, r: 0, b: 0 }; @computed get Bounds(): { x: number, y: number, b: number, r: number } { - let x = this._forceUpdate; - this._lastBox = SelectionManager.SelectedDocuments().reduce((bounds, documentView) => { + return SelectionManager.SelectedDocuments().reduce((bounds, documentView) => { if (documentView.props.renderDepth === 0 || Doc.AreProtosEqual(documentView.props.Document, CurrentUserUtils.UserDocument)) { return bounds; } let transform = (documentView.props.ScreenToLocalTransform().scale(documentView.props.ContentScaling())).inverse(); - if (transform.TranslateX === 0 && transform.TranslateY === 0) { - setTimeout(action(() => this._forceUpdate++), 0); // bcz: fix CollectionStackingView's getTransform() somehow...without this, resizing things in the library view, for instance, show the wrong bounds - return this._lastBox; - } - var [sptX, sptY] = transform.transformPoint(0, 0); let [bptX, bptY] = transform.transformPoint(documentView.props.PanelWidth(), documentView.props.PanelHeight()); if (documentView.props.Document.type === DocumentType.LINK) { @@ -187,7 +179,6 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> r: Math.max(bptX, bounds.r), b: Math.max(bptY, bounds.b) }; }, { x: Number.MAX_VALUE, y: Number.MAX_VALUE, r: Number.MIN_VALUE, b: Number.MIN_VALUE }); - return this._lastBox; } onBackgroundDown = (e: React.PointerEvent): void => { @@ -557,8 +548,8 @@ export class DocumentDecorations extends React.Component<{}, { value: string }> } } public showTextBar = () => { - if (this.TextBar) { - TooltipTextMenu.Toolbar && Array.from(this.TextBar.childNodes).indexOf(TooltipTextMenu.Toolbar) === -1 && this.TextBar.appendChild(TooltipTextMenu.Toolbar); + if (this.TextBar && TooltipTextMenu.Toolbar && Array.from(this.TextBar.childNodes).indexOf(TooltipTextMenu.Toolbar) === -1) { + this.TextBar.appendChild(TooltipTextMenu.Toolbar); } } render() { diff --git a/src/client/views/animationtimeline/Track.tsx b/src/client/views/animationtimeline/Track.tsx index 14e309f68..e66b42690 100644 --- a/src/client/views/animationtimeline/Track.tsx +++ b/src/client/views/animationtimeline/Track.tsx @@ -51,7 +51,10 @@ export class Track extends React.Component<IProps> { componentWillMount() { runInAction(() => { - if (!this.props.node.regions) this.props.node.regions = new List<Doc>(); + if (!this.props.node.regions) this.props.node.regions = new List<Doc>(); + console.log("hi"); + console.log("HELLO"); + console.log("hi"); }); } diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx index 203c68463..ebd47fd19 100644 --- a/src/client/views/collections/CollectionSchemaView.tsx +++ b/src/client/views/collections/CollectionSchemaView.tsx @@ -141,7 +141,6 @@ export class CollectionSchemaView extends CollectionSubView(doc => doc) { <ContentFittingDocumentView Document={layoutDoc} DataDocument={this.previewDocument !== this.props.DataDoc ? this.props.DataDoc : undefined} - fieldKey={this.props.fieldKey} childDocs={this.childDocs} renderDepth={this.props.renderDepth} ruleProvider={this.props.Document.isRuleProvider && layoutDoc && layoutDoc.type !== DocumentType.TEXT ? this.props.Document : this.props.ruleProvider} diff --git a/src/client/views/collections/CollectionStackingView.tsx b/src/client/views/collections/CollectionStackingView.tsx index 15033e51a..be3bfca0a 100644 --- a/src/client/views/collections/CollectionStackingView.tsx +++ b/src/client/views/collections/CollectionStackingView.tsx @@ -168,7 +168,6 @@ export class CollectionStackingView extends CollectionSubView(doc => doc) { return <ContentFittingDocumentView Document={doc} DataDocument={dataDoc} - fieldKey={this.props.fieldKey} showOverlays={this.overlays} renderDepth={this.props.renderDepth} ruleProvider={this.props.Document.isRuleProvider && layoutDoc.type !== DocumentType.TEXT ? this.props.Document : this.props.ruleProvider} diff --git a/src/client/views/collections/CollectionTreeView.tsx b/src/client/views/collections/CollectionTreeView.tsx index 8726726bb..0e3f0d1a9 100644 --- a/src/client/views/collections/CollectionTreeView.tsx +++ b/src/client/views/collections/CollectionTreeView.tsx @@ -23,7 +23,6 @@ import { EditableView } from "../EditableView"; import { MainView } from '../MainView'; import { KeyValueBox } from '../nodes/KeyValueBox'; import { Templates } from '../Templates'; -import { CollectionViewType } from './CollectionView'; import { ContentFittingDocumentView } from '../nodes/ContentFittingDocumentView'; import { CollectionSubView } from "./CollectionSubView"; import "./CollectionTreeView.scss"; @@ -177,8 +176,10 @@ class TreeView extends React.Component<TreeViewProps> { />) onWorkspaceContextMenu = (e: React.MouseEvent): void => { - if (!e.isPropagationStopped()) { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view7 - if (NumCast(this.props.document.viewType) !== CollectionViewType.Docking && this.props.document !== CurrentUserUtils.UserDocument.workspaces) { + if (!e.isPropagationStopped()) { // need to test this because GoldenLayout causes a parallel hierarchy in the React DOM for its children and the main document view + if (this.props.document === CurrentUserUtils.UserDocument.recentlyClosed) { + ContextMenu.Instance.addItem({ description: "Clear All", event: () => Doc.GetProto(CurrentUserUtils.UserDocument.recentlyClosed as Doc).data = new List<Doc>(), icon: "plus" }); + } else if (this.props.document !== CurrentUserUtils.UserDocument.workspaces) { ContextMenu.Instance.addItem({ description: "Pin to Presentation", event: () => this.props.pinToPres(this.props.document), icon: "tv" }); ContextMenu.Instance.addItem({ description: "Open Tab", event: () => this.props.addDocTab(this.props.document, this.templateDataDoc, "inTab"), icon: "folder" }); ContextMenu.Instance.addItem({ description: "Open Right", event: () => this.props.addDocTab(this.props.document, this.templateDataDoc, "onRight"), icon: "caret-square-right" }); @@ -317,7 +318,6 @@ class TreeView extends React.Component<TreeViewProps> { <ContentFittingDocumentView Document={layoutDoc} DataDocument={this.templateDataDoc} - fieldKey={this.fieldKey} renderDepth={this.props.renderDepth} showOverlays={this.noOverlays} ruleProvider={this.props.document.isRuleProvider && layoutDoc.type !== DocumentType.TEXT ? this.props.document : this.props.ruleProvider} @@ -538,6 +538,11 @@ export class CollectionTreeView extends CollectionSubView(Document) { e.stopPropagation(); e.preventDefault(); ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15); + } else if (!e.isPropagationStopped() && this.props.Document === CurrentUserUtils.UserDocument.recentlyClosed) { + ContextMenu.Instance.addItem({ description: "Clear All", event: () => CurrentUserUtils.UserDocument.recentlyClosed = new List<Doc>(), icon: "plus" }); + e.stopPropagation(); + e.preventDefault(); + ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15); } else { let layoutItems: ContextMenuProps[] = []; layoutItems.push({ description: this.props.Document.preventTreeViewOpen ? "Persist Treeview State" : "Abandon Treeview State", event: () => this.props.Document.preventTreeViewOpen = !this.props.Document.preventTreeViewOpen, icon: "paint-brush" }); diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx index 2d7a557b5..f6240b6f8 100644 --- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx +++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx @@ -335,7 +335,7 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) { @action onPointerWheel = (e: React.WheelEvent): void => { - if (this.props.Document.lockedPosition || this.props.Document.inOverlay) return; + if (this.props.Document.lockedTransform || this.props.Document.inOverlay) return; if (!e.ctrlKey && this.props.Document.scrollHeight !== undefined) { // things that can scroll vertically should do that instead of zooming e.stopPropagation(); } @@ -357,7 +357,7 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) { @action setPan(panX: number, panY: number, panType: string = "None") { - if (!this.Document.lockedPosition || this.Document.inOverlay) { + if (!this.Document.lockedTransform || this.Document.inOverlay) { this.Document.panTransformType = panType; var scale = this.getLocalTransform().inverse().Scale; const newPanX = Math.min((1 - 1 / scale) * this.nativeWidth, Math.max(0, panX)); diff --git a/src/client/views/nodes/ContentFittingDocumentView.tsx b/src/client/views/nodes/ContentFittingDocumentView.tsx index f41c4fc91..c8255b6fe 100644 --- a/src/client/views/nodes/ContentFittingDocumentView.tsx +++ b/src/client/views/nodes/ContentFittingDocumentView.tsx @@ -20,7 +20,6 @@ interface ContentFittingDocumentViewProps { childDocs?: Doc[]; renderDepth: number; fitToBox?: boolean; - fieldKey: string; PanelWidth: () => number; PanelHeight: () => number; ruleProvider: Doc | undefined; @@ -37,6 +36,7 @@ interface ContentFittingDocumentViewProps { whenActiveChanged: (isActive: boolean) => void; addDocTab: (document: Doc, dataDoc: Doc | undefined, where: string) => boolean; pinToPres: (document: Doc) => void; + dontRegisterView?: boolean; setPreviewScript: (script: string) => void; previewScript?: string; } @@ -108,6 +108,7 @@ export class ContentFittingDocumentView extends React.Component<ContentFittingDo focus={this.props.focus || emptyFunction} backgroundColor={returnEmptyString} bringToFront={emptyFunction} + dontRegisterView={this.props.dontRegisterView} zoomToScale={emptyFunction} getScale={returnOne} /> diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index 93052ea73..7132f181e 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -74,6 +74,7 @@ export interface DocumentViewProps { getScale: () => number; animateBetweenIcon?: (maximize: boolean, target: number[]) => void; ChromeHeight?: () => number; + dontRegisterView?: boolean; layoutKey?: string; } @@ -98,7 +99,8 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu @action componentDidMount() { this._mainCont.current && (this._dropDisposer = DragManager.MakeDropTarget(this._mainCont.current, { handlers: { drop: this.drop.bind(this) } })); - DocumentManager.Instance.DocumentViews.push(this); + + !this.props.dontRegisterView && DocumentManager.Instance.DocumentViews.push(this); } @action @@ -111,7 +113,7 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu componentWillUnmount() { this._dropDisposer && this._dropDisposer(); Doc.UnBrushDoc(this.props.Document); - DocumentManager.Instance.DocumentViews.splice(DocumentManager.Instance.DocumentViews.indexOf(this), 1); + !this.props.dontRegisterView && DocumentManager.Instance.DocumentViews.splice(DocumentManager.Instance.DocumentViews.indexOf(this), 1); } startDragging(x: number, y: number, dropAction: dropActionType, applyAsTemplate?: boolean) { @@ -136,7 +138,7 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu (Math.abs(e.clientX - this._downX) < Utils.DRAG_THRESHOLD && Math.abs(e.clientY - this._downY) < Utils.DRAG_THRESHOLD)) { e.stopPropagation(); let preventDefault = true; - if (this._doubleTap && this.props.renderDepth && (!this.onClickHandler || !this.onClickHandler.script)) { // disable double-click to show full screen for things that have an on click behavior since clicking them twice can be misinterpreted as a double click + if (this._doubleTap && this.props.renderDepth && !this.onClickHandler?.script) { // disable double-click to show full screen for things that have an on click behavior since clicking them twice can be misinterpreted as a double click let fullScreenAlias = Doc.MakeAlias(this.props.Document); if (StrCast(fullScreenAlias.layoutKey) !== "layoutCustom" && fullScreenAlias.layoutCustom !== undefined) { fullScreenAlias.layoutKey = "layoutCustom"; @@ -350,9 +352,9 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu @undoBatch @action setCustomView = (custom: boolean): void => { - if (this.props.ContainingCollectionView && this.props.ContainingCollectionView.props.DataDoc) { - Doc.MakeMetadataFieldTemplate(this.props.Document, this.props.ContainingCollectionView.props.DataDoc); - } else { // bcz: not robust -- for now documents with string layout are native documents, and those with Doc layouts are customized + if (this.props.ContainingCollectionView?.props.DataDoc || this.props.ContainingCollectionView?.props.Document.isTemplateDoc) { + Doc.MakeMetadataFieldTemplate(this.props.Document, this.props.ContainingCollectionView.props.Document); + } else { custom ? DocumentView.makeCustomViewClicked(this.props.Document, this.props.DataDoc) : DocumentView.makeNativeViewClicked(this.props.Document); } } @@ -370,6 +372,12 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu this.Document.lockedPosition = this.Document.lockedPosition ? undefined : true; } + @undoBatch + @action + toggleLockTransform = (): void => { + this.Document.lockedTransform = this.Document.lockedTransform ? undefined : true; + } + listen = async () => { Doc.GetProto(this.props.Document).transcript = await DictationManager.Controls.listen({ continuous: { indefinite: true }, @@ -442,6 +450,7 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu layoutItems.push({ description: `${this.Document.autoHeight ? "Variable Height" : "Auto Height"}`, event: () => this.layoutDoc.autoHeight = !this.layoutDoc.autoHeight, icon: "plus" }); layoutItems.push({ description: this.Document.ignoreAspect || !this.Document.nativeWidth || !this.Document.nativeHeight ? "Freeze" : "Unfreeze", event: this.freezeNativeDimensions, icon: "snowflake" }); layoutItems.push({ description: this.Document.lockedPosition ? "Unlock Position" : "Lock Position", event: this.toggleLockPosition, icon: BoolCast(this.Document.lockedPosition) ? "unlock" : "lock" }); + layoutItems.push({ description: this.Document.lockedTransform ? "Unlock Transform" : "Lock Transform", event: this.toggleLockTransform, icon: BoolCast(this.Document.lockedTransform) ? "unlock" : "lock" }); layoutItems.push({ description: "Center View", event: () => this.props.focus(this.props.Document, false), icon: "crosshairs" }); layoutItems.push({ description: "Zoom to Document", event: () => this.props.focus(this.props.Document, true), icon: "search" }); if (this.Document.type !== DocumentType.COL && this.Document.type !== DocumentType.TEMPLATE) { @@ -630,7 +639,7 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu {searchHighlight} </div> } - </> + </>; } render() { if (!this.props.Document) return (null); diff --git a/src/client/views/nodes/FontIconBox.tsx b/src/client/views/nodes/FontIconBox.tsx index ae9273639..83ecc4657 100644 --- a/src/client/views/nodes/FontIconBox.tsx +++ b/src/client/views/nodes/FontIconBox.tsx @@ -25,7 +25,7 @@ export class FontIconBox extends DocComponent<FieldViewProps, FontIconDocument>( this._backgroundReaction = reaction(() => this.props.Document.backgroundColor, () => { if (this._ref && this._ref.current) { - let col = Utils.fromRGBAstr(getComputedStyle(this._ref.current).backgroundColor!); + let col = Utils.fromRGBAstr(getComputedStyle(this._ref.current).backgroundColor); let colsum = (col.r + col.g + col.b); if (colsum / col.a > 600 || col.a < 0.25) runInAction(() => this._foregroundColor = "black"); else if (colsum / col.a <= 600 || col.a >= .25) runInAction(() => this._foregroundColor = "white"); diff --git a/src/client/views/nodes/FormattedTextBox.scss b/src/client/views/nodes/FormattedTextBox.scss index a4acd3b82..b497b12b4 100644 --- a/src/client/views/nodes/FormattedTextBox.scss +++ b/src/client/views/nodes/FormattedTextBox.scss @@ -36,6 +36,18 @@ } } +.collectionfreeformview-container { + position: relative; +} +.formattedTextBox-outer { + position: relative; + overflow: auto; + display: inline-block; + padding: 10px 10px; + width: 100%; + height: 100%; +} + .formattedTextBox-inner-rounded { height: 70%; width: 85%; @@ -51,17 +63,17 @@ height: 100%; } -.menuicon { - display: inline-block; - border-right: 1px solid rgba(0, 0, 0, 0.2); - color: #888; - line-height: 1; - padding: 0 7px; - margin: 1px; - cursor: pointer; - text-align: center; - min-width: 1.4em; -} +// .menuicon { +// display: inline-block; +// border-right: 1px solid rgba(0, 0, 0, 0.2); +// color: #888; +// line-height: 1; +// padding: 0 7px; +// margin: 1px; +// cursor: pointer; +// text-align: center; +// min-width: 1.4em; +// } .strong, .heading { diff --git a/src/client/views/nodes/FormattedTextBox.tsx b/src/client/views/nodes/FormattedTextBox.tsx index 24d6f2509..35212b732 100644 --- a/src/client/views/nodes/FormattedTextBox.tsx +++ b/src/client/views/nodes/FormattedTextBox.tsx @@ -17,14 +17,13 @@ import { Copy, Id } from '../../../new_fields/FieldSymbols'; import { RichTextField } from "../../../new_fields/RichTextField"; import { RichTextUtils } from '../../../new_fields/RichTextUtils'; import { createSchema, makeInterface } from "../../../new_fields/Schema"; -import { Cast, DateCast, NumCast, StrCast } from "../../../new_fields/Types"; -import { numberRange, Utils, addStyleSheet, addStyleSheetRule, clearStyleSheetRules } from '../../../Utils'; +import { Cast, NumCast, StrCast } from "../../../new_fields/Types"; +import { numberRange, Utils, addStyleSheet, addStyleSheetRule, clearStyleSheetRules, emptyFunction, returnOne } from '../../../Utils'; import { GoogleApiClientUtils, Pulls, Pushes } from '../../apis/google_docs/GoogleApiClientUtils'; import { DocServer } from "../../DocServer"; import { Docs, DocUtils } from '../../documents/Documents'; import { DocumentType } from '../../documents/DocumentTypes'; import { DictationManager } from '../../util/DictationManager'; -import { DocumentManager } from '../../util/DocumentManager'; import { DragManager } from "../../util/DragManager"; import buildKeymap from "../../util/ProsemirrorExampleTransfer"; import { inpRules } from "../../util/RichTextRules"; @@ -33,7 +32,7 @@ import { SelectionManager } from "../../util/SelectionManager"; import { TooltipLinkingMenu } from "../../util/TooltipLinkingMenu"; import { TooltipTextMenu } from "../../util/TooltipTextMenu"; import { undoBatch, UndoManager } from "../../util/UndoManager"; -import { DocExtendableComponent } from "../DocComponent"; +import { DocAnnotatableComponent } from "../DocComponent"; import { DocumentButtonBar } from '../DocumentButtonBar'; import { DocumentDecorations } from '../DocumentDecorations'; import { InkingControl } from "../InkingControl"; @@ -46,6 +45,7 @@ import { ContextMenu } from '../ContextMenu'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { documentSchema } from '../../../new_fields/documentSchemas'; import { AudioBox } from './AudioBox'; +import { CollectionFreeFormView } from '../collections/collectionFreeForm/CollectionFreeFormView'; library.add(faEdit); library.add(faSmile, faTextHeight, faUpload); @@ -70,11 +70,11 @@ const RichTextDocument = makeInterface(richTextSchema, documentSchema); type PullHandler = (exportState: Opt<GoogleApiClientUtils.Docs.ImportResult>, dataDoc: Doc) => void; @observer -export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & FormattedTextBoxProps), RichTextDocument>(RichTextDocument) { +export class FormattedTextBox extends DocAnnotatableComponent<(FieldViewProps & FormattedTextBoxProps), RichTextDocument>(RichTextDocument) { public static LayoutString(fieldStr: string) { return FieldView.LayoutString(FormattedTextBox, fieldStr); } public static blankState = () => EditorState.create(FormattedTextBox.Instance.config); public static Instance: FormattedTextBox; - private static _toolTipTextMenu: TooltipTextMenu | undefined = undefined; + public static ToolTipTextMenu: TooltipTextMenu | undefined = undefined; private _ref: React.RefObject<HTMLDivElement> = React.createRef(); private _proseRef?: HTMLDivElement; private _editorView: Opt<EditorView>; @@ -85,7 +85,6 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F private _searchReactionDisposer?: Lambda; private _scrollToRegionReactionDisposer: Opt<IReactionDisposer>; private _reactionDisposer: Opt<IReactionDisposer>; - private _textReactionDisposer: Opt<IReactionDisposer>; private _heightReactionDisposer: Opt<IReactionDisposer>; private _rulesReactionDisposer: Opt<IReactionDisposer>; private _proxyReactionDisposer: Opt<IReactionDisposer>; @@ -120,7 +119,7 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F } public static getToolTip(ev: EditorView) { - return this._toolTipTextMenu ? this._toolTipTextMenu : this._toolTipTextMenu = new TooltipTextMenu(ev); + return this.ToolTipTextMenu ? this.ToolTipTextMenu : this.ToolTipTextMenu = new TooltipTextMenu(ev); } @undoBatch @@ -191,9 +190,8 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F let tsel = this._editorView.state.selection.$from; tsel.marks().filter(m => m.type === this._editorView!.state.schema.marks.user_mark).map(m => AudioBox.SetScrubTime(Math.max(0, m.attrs.modified * 5000 - 1000))); this._applyingChange = true; - this.extensionDoc && (this.extensionDoc.text = state.doc.textBetween(0, state.doc.content.size, "\n\n")); this.extensionDoc && (this.extensionDoc.lastModified = new DateField(new Date(Date.now()))); - this.dataDoc[this.props.fieldKey] = new RichTextField(JSON.stringify(state.toJSON())); + this.dataDoc[this.props.fieldKey] = new RichTextField(JSON.stringify(state.toJSON()), state.doc.textBetween(0, state.doc.content.size, "\n\n")); this._applyingChange = false; this.updateTitle(); this.tryUpdateHeight(); @@ -250,7 +248,7 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F // replace text contents whend dragging with Alt if (draggedDoc && draggedDoc.type === DocumentType.TEXT && !Doc.AreProtosEqual(draggedDoc, this.props.Document) && de.mods === "AltKey") { if (draggedDoc.data instanceof RichTextField) { - Doc.GetProto(this.dataDoc)[this.props.fieldKey] = new RichTextField(draggedDoc.data.Data); + Doc.GetProto(this.dataDoc)[this.props.fieldKey] = new RichTextField(draggedDoc.data.Data, draggedDoc.data.Text); e.stopPropagation(); } // apply as template when dragging with Meta @@ -290,6 +288,7 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F if (context === node) return { from: offset, to: offset + node.nodeSize }; if (node.isBlock) { + // tslint:disable-next-line: prefer-for-of for (let i = 0; i < (context.content as any).content.length; i++) { let result = this.getNodeEndpoints((context.content as any).content[i], node); if (result) { @@ -360,6 +359,7 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F specificContextMenu = (e: React.MouseEvent): void => { let funcs: ContextMenuProps[] = []; + funcs.push({ description: "Toggle Sidebar", event: () => { e.stopPropagation(); this.props.Document.sidebarWidthPercent = StrCast(this.props.Document.sidebarWidthPercent, "0%") === "0%" ? "25%" : "0%"; }, icon: "expand-arrows-alt" }); funcs.push({ description: "Record Bullet", event: () => { e.stopPropagation(); this.recordBullet(); }, icon: "expand-arrows-alt" }); ["My Text", "Text from Others", "Todo Items", "Important Items", "Ignore Items", "Disagree Items", "By Recent Minute", "By Recent Hour"].forEach(option => funcs.push({ @@ -510,17 +510,6 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F () => this.tryUpdateHeight() ); - this._textReactionDisposer = reaction( - () => this.extensionDoc, - () => { - if (this.extensionDoc && (this.dataDoc.text || this.dataDoc.lastModified)) { - this.extensionDoc.text = this.dataDoc.text; - this.extensionDoc.lastModified = DateCast(this.dataDoc.lastModified)[Copy](); - this.dataDoc.text = undefined; - this.dataDoc.lastModified = undefined; - } - }, { fireImmediately: true }); - this.setupEditor(this.config, this.dataDoc, this.props.fieldKey); @@ -787,7 +776,9 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F while (refNode && !("getBoundingClientRect" in refNode)) refNode = refNode.parentElement; let r1 = refNode && refNode.getBoundingClientRect(); let r3 = self._ref.current!.getBoundingClientRect(); - r1 && (self._ref.current!.scrollTop += (r1.top - r3.top) * self.props.ScreenToLocalTransform().Scale); + if (r1.top < r3.top || r1.top > r3.bottom) { + r1 && (self._ref.current!.scrollTop += (r1.top - r3.top) * self.props.ScreenToLocalTransform().Scale); + } return true; }, dispatchTransaction: this.dispatchTransaction, @@ -834,7 +825,6 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F this._rulesReactionDisposer && this._rulesReactionDisposer(); this._reactionDisposer && this._reactionDisposer(); this._proxyReactionDisposer && this._proxyReactionDisposer(); - this._textReactionDisposer && this._textReactionDisposer(); this._pushReactionDisposer && this._pushReactionDisposer(); this._pullReactionDisposer && this._pullReactionDisposer(); this._heightReactionDisposer && this._heightReactionDisposer(); @@ -857,7 +847,10 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F } onPointerUp = (e: React.PointerEvent): void => { - if (!(e.nativeEvent as any).formattedHandled) { FormattedTextBoxComment.textBox = this; } + if (!(e.nativeEvent as any).formattedHandled) { + FormattedTextBoxComment.textBox = this; + FormattedTextBoxComment.update(this._editorView!); + } (e.nativeEvent as any).formattedHandled = true; if (e.buttons === 1 && this.props.isSelected() && !e.altKey) { @@ -968,7 +961,7 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F let self = FormattedTextBox; return new Plugin({ view(newView) { - return self._toolTipTextMenu = FormattedTextBox.getToolTip(newView); + return self.ToolTipTextMenu = FormattedTextBox.getToolTip(newView); } }); } @@ -1018,12 +1011,15 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F } } + @computed get sidebarWidthPercent() { return StrCast(this.props.Document.sidebarWidth, "0%"); } + @computed get sidebarWidth() { return Number(this.sidebarWidthPercent.substring(0, this.sidebarWidthPercent.length - 1)) / 100 * this.props.PanelWidth(); } + @computed get annotationsKey() { return "annotations"; } render() { trace(); let rounded = StrCast(this.layoutDoc.borderRounding) === "100%" ? "-rounded" : ""; let interactive = InkingControl.Instance.selectedTool || this.layoutDoc.isBackground; if (this.props.isSelected()) { - FormattedTextBox._toolTipTextMenu!.updateFromDash(this._editorView!, undefined, this.props); + FormattedTextBox.ToolTipTextMenu!.updateFromDash(this._editorView!, undefined, this.props); } else if (FormattedTextBoxComment.textBox === this) { FormattedTextBoxComment.Hide(); } @@ -1050,8 +1046,32 @@ export class FormattedTextBox extends DocExtendableComponent<(FieldViewProps & F onPointerEnter={action(() => this._entered = true)} onPointerLeave={action(() => this._entered = false)} > - <div className={`formattedTextBox-inner${rounded}`} style={{ whiteSpace: "pre-wrap", pointerEvents: ((this.Document.isButton || this.props.onClick) && !this.props.isSelected()) ? "none" : undefined }} ref={this.createDropTarget} /> - + <div className={`formattedTextBox-outer`} style={{ width: `calc(100% - ${this.sidebarWidthPercent})`, }}> + <div className={`formattedTextBox-inner${rounded}`} style={{ whiteSpace: "pre-wrap", pointerEvents: ((this.Document.isButton || this.props.onClick) && !this.props.isSelected()) ? "none" : undefined }} ref={this.createDropTarget} /> + </div> + {this.sidebarWidthPercent === "0%" ? (null) : <div style={{ borderLeft: "solid 1px black", width: `${this.sidebarWidthPercent}`, height: "100%", display: "inline-block" }}> + <CollectionFreeFormView {...this.props} + PanelHeight={() => this.props.PanelHeight()} + PanelWidth={() => this.sidebarWidth} + annotationsKey={this.annotationsKey} + isAnnotationOverlay={true} + focus={this.props.focus} + isSelected={this.props.isSelected} + select={emptyFunction} + active={this.active} + ContentScaling={returnOne} + whenActiveChanged={this.whenActiveChanged} + removeDocument={this.removeDocument} + moveDocument={this.moveDocument} + addDocument={this.addDocument} + CollectionView={undefined} + ScreenToLocalTransform={() => this.props.ScreenToLocalTransform().translate(-(this.props.PanelWidth() - this.sidebarWidth), 0)} + ruleProvider={undefined} + renderDepth={this.props.renderDepth + 1} + ContainingCollectionDoc={this.props.ContainingCollectionDoc} + chromeCollapsed={true}> + </CollectionFreeFormView> + </div>} <div className="formattedTextBox-dictation" onClick={e => { this._recording ? this.stopDictation(true) : this.recordDictation(); diff --git a/src/client/views/nodes/FormattedTextBoxComment.scss b/src/client/views/nodes/FormattedTextBoxComment.scss index 792cee182..2dd63ec21 100644 --- a/src/client/views/nodes/FormattedTextBoxComment.scss +++ b/src/client/views/nodes/FormattedTextBoxComment.scss @@ -5,7 +5,6 @@ background: white; border: 1px solid silver; border-radius: 2px; - padding: 2px 10px; margin-bottom: 7px; -webkit-transform: translateX(-50%); transform: translateX(-50%); diff --git a/src/client/views/nodes/FormattedTextBoxComment.tsx b/src/client/views/nodes/FormattedTextBoxComment.tsx index f35ca502f..c076fd34a 100644 --- a/src/client/views/nodes/FormattedTextBoxComment.tsx +++ b/src/client/views/nodes/FormattedTextBoxComment.tsx @@ -1,17 +1,20 @@ -import { Plugin, EditorState } from "prosemirror-state"; -import './FormattedTextBoxComment.scss'; -import { ResolvedPos, Mark } from "prosemirror-model"; +import { Mark, ResolvedPos } from "prosemirror-model"; +import { EditorState, Plugin } from "prosemirror-state"; import { EditorView } from "prosemirror-view"; +import * as ReactDOM from 'react-dom'; import { Doc } from "../../../new_fields/Doc"; -import { schema } from "../../util/RichTextSchema"; +import { Cast, FieldValue, NumCast } from "../../../new_fields/Types"; +import { emptyFunction, returnEmptyString, returnFalse, Utils } from "../../../Utils"; import { DocServer } from "../../DocServer"; -import { Utils } from "../../../Utils"; -import { StrCast, Cast, FieldValue } from "../../../new_fields/Types"; -import { FormattedTextBox } from "./FormattedTextBox"; -import { DocUtils } from "../../documents/Documents"; -import { isBuffer } from "util"; import { DocumentManager } from "../../util/DocumentManager"; -import { DocumentType } from "../../documents/DocumentTypes"; +import { schema } from "../../util/RichTextSchema"; +import { Transform } from "../../util/Transform"; +import { ContentFittingDocumentView } from "./ContentFittingDocumentView"; +import { FormattedTextBox } from "./FormattedTextBox"; +import './FormattedTextBoxComment.scss'; +import React = require("react"); +import { Docs } from "../../documents/Documents"; +import wiki from "wikijs"; export let formattedTextBoxCommentPlugin = new Plugin({ view(editorView) { return new FormattedTextBoxComment(editorView); } @@ -50,6 +53,7 @@ export function findEndOfMark(rpos: ResolvedPos, view: EditorView, finder: (mark export class FormattedTextBoxComment { static tooltip: HTMLElement; static tooltipText: HTMLElement; + static tooltipInput: HTMLInputElement; static start: number; static end: number; static mark: Mark; @@ -59,30 +63,40 @@ export class FormattedTextBoxComment { constructor(view: any) { if (!FormattedTextBoxComment.tooltip) { const root = document.getElementById("root"); - let input = document.createElement("input"); - input.type = "checkbox"; + FormattedTextBoxComment.tooltipInput = document.createElement("input"); + FormattedTextBoxComment.tooltipInput.type = "checkbox"; FormattedTextBoxComment.tooltip = document.createElement("div"); FormattedTextBoxComment.tooltipText = document.createElement("div"); + FormattedTextBoxComment.tooltipText.style.width = "100%"; + FormattedTextBoxComment.tooltipText.style.height = "100%"; + FormattedTextBoxComment.tooltipText.style.textOverflow = "ellipsis"; FormattedTextBoxComment.tooltip.appendChild(FormattedTextBoxComment.tooltipText); FormattedTextBoxComment.tooltip.className = "FormattedTextBox-tooltip"; FormattedTextBoxComment.tooltip.style.pointerEvents = "all"; FormattedTextBoxComment.tooltip.style.maxWidth = "350px"; - FormattedTextBoxComment.tooltip.appendChild(input); + FormattedTextBoxComment.tooltip.style.maxHeight = "250px"; + FormattedTextBoxComment.tooltip.style.width = "100%"; + FormattedTextBoxComment.tooltip.style.height = "100%"; + FormattedTextBoxComment.tooltip.style.overflow = "hidden"; + FormattedTextBoxComment.tooltip.style.display = "none"; + FormattedTextBoxComment.tooltip.appendChild(FormattedTextBoxComment.tooltipInput); FormattedTextBoxComment.tooltip.onpointerdown = (e: PointerEvent) => { let keep = e.target && (e.target as any).type === "checkbox" ? true : false; - if (FormattedTextBoxComment.linkDoc && !keep && FormattedTextBoxComment.textBox) { - DocumentManager.Instance.FollowLink(FormattedTextBoxComment.linkDoc, FormattedTextBoxComment.textBox.props.Document, - (doc: Doc, maxLocation: string) => FormattedTextBoxComment.textBox!.props.addDocTab(doc, undefined, e.ctrlKey ? "inTab" : "onRight")); + const textBox = FormattedTextBoxComment.textBox; + if (FormattedTextBoxComment.linkDoc && !keep && textBox) { + DocumentManager.Instance.FollowLink(FormattedTextBoxComment.linkDoc, textBox.props.Document, + (doc: Doc, maxLocation: string) => textBox.props.addDocTab(doc, undefined, e.ctrlKey ? "inTab" : "onRight")); + } else if (textBox && (FormattedTextBoxComment.tooltipText as any).href) { + textBox.props.addDocTab(Docs.Create.WebDocument((FormattedTextBoxComment.tooltipText as any).href, { title: (FormattedTextBoxComment.tooltipText as any).href, width: 200, height: 400 }), undefined, "onRight"); } FormattedTextBoxComment.opened = keep || !FormattedTextBoxComment.opened; - FormattedTextBoxComment.textBox && FormattedTextBoxComment.start !== undefined && FormattedTextBoxComment.textBox.setAnnotation( + textBox && FormattedTextBoxComment.start !== undefined && textBox.setAnnotation( FormattedTextBoxComment.start, FormattedTextBoxComment.end, FormattedTextBoxComment.mark, FormattedTextBoxComment.opened, keep); e.stopPropagation(); }; root && root.appendChild(FormattedTextBoxComment.tooltip); } - this.update(view, undefined); } public static Hide() { @@ -98,7 +112,7 @@ export class FormattedTextBoxComment { FormattedTextBoxComment.tooltip && (FormattedTextBoxComment.tooltip.style.display = ""); } - update(view: EditorView, lastState?: EditorState) { + static update(view: EditorView, lastState?: EditorState) { let state = view.state; // Don't do anything if the document/selection didn't change if (lastState && lastState.doc.eq(state.doc) && @@ -113,6 +127,12 @@ export class FormattedTextBoxComment { } let set = "none"; let nbef = 0; + FormattedTextBoxComment.tooltipInput.style.display = "none"; + FormattedTextBoxComment.tooltip.style.width = ""; + FormattedTextBoxComment.tooltip.style.height = ""; + (FormattedTextBoxComment.tooltipText as any).href = ""; + FormattedTextBoxComment.tooltipText.style.whiteSpace = ""; + FormattedTextBoxComment.tooltipText.style.overflow = ""; // this section checks to see if the insertion point is over text entered by a different user. If so, it sets ths comment text to indicate the user and the modification date if (state.selection.$from) { nbef = findStartOfMark(state.selection.$from, view, findOtherUserMark); @@ -127,6 +147,7 @@ export class FormattedTextBoxComment { if (mark && child && ((nbef && naft) || !noselection)) { FormattedTextBoxComment.tooltipText.textContent = mark.attrs.userid + " date=" + (new Date(mark.attrs.modified * 5000)).toDateString(); set = ""; + FormattedTextBoxComment.tooltipInput.style.display = ""; } } // this checks if the selection is a hyperlink. If so, it displays the target doc's text for internal links, and the url of the target for external links. @@ -138,15 +159,48 @@ export class FormattedTextBoxComment { let mark = child && findLinkMark(child.marks); if (mark && child && nbef && naft) { FormattedTextBoxComment.tooltipText.textContent = "external => " + mark.attrs.href; + if (mark.attrs.href.startsWith("https://en.wikipedia.org/wiki/")) { + wiki().page(mark.attrs.href.replace("https://en.wikipedia.org/wiki/", "")).then(page => page.summary().then(summary => FormattedTextBoxComment.tooltipText.textContent = summary.substring(0, 500))); + } else { + FormattedTextBoxComment.tooltipText.style.whiteSpace = "pre"; + FormattedTextBoxComment.tooltipText.style.overflow = "hidden"; + } + (FormattedTextBoxComment.tooltipText as any).href = mark.attrs.href; if (mark.attrs.href.indexOf(Utils.prepend("/doc/")) === 0) { let docTarget = mark.attrs.href.replace(Utils.prepend("/doc/"), "").split("?")[0]; docTarget && DocServer.GetRefField(docTarget).then(linkDoc => { if (linkDoc instanceof Doc) { FormattedTextBoxComment.linkDoc = linkDoc; - let target = FieldValue(Doc.AreProtosEqual(FieldValue(Cast(linkDoc.anchor1, Doc)), textBox.props.Document) ? Cast(linkDoc.anchor2, Doc) : Cast(linkDoc.anchor1, Doc)); - let ext = (target && target.type !== DocumentType.PDFANNO && Doc.fieldExtensionDoc(target, "data")) || target; // try guessing that the target doc's data is in the 'data' field. probably need an 'overviewLayout' and then just display the target Document .... - let text = ext && StrCast(ext.text); - ext && (FormattedTextBoxComment.tooltipText.textContent = (target && target.type === DocumentType.PDFANNO ? "Quoted from " : "") + "=> " + (text || StrCast(ext.title))); + const target = FieldValue(Doc.AreProtosEqual(FieldValue(Cast(linkDoc.anchor1, Doc)), textBox.props.Document) ? Cast(linkDoc.anchor2, Doc) : Cast(linkDoc.anchor1, Doc)); + try { + ReactDOM.unmountComponentAtNode(FormattedTextBoxComment.tooltipText); + } catch (e) { } + if (target) { + ReactDOM.render(<ContentFittingDocumentView + fitToBox={true} + Document={target} + moveDocument={returnFalse} + getTransform={Transform.Identity} + active={returnFalse} + setPreviewScript={returnEmptyString} + addDocument={returnFalse} + removeDocument={returnFalse} + ruleProvider={undefined} + addDocTab={returnFalse} + pinToPres={returnFalse} + dontRegisterView={true} + renderDepth={1} + PanelWidth={() => Math.min(350, NumCast(target.width, 350))} + PanelHeight={() => Math.min(250, NumCast(target.height, 250))} + focus={emptyFunction} + whenActiveChanged={returnFalse} + />, FormattedTextBoxComment.tooltipText); + FormattedTextBoxComment.tooltip.style.width = NumCast(target.width) ? `${NumCast(target.width)}` : "100%"; + FormattedTextBoxComment.tooltip.style.height = NumCast(target.height) ? `${NumCast(target.height)}` : "100%"; + } + // let ext = (target && target.type !== DocumentType.PDFANNO && Doc.fieldExtensionDoc(target, "data")) || target; // try guessing that the target doc's data is in the 'data' field. probably need an 'overviewLayout' and then just display the target Document .... + // let text = ext && StrCast(ext.text); + // ext && (FormattedTextBoxComment.tooltipText.textContent = (target && target.type === DocumentType.PDFANNO ? "Quoted from " : "") + "=> " + (text || StrCast(ext.title))); } }); } @@ -168,5 +222,5 @@ export class FormattedTextBoxComment { FormattedTextBoxComment.tooltip && (FormattedTextBoxComment.tooltip.style.display = set); } - destroy() { FormattedTextBoxComment.tooltip.style.display = "none"; } + destroy() { } } diff --git a/src/client/views/presentationview/PresElementBox.tsx b/src/client/views/presentationview/PresElementBox.tsx index 17b2094ec..f50a3a0ef 100644 --- a/src/client/views/presentationview/PresElementBox.tsx +++ b/src/client/views/presentationview/PresElementBox.tsx @@ -172,7 +172,6 @@ export class PresElementBox extends DocComponent<FieldViewProps, PresDocument>(P <ContentFittingDocumentView fitToBox={StrCast(this.targetDoc.type).indexOf(DocumentType.COL) !== -1} Document={this.targetDoc} - fieldKey={this.props.fieldKey} addDocument={returnFalse} removeDocument={returnFalse} ruleProvider={undefined} diff --git a/src/client/views/search/FilterBox.tsx b/src/client/views/search/FilterBox.tsx index b841190d4..62f3aba4c 100644 --- a/src/client/views/search/FilterBox.tsx +++ b/src/client/views/search/FilterBox.tsx @@ -33,7 +33,7 @@ export enum Keys { export class FilterBox extends React.Component { static Instance: FilterBox; - public _allIcons: string[] = [DocumentType.AUDIO, DocumentType.COL, DocumentType.IMG, DocumentType.LINK, DocumentType.PDF, DocumentType.TEXT, DocumentType.VID, DocumentType.WEB]; + public _allIcons: string[] = [DocumentType.AUDIO, DocumentType.COL, DocumentType.IMG, DocumentType.LINK, DocumentType.PDF, DocumentType.TEXT, DocumentType.VID, DocumentType.WEB, DocumentType.TEMPLATE]; //if true, any keywords can be used. if false, all keywords are required. //this also serves as an indicator if the word status filter is applied @@ -82,7 +82,7 @@ export class FilterBox extends React.Component { var panel = this.nextElementSibling as HTMLElement; if (panel.style.maxHeight) { panel.style.overflow = "hidden"; - panel.style.maxHeight = null; + panel.style.maxHeight = ""; panel.style.opacity = "0"; } else { setTimeout(() => { @@ -114,7 +114,7 @@ export class FilterBox extends React.Component { acc[i].classList.toggle("active"); var panel = acc[i].nextElementSibling as HTMLElement; panel.style.overflow = "hidden"; - panel.style.maxHeight = null; + panel.style.maxHeight = ""; } } }); diff --git a/src/new_fields/Doc.ts b/src/new_fields/Doc.ts index f3c74428a..08d808e78 100644 --- a/src/new_fields/Doc.ts +++ b/src/new_fields/Doc.ts @@ -473,8 +473,9 @@ export namespace Doc { export function CreateDocumentExtensionForField(doc: Doc, fieldKey: string) { let docExtensionForField = new Doc(doc[Id] + fieldKey, true); - docExtensionForField.title = fieldKey + ".ext"; + docExtensionForField.title = fieldKey + ".ext"; // courtesy field--- shouldn't be needed except maybe for debugging docExtensionForField.extendsDoc = doc; // this is used by search to map field matches on the extension doc back to the document it extends. + docExtensionForField.extendsField = fieldKey; // this can be used by search to map matches on the extension doc back to the field that was extended. docExtensionForField.type = DocumentType.EXTENSION; let proto: Doc | undefined = doc; while (proto && !Doc.IsPrototype(proto) && proto.proto) { @@ -569,7 +570,7 @@ export namespace Doc { let layoutCustomLayout = Doc.MakeDelegate(templateDoc); titleTarget && (Doc.GetProto(target).title = titleTarget); - target.type = DocumentType.TEMPLATE; + Doc.GetProto(target).type = DocumentType.TEMPLATE; target.onClick = templateDoc.onClick instanceof ObjectField && templateDoc.onClick[Copy](); Doc.GetProto(target)[targetKey] = layoutCustomLayout; diff --git a/src/new_fields/RichTextField.ts b/src/new_fields/RichTextField.ts index 499d7b949..e86251732 100644 --- a/src/new_fields/RichTextField.ts +++ b/src/new_fields/RichTextField.ts @@ -10,18 +10,22 @@ export class RichTextField extends ObjectField { @serializable(true) readonly Data: string; - constructor(data: string) { + @serializable(true) + readonly Text: string; + + constructor(data: string, text: string = "") { super(); this.Data = data; + this.Text = text; } [Copy]() { - return new RichTextField(this.Data); + return new RichTextField(this.Data, this.Text); } [ToScriptString]() { - return `new RichTextField("${this.Data}")`; + return `new RichTextField("${this.Data}", "${this.Text}")`; } }
\ No newline at end of file diff --git a/src/new_fields/RichTextUtils.ts b/src/new_fields/RichTextUtils.ts index 601939ed2..c2cca859c 100644 --- a/src/new_fields/RichTextUtils.ts +++ b/src/new_fields/RichTextUtils.ts @@ -52,7 +52,7 @@ export namespace RichTextUtils { }; export const Synthesize = (plainText: string, oldState?: RichTextField) => { - return new RichTextField(ToProsemirrorState(plainText, oldState)); + return new RichTextField(ToProsemirrorState(plainText, oldState), plainText); }; export const ToPlainText = (state: EditorState) => { diff --git a/src/new_fields/SchemaHeaderField.ts b/src/new_fields/SchemaHeaderField.ts index 92d0aec9a..42a8485ac 100644 --- a/src/new_fields/SchemaHeaderField.ts +++ b/src/new_fields/SchemaHeaderField.ts @@ -41,6 +41,17 @@ export const PastelSchemaPalette = new Map<string, string>([ export const RandomPastel = () => Array.from(PastelSchemaPalette.values())[Math.floor(Math.random() * PastelSchemaPalette.size)]; +export const DarkPastelSchemaPalette = new Map<string, string>([ + ["pink2", "#c932b0"], + ["purple4", "#913ad6"], + ["bluegreen1", "#3978ed"], + ["bluegreen7", "#2adb3e"], + ["bluegreen5", "#21b0eb"], + ["yellow4", "#edcc0c"], + ["red2", "#eb3636"], + ["orange1", "#f2740f"], +]); + @scriptingGlobal @Deserializable("schemaheader") export class SchemaHeaderField extends ObjectField { diff --git a/src/new_fields/documentSchemas.ts b/src/new_fields/documentSchemas.ts index e2730914f..fa47374f1 100644 --- a/src/new_fields/documentSchemas.ts +++ b/src/new_fields/documentSchemas.ts @@ -31,7 +31,8 @@ export const documentSchema = createSchema({ summarizedDocs: listSpec(Doc), // documents that are summarized by this document (and which will typically be opened by clicking this document) maximizedDocs: listSpec(Doc), // documents to maximize when clicking this document (generally this document will be an icon) maximizeLocation: "string", // flag for where to place content when following a click interaction (e.g., onRight, inPlace, inTab) - lockedPosition: "boolean", // whether the document can be spatially manipulated + lockedPosition: "boolean", // whether the document can be moved (dragged) + lockedTransform: "boolean", // whether the document can be panned/zoomed inOverlay: "boolean", // whether the document is rendered in an OverlayView which handles selection/dragging differently borderRounding: "string", // border radius rounding of document searchFields: "string", // the search fields to display when this document matches a search in its metadata diff --git a/src/scraping/buxton/source/.Bill_Notes_NewO.docx.icloud b/src/scraping/buxton/source/.Bill_Notes_NewO.docx.icloud Binary files differdeleted file mode 100644 index f71886d8c..000000000 --- a/src/scraping/buxton/source/.Bill_Notes_NewO.docx.icloud +++ /dev/null diff --git a/src/scraping/buxton/source/.Bill_Notes_OLPC.docx.icloud b/src/scraping/buxton/source/.Bill_Notes_OLPC.docx.icloud Binary files differdeleted file mode 100644 index 30ddb3091..000000000 --- a/src/scraping/buxton/source/.Bill_Notes_OLPC.docx.icloud +++ /dev/null diff --git a/src/server/authentication/models/current_user_utils.ts b/src/server/authentication/models/current_user_utils.ts index 833e44bf6..466e2d707 100644 --- a/src/server/authentication/models/current_user_utils.ts +++ b/src/server/authentication/models/current_user_utils.ts @@ -185,6 +185,8 @@ export class CurrentUserUtils { (doc.curPresentation === undefined) && CurrentUserUtils.setupDefaultPresentation(doc); (doc.sidebarButtons === undefined) && CurrentUserUtils.setupSidebarButtons(doc); + // this is equivalent to using PrefetchProxies to make sure the recentlyClosed doc is ready + PromiseValue(Cast(doc.recentlyClosed, Doc)).then(recent => recent && PromiseValue(recent.data).then(DocListCast)); // this is equivalent to using PrefetchProxies to make sure all the sidebarButtons and noteType internal Doc's have been retrieved. PromiseValue(Cast(doc.noteTypes, Doc)).then(noteTypes => noteTypes && PromiseValue(noteTypes.data).then(DocListCast)); PromiseValue(Cast(doc.sidebarButtons, Doc)).then(stackingDoc => { diff --git a/src/server/index.ts b/src/server/index.ts index 1595781dc..ddd909479 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1163,6 +1163,7 @@ const suffixMap: { [type: string]: (string | [string, string | ((json: any) => a "pdf": ["_t", "url"], "audio": ["_t", "url"], "web": ["_t", "url"], + "RichTextField": ["_t", value => value.Text], "date": ["_d", value => new Date(value.date).toISOString()], "proxy": ["_i", "fieldId"], "list": ["_l", list => { |